From 98421a92154778d521afb44ceedc54e04f6b76dc Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Sat, 20 Jul 2024 13:51:11 -0400 Subject: [PATCH] allow shadowing of prelude --- src/ludus.janet | 8 +++----- src/validate.janet | 8 +++++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/ludus.janet b/src/ludus.janet index 9b45d28..bc9a4e5 100644 --- a/src/ludus.janet +++ b/src/ludus.janet @@ -51,14 +51,12 @@ (-> out j/encode string) ) -# (comment -(do +(comment +# (do # (def start (os/clock)) (def source ` let foo = :bar -{ - let foo = :baz -} +let first = 1 `) (def out (-> source ludus diff --git a/src/validate.janet b/src/validate.janet index 3f20743..5f81685 100644 --- a/src/validate.janet +++ b/src/validate.janet @@ -102,6 +102,11 @@ Deferred until a later iteration of Ludus: (def node (get ctx name)) (if node node (resolve-name (get ctx :^parent) name))) +(defn- resolve-name-in-script [ctx name] + (when (ctx :^toplevel) (break nil)) + (def node (ctx name)) + (if node node (resolve-name-in-script (ctx :^parent) name))) + (defn- word [validator] (def ast (validator :ast)) (def name (ast :data)) @@ -158,7 +163,7 @@ Deferred until a later iteration of Ludus: (def name (ast :data)) (def ctx (validator :ctx)) ### XXX TODO: this resolution should ONLY be for userspace, NOT prelude - (def resolved (resolve-name ctx name)) + (def resolved (resolve-name-in-script ctx name)) (when resolved (def {:line line :input input} resolved) (array/push (validator :errors) @@ -766,6 +771,7 @@ Deferred until a later iteration of Ludus: (defn valid [ast &opt ctx] (default ctx @{}) + (set (ctx :^toplevel) true) (def validator (new-validator ast)) (def base-ctx @{:^parent ctx}) (set (validator :ctx) base-ctx)