diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-12-04 17:54:52 -0800 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-12-04 17:54:52 -0800 |
| commit | 5903820699db7f7ce2efdc0faa3874270da42a22 (patch) | |
| tree | 6d8933dd68fdedbee9c87494e38dac97038e34ed /lib/scopes.nom | |
| parent | b3b8c4d731b0983d5b12c56fc245a8d7c1d631f4 (diff) | |
Incremental progress towards working.
Diffstat (limited to 'lib/scopes.nom')
| -rw-r--r-- | lib/scopes.nom | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/scopes.nom b/lib/scopes.nom new file mode 100644 index 0000000..362a8c5 --- /dev/null +++ b/lib/scopes.nom @@ -0,0 +1,38 @@ +require "lib/metaprogramming.nom" +require "lib/operators.nom" +require "lib/control_flow.nom" + +compile [<%var> = %value] to code: ".." + |nomsu.defs['#vars'][\(repr (%var's "value"))] = \(%value as lua); + +compile [<%var>] to: "nomsu.defs['#vars'][\(repr (%var's "value"))]" + +compile [str %] to: "tostring(\(% as lua))" + +compile [scope] to: "nomsu.defs" +compile [parent scope] to: "getmetatable(nomsu.defs).__index" + +parse [using %scoped do %actions] as: + %scope = (=lua "setmetatable({['#vars']=setmetatable({}, {__index=nomsu.defs['#vars']})}, {__index=nomsu.defs})") + with (nomsu's "defs") = %scope: + do %scoped + lua> ".." + |getmetatable(nomsu.defs).__newindex = getmetatable(nomsu.defs).__index; + |getmetatable(nomsu.defs["#vars"]).__newindex = getmetatable(nomsu.defs["#vars"]).__index; + do %actions + +parse [scoped %actions] as: using %actions do {pass} + +rule [from %filename import %rules] =: + using: + require %filename + ..do: + %srcs = ((%'s "src") for %_ = % in (parent scope)) + for %src in (unique %srcs): + run %src + +parse [wrap %signature with %body] as: + using: + run ((nomsu)->*["defs",nomsu "get_stub" [\%signature->*["value",1]],"src"]) + ..do: + rule %signature = %body |
