aboutsummaryrefslogtreecommitdiff
path: root/lib/moonscript.nom
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2017-09-21 00:10:26 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2017-09-21 00:10:26 -0700
commit371548150618d5b3501f388972077b5d035f7d8a (patch)
tree8a1cdf99dc25536e21a5a571e5d54607a50848f4 /lib/moonscript.nom
parent0750d642624b2262afdb4dd17b275a16e96971b5 (diff)
Another overhaul, this time pulling all the chunks of the core lib into
their own files.
Diffstat (limited to 'lib/moonscript.nom')
-rw-r--r--lib/moonscript.nom30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/moonscript.nom b/lib/moonscript.nom
new file mode 100644
index 0000000..1b7bf2d
--- /dev/null
+++ b/lib/moonscript.nom
@@ -0,0 +1,30 @@
+require "lib/metaprogramming.nom"
+
+# Moonscript!
+macro block [moonscript block %moonscript_code] =:
+ lua block ".."
+ |local parse, compile = require('moonscript.parse'), require('moonscript.compile')
+ |local moon_code = compiler:tree_to_value(vars.moonscript_code, vars)
+ |local tree, err = parse.string(moon_code)
+ |if not tree then
+ | compiler:error("Failed to parse moonscript: "..err)
+ |end
+ |local lua_code, err, pos = compile.tree(tree)
+ |if not lua_code then
+ | compiler:error(compile.format_error(err, pos, moon_code))
+ |end
+ |return "do\\n"..lua_code.."\\nend"
+
+macro [moonscript %moonscript_code] =:
+ lua block ".."
+ |local parse, compile = require('moonscript.parse'), require('moonscript.compile')
+ |local moon_code = compiler:tree_to_value(vars.moonscript_code, vars)
+ |local tree, err = parse.string(moon_code)
+ |if not tree then
+ | compiler:error("Failed to parse moonscript: "..err)
+ |end
+ |local lua_code, err, pos = compile.tree(tree)
+ |if not lua_code then
+ | compiler:error(compile.format_error(err, pos, moon_code))
+ |end
+ |return "(function(compiler, vars)\\n"..lua_code.."\\nend)(compiler, vars)"