From 69972a8399efe4abb8567526e90262e131f90d26 Mon Sep 17 00:00:00 2001 From: Chouser Date: Sat, 14 Feb 2015 13:40:07 -0500 Subject: forth: Add step 3 --- forth/step2_eval.fs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'forth/step2_eval.fs') diff --git a/forth/step2_eval.fs b/forth/step2_eval.fs index 51d1f6f..33ceb4e 100644 --- a/forth/step2_eval.fs +++ b/forth/step2_eval.fs @@ -15,9 +15,23 @@ value repl-env def-protocol-method mal-eval ( env ast -- val ) def-protocol-method mal-eval-ast ( env ast -- val ) +def-protocol-method invoke ( argv argc mal-fn -- ... ) MalDefault extend mal-eval nip ;; drop +MalKeyword + extend invoke { argv argc kw -- val } + argc 1 > if argv cell+ @ else mal-nil endif \ not-found + kw \ key + argv @ \ map + get ;; +drop + +MalFn + extend invoke ( ... mal-fn -- ... ) + MalFn/xt @ execute ;; +drop + MalSymbol extend mal-eval { env sym -- val } 0 sym env get -- cgit v1.2.3