forth: Clean up symbol eval for better perf
[jackhill/mal.git] / forth / env.fs
index 1b5a362..9469bf2 100644 (file)
@@ -15,25 +15,18 @@ deftype MalEnv
     key val env MalEnv/data @ assoc
     env MalEnv/data ! ;
 
-: env/find { key env -- env-or-0 }
+: env/get-addr { key env -- val-addr }
     env
     begin ( env )
-        dup 0 key rot MalEnv/data @ get ( env val-or-0 )
-        0= if ( env )
+        key over MalEnv/data @ MalMap/get-addr ( env addr-or-0 )
+        ?dup 0= if ( env )
             MalEnv/outer @ dup 0= ( env-or-0 done-looping? )
-        else
-            -1 \ found it! ( env -1 )
+        else ( env addr )
+            nip -1 \ found it! ( addr -1 )
         endif
     until ;
 
 MalEnv
-  extend get { not-found key env -- }
-    key env env/find ( env-or-0 )
-    ?dup 0= if
-        not-found
-    else ( env )
-        not-found key rot MalEnv/data @ get
-    endif ;;
   extend pr-buf { env }
     env MalEnv/data @ pr-buf
     a-space s" outer: " str-append