aboutsummaryrefslogtreecommitdiff
path: root/src/aterm-helper.pl
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-05-02 21:58:46 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-05-02 21:58:46 +0000
commitd300b4383dabb007db08c7165fb327c12dbe8e71 (patch)
tree30b02d509ebe41d065e8c148d80506952c8e492d /src/aterm-helper.pl
parent68174bdc7d68746c5471e87bb74909c552e98644 (diff)
* Optimise null-ary term builders. Also declare all term builder
functions as pure, which might improve performance a bit.
Diffstat (limited to 'src/aterm-helper.pl')
-rwxr-xr-xsrc/aterm-helper.pl15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/aterm-helper.pl b/src/aterm-helper.pl
index 1feff0ccd..3bb466fe3 100755
--- a/src/aterm-helper.pl
+++ b/src/aterm-helper.pl
@@ -99,8 +99,17 @@ while (<STDIN>) {
print IMPL "AFun sym$funname = 0;\n";
+ if ($arity == 0) {
+ print HEADER "extern ATerm const$funname;\n\n";
+ print IMPL "ATerm const$funname = 0;\n";
+ }
+
+ print HEADER "static inline $result make$funname($formals) __attribute__ ((pure, nothrow));\n";
print HEADER "static inline $result make$funname($formals) {\n";
- if ($arity <= 6) {
+ if ($arity == 0) {
+ print HEADER " return const$funname;\n";
+ }
+ elsif ($arity <= 6) {
print HEADER " return (ATerm) ATmakeAppl$arity(sym$funname$args);\n";
} else {
$args =~ s/^,//;
@@ -119,6 +128,10 @@ while (<STDIN>) {
$init .= " sym$funname = ATmakeAFun(\"$const\", $arity, ATfalse);\n";
$init .= " ATprotectAFun(sym$funname);\n";
+ if ($arity == 0) {
+ $init .= " const$funname = (ATerm) ATmakeAppl0(sym$funname);\n";
+ $init .= " ATprotect(&const$funname);\n";
+ }
}
elsif (/^\s*(\w+)\s*=\s*(.*)$/) {