diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-19 01:30:05 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-19 01:30:05 -0700 |
| commit | a6cd8907c8ff03a07f9a706abe01c81e63d25d79 (patch) | |
| tree | ec10c8aa66f5ca1a264c5e1c55a33d9bf5a489d3 /lib/core.nom | |
| parent | b1b36fead5b4d7b24dfaf2670279928e7764cfb1 (diff) | |
Improved source code business.
Diffstat (limited to 'lib/core.nom')
| -rw-r--r-- | lib/core.nom | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/core.nom b/lib/core.nom index 54f728d..f83cbfc 100644 --- a/lib/core.nom +++ b/lib/core.nom @@ -48,12 +48,21 @@ rule: ..=: lua expr "compiler:run(vars.code)" -macro: source code %code ..=: +rule: source code from tree %tree ..=: lua block ".." - |if vars.code.value.type ~= "Thunk" then - | compiler:error("'source code %' only takes code blocks, not "..vars.code.value.type) + |local _,_,leading_space = vars.tree.src:find("\\n(%s*)%S") + |if leading_space then + | local chunk1, chunk2 = vars.tree.src:match(":%s*([^\\n]*)(\\n.*)") + | chunk2 = chunk2:gsub("\\n"..leading_space, "\\n") + | vars.source = chunk1..chunk2.."\\n" + |else + | vars.source = vars.tree.src:match(":%s*(%S.*)").."\\n" |end - lua expr "compiler.utils.repr(vars.code.value.value.src, true)" + + %source + +macro: source code %body ..=: + repr (source code from tree %body) rule: run file %filename ..=: lua block ".." @@ -71,11 +80,12 @@ rule: error %msg ..=: |table.remove(compiler.callstack) |compiler:error(vars.msg) +# TODO: Make useful macro: as lua %block ..=: - lua expr "compiler.utils.repr(compiler:tree_to_lua(vars.block.value.value, vars), true)" + lua expr "compiler.utils.repr(compiler:tree_to_lua(vars.block.value.value, 'Statement'), true)" macro block: show generated lua %block ..=: - ".."|compiler:writeln(\lua expr "compiler.utils.repr(compiler:tree_to_lua(vars.block.value.value, vars), true)"\) + ".."|compiler:writeln(\lua expr "compiler.utils.repr(compiler:tree_to_lua(vars.block.value.value, 'Statement'), true)"\) # Macro helper functions rule: %tree as value ..=: |
