about summary refs log tree commit diff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-10-29T11·22+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-10-29T11·22+0000
commita69534fc217666d53a418605de0ebb0879cbb2f7 (patch)
treeb91bc4123796ff607c0c0b3861fe45ed37028bf3 /src/libexpr
parented09821859e8e585c8479a3c3bf95e76d518d66f (diff)
* Drop ATmake / ATMatcher also in handling store expressions.
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/Makefile.am11
-rwxr-xr-xsrc/libexpr/aterm-helper.pl108
-rw-r--r--src/libexpr/eval.cc4
-rw-r--r--src/libexpr/nixexpr-ast.def (renamed from src/libexpr/constructors.def)2
-rw-r--r--src/libexpr/nixexpr.cc4
-rw-r--r--src/libexpr/parser.cc2
-rw-r--r--src/libexpr/parser.y2
-rw-r--r--src/libexpr/primops.cc2
8 files changed, 14 insertions, 121 deletions
diff --git a/src/libexpr/Makefile.am b/src/libexpr/Makefile.am
index a52b4710d2..d7de30855c 100644
--- a/src/libexpr/Makefile.am
+++ b/src/libexpr/Makefile.am
@@ -3,10 +3,9 @@ noinst_LIBRARIES = libexpr.a
 libexpr_a_SOURCES = nixexpr.cc nixexpr.hh parser.cc parser.hh \
  eval.cc eval.hh primops.cc \
  lexer-tab.c lexer-tab.h parser-tab.c parser-tab.h \
- constructors.hh
+ nixexpr-ast.hh
 
-EXTRA_DIST = lexer.l parser.y constructors.def constructors.cc \
- aterm-helper.pl
+EXTRA_DIST = lexer.l parser.y nixexpr-ast.def nixexpr-ast.cc
 
 AM_CXXFLAGS = \
  -I.. ${bdb_include} ${aterm_include} -I../libutil -I../libstore
@@ -27,10 +26,10 @@ lexer-tab.c lexer-tab.h: lexer.l
 
 # ATerm helper function generation.
 
-constructors.cc constructors.hh: aterm-helper.pl constructors.def
-	$(perl) aterm-helper.pl constructors.hh constructors.cc < constructors.def
+nixexpr-ast.cc nixexpr-ast.hh: ../aterm-helper.pl nixexpr-ast.def
+	$(perl) ../aterm-helper.pl nixexpr-ast.hh nixexpr-ast.cc < nixexpr-ast.def
 
-nixexpr.hh: constructors.hh
+nixexpr.hh: nixexpr-ast.hh
 
 
 CLEANFILES =
diff --git a/src/libexpr/aterm-helper.pl b/src/libexpr/aterm-helper.pl
deleted file mode 100755
index 9a1a931a91..0000000000
--- a/src/libexpr/aterm-helper.pl
+++ /dev/null
@@ -1,108 +0,0 @@
-#! /usr/bin/perl -w
-
-die if scalar @ARGV != 2;
-
-my $syms = "";
-my $init = "";
-
-open HEADER, ">$ARGV[0]";
-open IMPL, ">$ARGV[1]";
-
-while (<STDIN>) {
-    next if (/^\s*$/);
-    
-    if (/^\s*(\w+)\s*\|([^\|]*)\|\s*(\w+)\s*\|\s*(\w+)?/) {
-        my $const = $1;
-        my @types = split ' ', $2;
-        my $result = $3;
-        my $funname = $4;
-        $funname = $const unless defined $funname;
-
-        my $formals = "";
-        my $formals2 = "";
-        my $args = "";
-        my $unpack = "";
-        my $n = 1;
-        foreach my $type (@types) {
-            $args .= ", ";
-            if ($type eq "string") {
-#                $args .= "(ATerm) ATmakeAppl0(ATmakeAFun((char *) e$n, 0, ATtrue))";
-#                $type = "const char *";
-                $type = "ATerm";
-                $args .= "e$n";
-            } elsif ($type eq "int") {
-                $args .= "(ATerm) ATmakeInt(e$n)";
-            } elsif ($type eq "ATermList" || $type eq "ATermBlob") {
-                $args .= "(ATerm) e$n";
-            } else {
-                $args .= "e$n";
-            }
-            $formals .= ", " if $formals ne "";
-            $formals .= "$type e$n";
-            $formals2 .= ", ";
-            $formals2 .= "$type & e$n";
-            my $m = $n - 1;
-            if ($type eq "int") {
-                $unpack .= "    e$n = ATgetInt((ATermInt) ATgetArgument(e, $m));\n";
-            } elsif ($type eq "ATermList") {
-                $unpack .= "    e$n = (ATermList) ATgetArgument(e, $m);\n";
-            } elsif ($type eq "ATermBlob") {
-                $unpack .= "    e$n = (ATermBlob) ATgetArgument(e, $m);\n";
-            } else {
-                $unpack .= "    e$n = ATgetArgument(e, $m);\n";
-            }
-            $n++;
-        }
-
-        my $arity = scalar @types;
-
-        print HEADER "extern AFun sym$funname;\n\n";
-        
-        print IMPL "AFun sym$funname = 0;\n";
-        
-        print HEADER "static inline $result make$funname($formals) {\n";
-        print HEADER "    return (ATerm) ATmakeAppl$arity(sym$funname$args);\n";
-        print HEADER "}\n\n";
-
-        print HEADER "#ifdef __cplusplus\n";
-        print HEADER "static inline bool match$funname(ATerm e$formals2) {\n";
-        print HEADER "    if (ATgetType(e) != AT_APPL || ATgetAFun(e) != sym$funname) return false;\n";
-        print HEADER "$unpack";
-        print HEADER "    return true;\n";
-        print HEADER "}\n";
-        print HEADER "#endif\n\n\n";
-
-        $init .= "    sym$funname = ATmakeAFun(\"$const\", $arity, ATfalse);\n";
-        $init .= "    ATprotectAFun(sym$funname);\n";
-    }
-
-    elsif (/^\s*(\w+)\s*=\s*(.*)$/) {
-        my $name = $1;
-        my $value = $2;
-        print HEADER "extern ATerm $name;\n";
-        print IMPL "ATerm $name = 0;\n";
-        $init .= "    $name = $value;\n";
-    }
-
-    else {
-        die "bad line: `$_'";
-    }
-}
-
-print HEADER "void initSyms();\n\n";
-
-print HEADER "static inline ATerm string2ATerm(const char * s) {\n";
-print HEADER "    return (ATerm) ATmakeAppl0(ATmakeAFun((char *) s, 0, ATtrue));\n";
-print HEADER "}\n\n";
-
-print HEADER "static inline const char * aterm2String(ATerm t) {\n";
-print HEADER "    return (const char *) ATgetName(ATgetAFun(t));\n";
-print HEADER "}\n\n";
-
-print IMPL "\n";
-print IMPL "void initSyms() {\n";
-print IMPL "$init";
-print IMPL "}\n";
-
-close HEADER;
-close IMPL;
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 88362333c2..cef3460029 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -1,6 +1,6 @@
 #include "eval.hh"
 #include "parser.hh"
-#include "constructors.hh"
+#include "nixexpr-ast.hh"
 
 
 EvalState::EvalState()
@@ -10,7 +10,7 @@ EvalState::EvalState()
     
     nrEvaluated = nrCached = 0;
 
-    initSyms();
+    initNixExprHelpers();
 
     addPrimOps();
 }
diff --git a/src/libexpr/constructors.def b/src/libexpr/nixexpr-ast.def
index 497cd33c33..19601847cf 100644
--- a/src/libexpr/constructors.def
+++ b/src/libexpr/nixexpr-ast.def
@@ -1,3 +1,5 @@
+init initNixExprHelpers
+
 Pos | string int int | Pos |
 NoPos | | Pos |
 
diff --git a/src/libexpr/nixexpr.cc b/src/libexpr/nixexpr.cc
index cbfb5576bf..56e053fd7a 100644
--- a/src/libexpr/nixexpr.cc
+++ b/src/libexpr/nixexpr.cc
@@ -2,8 +2,8 @@
 #include "storeexpr.hh"
 
 
-#include "constructors.hh"
-#include "constructors.cc"
+#include "nixexpr-ast.hh"
+#include "nixexpr-ast.cc"
 
 
 ATermMap::ATermMap(unsigned int initialSize, unsigned int maxLoadPct)
diff --git a/src/libexpr/parser.cc b/src/libexpr/parser.cc
index a0a6c01df7..8a199c0026 100644
--- a/src/libexpr/parser.cc
+++ b/src/libexpr/parser.cc
@@ -7,7 +7,7 @@
 
 #include "aterm.hh"
 #include "parser.hh"
-#include "constructors.hh"
+#include "nixexpr-ast.hh"
 
 
 struct ParseData 
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index 2864b1600e..8573697b63 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -18,7 +18,7 @@
 typedef ATerm Expr;
 typedef ATerm Pos;
     
-#include "constructors.hh"
+#include "nixexpr-ast.hh"
 
 void setParseResult(void * data, ATerm t);
 void parseError(void * data, char * error, int line, int column);
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index e230d35ce6..830a2c0958 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -1,7 +1,7 @@
 #include "normalise.hh"
 #include "eval.hh"
 #include "globals.hh"
-#include "constructors.hh"
+#include "nixexpr-ast.hh"
 
 
 /* Load and evaluate an expression from path specified by the