diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-26 15:27:01 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-26 15:27:01 -0700 |
| commit | 10d61df78bdbf002a3701e468b0a3c88be2cad03 (patch) | |
| tree | 3199e67f26a5b42e5aa5ccdd03a5924486f31b79 /lib/metaprogramming.nom | |
| parent | 02def0af9226d7b0b86195093a87ef251934c797 (diff) | |
Making forward progress.
Diffstat (limited to 'lib/metaprogramming.nom')
| -rw-r--r-- | lib/metaprogramming.nom | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/lib/metaprogramming.nom b/lib/metaprogramming.nom index e60a235..301d74b 100644 --- a/lib/metaprogramming.nom +++ b/lib/metaprogramming.nom @@ -27,7 +27,6 @@ lua code ".." |end |nomsu:def("parse nomsu %shorthand as nomsu %longhand", parse_as) parse nomsu \(parse %shorthand as %longhand) as nomsu \(parse nomsu \%shorthand as nomsu \%longhand) -parse (foo %x) as (baz %x) lua code ".." |nomsu:defmacro("lua expr %code", function(nomsu, vars) @@ -71,17 +70,12 @@ parse (lua block %block) as: parse (nomsu) as: lua expr "nomsu" parse (nomsu's %key) as: - lua expr "nomsu[\(%key as lua)]" + lua expr "nomsu['\(%key)']" parse (nomsu %method %args) as: - lua block ".." - |local args = {"nomsu"} - |for _,arg in ipairs(vars.args.value) do - | table.insert(args, nomsu:tree_to_lua(arg)) - |end - |local method_name = nomsu:repr(nomsu:tree_to_value(vars.method, vars)) - ..with value ".." - |("nomsu[%s](%s)"):format(method_name, table.concat(args, ", ")) + lua expr "nomsu['\(%method)'](nomsu, unpack(\(%args)))" parse (repr %) as: nomsu "repr" [%] +repr 5 + # Get the source code for a function rule (help %rule) =: @@ -111,3 +105,18 @@ parse (source code %body) as: source code from tree \%body parse (parse tree %code) as: repr (nomsu "tree_to_str" [\%code]) +parse (parse %code as lua code %lua) as: + parse nomsu \%code as nomsu: + nomsu "replaced_vars" [\(lua code %lua), lua expr "vars"] + +parse (parse %code as lua expr %lua) as: + parse nomsu \%code as nomsu: + nomsu "replaced_vars" [\(lua expr %lua), lua expr "vars"] + +parse (parse %code as lua block %lua) as: + parse nomsu \%code as nomsu: + nomsu "replaced_vars" [\(lua block %lua), lua expr "vars"] + +parse (pass) as lua code: "" + +pass |
