add local and func
This commit is contained in:
parent
190a991b02
commit
176026c58d
2 changed files with 53 additions and 23 deletions
58
lib.nix
58
lib.nix
|
@ -49,6 +49,27 @@ let
|
||||||
++ [ (raw "") ]
|
++ [ (raw "") ]
|
||||||
);
|
);
|
||||||
pipe = join ".";
|
pipe = join ".";
|
||||||
|
spaceBetween = join " ";
|
||||||
|
|
||||||
|
op = operation: left: right: concat [ (raw "(") (join " ${operation} " [ left right ]) (raw ")") ];
|
||||||
|
|
||||||
|
add = op "+";
|
||||||
|
sub = op "-";
|
||||||
|
mul = op "*";
|
||||||
|
div = op "/";
|
||||||
|
mod = op "%";
|
||||||
|
exp = op "^";
|
||||||
|
|
||||||
|
eq = op "==";
|
||||||
|
ne = op "~=";
|
||||||
|
gt = op ">";
|
||||||
|
lt = op "<";
|
||||||
|
gte = op ">=";
|
||||||
|
lte = op "<=";
|
||||||
|
|
||||||
|
and = op "and";
|
||||||
|
or = op "or";
|
||||||
|
not = expr: spaceBetween [ (raw "not") expr ];
|
||||||
|
|
||||||
isRaw = expr: getType expr == "raw";
|
isRaw = expr: getType expr == "raw";
|
||||||
raw = expr:
|
raw = expr:
|
||||||
|
@ -72,28 +93,21 @@ let
|
||||||
);
|
);
|
||||||
require = name: call "require" [ name ];
|
require = name: call "require" [ name ];
|
||||||
|
|
||||||
|
local = expr: spaceBetween [ (raw "local") expr ];
|
||||||
set = variable: value: join " = " [ (raw variable) value ];
|
set = variable: value: join " = " [ (raw variable) value ];
|
||||||
lset = variable: value: join " " [ (raw "local") (set variable value) ];
|
func = name: params: body:
|
||||||
|
(concatLines
|
||||||
op = operation: left: right: concat [ (raw "(") (join " ${operation} " [ left right ]) (raw ")") ];
|
([
|
||||||
|
(concat [
|
||||||
add = op "+";
|
(spaceBetween (map raw [ "function" name ]))
|
||||||
sub = op "-";
|
(raw "(")
|
||||||
mul = op "*";
|
(join ", " (map raw params))
|
||||||
div = op "/";
|
(raw ")")
|
||||||
mod = op "%";
|
])
|
||||||
exp = op "^";
|
]
|
||||||
|
++ body
|
||||||
eq = op "==";
|
++ [ (raw "end") ])
|
||||||
ne = op "~=";
|
);
|
||||||
gt = op ">";
|
|
||||||
lt = op "<";
|
|
||||||
gte = op ">=";
|
|
||||||
lte = op "<=";
|
|
||||||
|
|
||||||
and = op "and";
|
|
||||||
or = op "or";
|
|
||||||
not = expr: join " " [ (raw "not") expr ];
|
|
||||||
|
|
||||||
isLuaNil = expr: getType expr == "nil";
|
isLuaNil = expr: getType expr == "nil";
|
||||||
LuaNil = { _type = "nil"; };
|
LuaNil = { _type = "nil"; };
|
||||||
|
@ -148,7 +162,7 @@ in
|
||||||
|
|
||||||
inherit LuaNil;
|
inherit LuaNil;
|
||||||
inherit raw join concat concatLines pipe;
|
inherit raw join concat concatLines pipe;
|
||||||
inherit namedField call require set lset;
|
inherit namedField call require local set func;
|
||||||
|
|
||||||
inherit op;
|
inherit op;
|
||||||
inherit eq ne gt lt gte lte;
|
inherit eq ne gt lt gte lte;
|
||||||
|
|
18
lib.test.nix
18
lib.test.nix
|
@ -145,7 +145,7 @@ with nix2lua; pkgs.lib.runTests {
|
||||||
expected = "parser_config.d2 = { }";
|
expected = "parser_config.d2 = { }";
|
||||||
};
|
};
|
||||||
"test returns lua with setting value to the local variable" = {
|
"test returns lua with setting value to the local variable" = {
|
||||||
expr = toLua (lset "parser_config.d2" { });
|
expr = toLua (local (set "parser_config.d2" { }));
|
||||||
expected = "local parser_config.d2 = { }";
|
expected = "local parser_config.d2 = { }";
|
||||||
};
|
};
|
||||||
"test returns all operations" = {
|
"test returns all operations" = {
|
||||||
|
@ -162,4 +162,20 @@ with nix2lua; pkgs.lib.runTests {
|
||||||
(10 > 5)
|
(10 > 5)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
"test returns defined function" = {
|
||||||
|
expr = toLua (func "hello" [ "a" "b" ] [
|
||||||
|
(eq (mul (add (var "a") 2) (sub 2 1)) 3)
|
||||||
|
(not (eq (mul (add (var "b") 2) (sub 2 1)) 3))
|
||||||
|
(not 10)
|
||||||
|
(gt 10 5)
|
||||||
|
]);
|
||||||
|
expected = ''
|
||||||
|
function hello(a, b)
|
||||||
|
(((a + 2) * (2 - 1)) == 3)
|
||||||
|
not (((b + 2) * (2 - 1)) == 3)
|
||||||
|
not 10
|
||||||
|
(10 > 5)
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue