aboutsummaryrefslogtreecommitdiff
path: root/lib/operators.nom
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2017-09-26 15:27:01 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2017-09-26 15:27:01 -0700
commit10d61df78bdbf002a3701e468b0a3c88be2cad03 (patch)
tree3199e67f26a5b42e5aa5ccdd03a5924486f31b79 /lib/operators.nom
parent02def0af9226d7b0b86195093a87ef251934c797 (diff)
Making forward progress.
Diffstat (limited to 'lib/operators.nom')
-rw-r--r--lib/operators.nom40
1 files changed, 20 insertions, 20 deletions
diff --git a/lib/operators.nom b/lib/operators.nom
index f2bb7c2..4e7bd59 100644
--- a/lib/operators.nom
+++ b/lib/operators.nom
@@ -1,25 +1,25 @@
require "lib/metaprogramming.nom"
# Literals
-macro [true, yes] =: "true"
-macro [false, no] =: "false"
-macro [nil, null] =: "nil"
-macro [inf, infinity] =: "math.huge"
-macro [nan, NaN, not a number] =: "(0/0)"
-macro statement [nop, pass] =: ""
+parse (true; yes) as lua expr "true"
+parse (false; no) as lua expr "false"
+parse (nil; null) as lua expr "nil"
+parse (inf; infinity) as lua expr "math.huge"
+parse (nan; NaN; not a number) as lua expr "(0/0)"
+parse (nop; pass) as lua code ""
# Ternary operator
-macro [%if_expr if %condition else %else_expr] =:
- pass # TODO: Fix compiler bug that doesn't parse right here
+parse (%if_expr if %condition else %else_expr) as lua expr ".."
+ |(function(nomsu, vars)
+ # TODO: fix compiler bug that breaks this code if comments immediately follow ".."
#.. Note: this uses a function instead of (condition and if_expr or else_expr)
because that breaks if %if_expr is falsey.
- ".."|(function(nomsu, vars)
- | if \%condition as lua\ then
- | return \%if_expr as lua\
- | else
- | return \%else_expr as lua\
- | end
- |end)(nomsu, vars)
+ | if \(%condition) then
+ | return \(%if_expr)
+ | else
+ | return \(%else_expr)
+ | end
+ |end)(nomsu, vars)
# Variable assignment operator, and += type versions
lua block ".."
@@ -64,11 +64,11 @@ lua block ".."
| end
| nomsu:defmacro("%a "..nomsu_alias.." %b", (function(nomsu, vars, kind)
| return "("..nomsu:tree_to_lua(vars.a).." "..op.." "..nomsu:tree_to_lua(vars.b)..")"
- | end), [[".."|(\\%a as lua\\ ]]..op..[[ \\%b as lua\\)]])
+ | end), [["(\\(%a) ]]..op..[[ \\(%b))"]])
|end
# == and != do equivalence checking, rather than identity checking
-macro [%a == %b] =: ".."|nomsu.utils.equivalent(\%a as lua\, \%b as lua\)
-macro [%a != %b] =: ".."|(not nomsu.utils.equivalent(\%a as lua\, \%b as lua\))
+parse (%a == %b) as lua expr "nomsu.utils.equivalent(\(%a), \(%b))"
+parse (%a != %b) as lua expr "(not nomsu.utils.equivalent(\(%a), \(%b)))"
# Commutative Operators defined for up to 8 operands
# TODO: work out solution for commutative operators using more clever macros
@@ -125,5 +125,5 @@ lua block ".."
|end
# Unary operators
-macro [- %a] =: ".."|-(\%a as lua\)
-macro [not %a] =: ".."|not (\%a as lua\)
+parse (- %a) as lua expr "-(\(%a))"
+parse (not %a) as lua expr "not (\(%a))"