diff --git a/src/interpreter.janet b/src/interpreter.janet index a252b99..f6a5e53 100644 --- a/src/interpreter.janet +++ b/src/interpreter.janet @@ -345,7 +345,7 @@ (set (the-dict key) value)))) the-dict) -(defn- ref [ast ctx] +(defn- box [ast ctx] (def {:data value-ast :name name} ast) (def value (interpret value-ast ctx)) (def box @{:^type :box :^value value :name name}) @@ -595,7 +595,7 @@ # named/naming forms :word (word ast ctx) :interpolated (interpolated ast ctx) - :ref (ref ast ctx) + :box (box ast ctx) :pkg (pkg ast ctx) :pkg-name (word ast ctx) diff --git a/src/ludus.janet b/src/ludus.janet index bc9a4e5..dbdce7f 100644 --- a/src/ludus.janet +++ b/src/ludus.janet @@ -55,8 +55,9 @@ # (do # (def start (os/clock)) (def source ` -let foo = :bar -let first = 1 +box foo = :bar +store! (foo, :baz) +unbox (foo) `) (def out (-> source ludus diff --git a/src/parser.janet b/src/parser.janet index 379da18..edb84d0 100644 --- a/src/parser.janet +++ b/src/parser.janet @@ -871,16 +871,16 @@ (array/push data (capture simple parser))) {:type :do :data data :token origin}) -### refs, pkgs, nses, etc. -(defn- ref [parser] +### boxs, pkgs, nses, etc. +(defn- box [parser] (def origin (current parser)) - (expect parser :ref) (advance parser) + (expect parser :box) (advance parser) (try (do (def name (-> parser word-only (get :data))) (expect parser :equals) (advance parser) (def value (nonbinding parser)) - {:type :ref :data value :name name :token origin}) + {:type :box :data value :name name :token origin}) ([err] err))) (defn- pkg-name [parser] @@ -1011,7 +1011,7 @@ ### expressions # four levels of expression complexity: # simple (atoms, collections, synthetic expressions; no conditionals or binding or blocks) -# nonbinding (excludes let, ref, named fn: what is allowed inside collections) +# nonbinding (excludes let, box, named fn: what is allowed inside collections) # plain old exprs (anything but toplevel) # toplevel (exprs + ns, pkg, test, import, use) @@ -1099,7 +1099,7 @@ # binding forms :let (lett parser) :fn (fnn parser) - :ref (ref parser) + :box (box parser) # nonbinding forms :nil (nill parser) diff --git a/src/scanner.janet b/src/scanner.janet index 0f14dd7..b7f89d1 100644 --- a/src/scanner.janet +++ b/src/scanner.janet @@ -3,7 +3,7 @@ ## see ludus-spec repo for more info { "as" :as ## impl - "box" :ref + "box" :box "do" :do ## impl "else" :else ## impl "false" :false ## impl -> literal word diff --git a/src/validate.janet b/src/validate.janet index 5f81685..1fea991 100644 --- a/src/validate.janet +++ b/src/validate.janet @@ -343,7 +343,7 @@ Deferred until a later iteration of Ludus: (set (ast :arities) arities) validator) -(defn- ref [validator] +(defn- box [validator] (def ast (validator :ast)) (def ctx (validator :ctx)) (def expr (ast :data)) @@ -757,7 +757,7 @@ Deferred until a later iteration of Ludus: :use (usee validator) :loop (loopp validator) :recur (recur validator) - :ref (ref validator) + :box (box validator) (error (string "unknown node type " type))))) (set validate validate*)