git » jacl.git » commit 0177715

work on locals; keep fexpr and expr-valued locals maps

author Alan Dipert
2019-10-09 14:20:43 UTC
committer Alan Dipert
2019-10-09 14:20:43 UTC
parent ab173ffec7c67bc47fdd23c3758a5436efb62fe9

work on locals; keep fexpr and expr-valued locals maps

jacl.js +21 -16

diff --git a/jacl.js b/jacl.js
index 0691e55..becca80 100644
--- a/jacl.js
+++ b/jacl.js
@@ -694,7 +694,7 @@ const assoc = (...objs) => Object.assign({}, ...objs);
 
 //(def specials '#{if def fn* do let* loop recur new set! ns})
 
-const specials = new Map([
+const analyzeSpecials = new Map([
   [JACLPKG.intern("%CALL"), (env, form) => {
   }]
 ]);
@@ -717,8 +717,8 @@ const analyzeList = (env, form) => {
       form = sym.func()(...args);
     }
     return analyze(env, form);
-  } else if (specials.has(form.car)) {
-    return specials.get(form.car)(env, form);
+  } else if (analyzeSpecials.has(form.car)) {
+    return analyzeSpecials.get(form.car)(env, form);
   } else if (isLambdaForm(form) || form.car instanceof LispSymbol) {
     return parseCall(env, form);
   } else {
@@ -727,18 +727,21 @@ const analyzeList = (env, form) => {
 };
 
 const analyzeSymbol = (env, form) => {
-  const ret = (x) => assoc({ env: env, form: form }, x);
-  if (env.context === "fexpr") {
-    if (env.flocals.has(form)) {
-      return ret({ op: "local", name: env.flocals.get(form) });
-    } else {
-      return ret({ op: "symfunc" });
-    }
-  } else if (env.context === "expr") {
-    if (env.vlocals.has(form)) {
-      return ret({ op: "local", name: env.get('vlocals').get(form) });
+  if (env.context === "fexpr" || env.context === "expr") {
+    if (env.locals[env.context].has(form)) {
+      return {
+        op: "local",
+        env: env,
+        form: form,
+        name: env.locals[env.context].get(form)
+      };
     } else {
-      return ret({ op: "symval" });
+      return {
+        op: "sym",
+        ctx: env.context,
+        env: env,
+        form: form,
+      };
     }
   } else {
     throw new Error(`Unknown context: ${env.context}`);
@@ -746,8 +749,10 @@ const analyzeSymbol = (env, form) => {
 };
 
 const emptyEnv = { 
-  vlocals: new Map(),
-  flocals: new Map(),
+  locals: {
+    fexpr: new Map(),
+    expr: new Map()
+  },
   context: "expr"
 };