aboutsummaryrefslogtreecommitdiff
path: root/lib/operators.nom
diff options
context:
space:
mode:
Diffstat (limited to 'lib/operators.nom')
-rw-r--r--lib/operators.nom30
1 files changed, 15 insertions, 15 deletions
diff --git a/lib/operators.nom b/lib/operators.nom
index 670e7b7..5d5a7a8 100644
--- a/lib/operators.nom
+++ b/lib/operators.nom
@@ -4,7 +4,7 @@
use "lib/metaprogramming.nom"
# Indexing:
-immediately
+immediately:
#.. NOTE!!! It's critical that there are spaces around %key if it's a string,
otherwise, Lua will get confused and interpret %obj[[[foo]]] as %obj("[foo]")
instead of %obj[ "foo" ].
@@ -14,7 +14,7 @@ immediately
compile [..]
%obj' %key, %obj's %key, %key in %obj, %key'th in %obj, %key of %obj,
%key st in %obj, %key nd in %obj, %key rd in %obj, %key th in %obj,
- ..to
+ ..to:
lua> ".."
local obj_lua = \(%obj as lua expr);
if not obj_lua:sub(-1,-1):match("[a-zA-Z)]") then
@@ -31,13 +31,13 @@ immediately
return {expr=obj_lua.."["..key_lua.."]"};
# Comparison Operators
-immediately
+immediately:
compile [%x < %y] to {expr:"(\(%x as lua expr) < \(%y as lua expr))"}
compile [%x > %y] to {expr:"(\(%x as lua expr) > \(%y as lua expr))"}
compile [%x <= %y] to {expr:"(\(%x as lua expr) <= \(%y as lua expr))"}
compile [%x >= %y] to {expr:"(\(%x as lua expr) >= \(%y as lua expr))"}
# TODO: optimize case of [%x,%y] = [1,2]
- compile [%a is %b, %a = %b, %a == %b] to
+ compile [%a is %b, %a = %b, %a == %b] to:
lua> ".."
local safe = {Text=true, Number=true};
local a_lua, b_lua = nomsu:tree_to_lua(\%a).expr, nomsu:tree_to_lua(\%b).expr;
@@ -46,7 +46,7 @@ immediately
else
return {expr="utils.equivalent("..a_lua..", "..b_lua..")"};
end
- compile [%a isn't %b, %a is not %b, %a not= %b, %a != %b] to
+ compile [%a isn't %b, %a is not %b, %a not= %b, %a != %b] to:
lua> ".."
local safe = {Text=true, Number=true};
local a_lua, b_lua = nomsu:tree_to_lua(\%a).expr, nomsu:tree_to_lua(\%b).expr;
@@ -59,8 +59,8 @@ immediately
compile [%'s id, id of %] to {expr:"nomsu.ids[\(% as lua expr)]"}
# Variable assignment operator
-immediately
- compile [%var <- %value] to
+immediately:
+ compile [%var <- %value] to:
lua> "local \%var_lua = nomsu:tree_to_lua(\%var);"
assume (%var_lua's "expr") or barf "Invalid target for assignment: \(%var's source code)"
lua> "local \%value_lua = nomsu:tree_to_lua(\%value);"
@@ -69,9 +69,9 @@ immediately
statements:"\(%var_lua's "expr") = \(%value_lua's "expr");"
locals: =lua "(\%var.type == 'Var' and {\%var_lua.expr} or nil)"
-immediately
+immediately:
# Simultaneous mutli-assignments like: x,y,z = 1,x,3;
- compile [<- %assignments] to
+ compile [<- %assignments] to:
%locals <- []
%targets <- []
%values <- []
@@ -93,15 +93,15 @@ immediately
utils.deduplicate(\%locals);
return {locals=\%locals, statements=(table.concat(\%targets, ", ").." = "..table.concat(\%values, ", ")..";")};
-immediately
- compile [export %var <- %value] to
+immediately:
+ compile [export %var <- %value] to:
%var_lua <- (%var as lua)
assume (%var_lua's "expr") or barf "Invalid target for assignment: \(%var's source code)"
%value_lua <- (%value as lua)
assume (%value_lua's "expr") or barf "Invalid value for assignment: \(%value's source code)"
return {statements:"\(%var_lua's "expr") = \(%value_lua's "expr");"}
- compile [exporting %exported %body] to
+ compile [exporting %exported %body] to:
%body_lua <- (%body as lua)
%leftover_locals <- (=lua "{unpack(\%body_lua.locals or {})}")
assume ((%exported's "type") = "List") or barf ".."
@@ -116,7 +116,7 @@ immediately
end
return {locals:%leftover_locals, statements:=lua "\%body_lua.statements or (\%body_lua.expr..';')"}
- compile [with %assignments %body] to
+ compile [with %assignments %body] to:
%body_lua <- (%body as lua)
%locals <- []
%declarations <- []
@@ -158,7 +158,7 @@ immediately
%s
end]]):format(locals_code, declaration_code, \%body_lua.statements or (\%body_lua.expr..";"))};
-immediately
+immediately:
# Math Operators
compile [%x + %y] to {expr:"(\(%x as lua expr) + \(%y as lua expr))"}
compile [%x - %y] to {expr:"(\(%x as lua expr) - \(%y as lua expr))"}
@@ -198,7 +198,7 @@ immediately
compile [not %] to {expr:"(not \(% as lua expr))"}
# Update operators
-immediately
+immediately:
parse [%var + <- %, %var +<- %] as: %var <- (%var + %)
parse [%var - <- %, %var -<- %] as: %var <- (%var - %)
parse [%var * <- %, %var *<- %] as: %var <- (%var * %)