blob: 8555287fb7ff270373afa1bc0a0d545d966efd50 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
|