diff options
Diffstat (limited to 'lib/metaprogramming.nom')
| -rw-r--r-- | lib/metaprogramming.nom | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/metaprogramming.nom b/lib/metaprogramming.nom index bf4d79a..d167fef 100644 --- a/lib/metaprogramming.nom +++ b/lib/metaprogramming.nom @@ -3,7 +3,7 @@ that easier. # Rule to make rules: -lua code ".." +lua> ".." |nomsu:defmacro("rule %signature = %body", (function(nomsu, vars) | local signature = nomsu:get_stubs(nomsu:typecheck(vars, "signature", "List").value); | local body = nomsu:typecheck(vars, "body", "Thunk"); @@ -14,7 +14,7 @@ lua code ".." # Rule to make nomsu macros: rule [escaped parse %shorthand as %longhand] =: - lua code ".." + lua> ".." |local aliases = nomsu:get_stubs(nomsu:typecheck(vars, "shorthand", "List").value); |if #vars.longhand.value ~= 1 then; | nomsu:error("Expected only 1 line to parse to, but got "..tostring(#vars.longhand.value)); @@ -29,13 +29,13 @@ escaped parse \[parse %shorthand as %longhand] as \: escaped parse \%shorthand a # Rule to make lua macros: rule [escaped compile %macro_def to %body] =: - lua code ".." + lua> ".." |local aliases = nomsu:get_stubs(nomsu:typecheck(vars, "macro_def", "List").value); |local body = nomsu:typecheck(vars, "body", "Thunk"); |local thunk = nomsu:tree_to_value(body); |nomsu:defmacro(aliases, thunk, body.src); rule [escaped compile %macro_def to code %body] =: - lua code ".." + lua> ".." |local aliases = nomsu:get_stubs(nomsu:typecheck(vars, "macro_def", "List").value); |local body = nomsu:typecheck(vars, "body", "Thunk"); |local thunk = nomsu:tree_to_value(body); @@ -45,27 +45,27 @@ parse [compile %macro_def to %body] as: escaped compile \%macro_def to \%body parse [compile %macro_def to code %body] as: escaped compile \%macro_def to code \%body rule [do %] =: - lua expr "\(%)(nomsu, vars)" + =lua "\(%)(nomsu, vars)" rule [%tree as lua] =: - lua expr "nomsu:tree_to_lua(\(%tree))" + =lua "nomsu:tree_to_lua(\(%tree))" rule [%tree as value] =: - lua expr "nomsu:tree_to_value(\(%tree), vars)" + =lua "nomsu:tree_to_value(\(%tree), vars)" compile [repr %obj] to: "nomsu:repr(\(%obj as lua))" compile [type %obj, type of %obj] to: "type(\(%obj as lua))" -parse [lua block %block] as: lua code ".." +parse [lua do> %block] as: lua> ".." |do; | \(%block) |end; rule [%tree as lua statement] =: - lua block ".." + lua do> ".." |local _,statement = nomsu:tree_to_lua(\(%tree)); |return statement; rule [%tree as lua statements] =: - lua block ".." + lua do> ".." |local lua_bits = {}; |local statements = nomsu:typecheck(vars, "tree", "Thunk").value; |for _,bit in ipairs(statements) do; @@ -81,7 +81,7 @@ compile [nomsu %method %args] to: "nomsu[\(%method as lua)](nomsu, unpack(\(%arg # Get the source code for a function rule [help %rule] =: - lua block ".." + lua do> ".." |local fn_def = nomsu.defs[nomsu:get_stub(vars.rule)] |if not fn_def then; | nomsu:writeln("Rule not found: "..nomsu:repr(vars.rule)); @@ -95,7 +95,7 @@ rule [help %rule] =: # Compiler tools parse [eval %code, run %code] as: nomsu "run" [%code] rule [source code from tree %tree] =: - lua block ".." + lua do> ".." |local _,_,leading_space = vars.tree.src:find("\\n(%s*)%S"); |if leading_space then; | local chunk1, chunk2 = vars.tree.src:match(":%s*([^\\n]*)(\\n.*)"); @@ -108,5 +108,5 @@ parse [source code %body] as: source code from tree \%body parse [parse tree %code] as: nomsu "tree_to_str" [\%code] -parse [enable debugging] as: lua code "nomsu.debug = true" -parse [disable debugging] as: lua code "nomsu.debug = false" +parse [enable debugging] as: lua> "nomsu.debug = true" +parse [disable debugging] as: lua> "nomsu.debug = false" |
