From 3a17cb968281f7e833088fdb22cf793861810912 Mon Sep 17 00:00:00 2001 From: Chouser Date: Sat, 21 Feb 2015 18:50:50 -0500 Subject: forth: Clean up symbol eval for better perf --- forth/env.fs | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'forth/env.fs') diff --git a/forth/env.fs b/forth/env.fs index 1b5a362..9469bf2 100644 --- a/forth/env.fs +++ b/forth/env.fs @@ -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 -- cgit v1.2.3