Skip to content

Commit 5c9fdbe

Browse files
committed
Added functional-style list operations to lualib (forEach/map/filter/some/every)
1 parent b9ba68b commit 5c9fdbe

3 files changed

Lines changed: 44 additions & 0 deletions

File tree

dist/Transpiler.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,16 @@ var LuaTranspiler = /** @class */ (function () {
463463
switch (expression.name.escapedText) {
464464
case "push":
465465
return "table.insert(" + caller + ", " + params + ")";
466+
case "forEach":
467+
return "TS_forEach(" + caller + ", " + params + ")";
468+
case "map":
469+
return "TS_map(" + caller + ", " + params + ")";
470+
case "filter":
471+
return "TS_filter(" + caller + ", " + params + ")";
472+
case "some":
473+
return "TS_some(" + caller + ", " + params + ")";
474+
case "every":
475+
return "TS_every(" + caller + ", " + params + ")";
466476
default:
467477
throw new TranspileError("Unsupported array function: " + expression.name.escapedText, node);
468478
}

dist/lualib/typescript.lua

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@ function TS_ITE(condition, v1f, v2f)
77
end
88
end
99

10+
function TS_forEach(list, func)
11+
for k, v in ipairs(list) do
12+
func(v, k, list)
13+
end
14+
end
15+
16+
function TS_map(list, func)
17+
local out = {}
18+
for _, v in ipairs(list) do
19+
table.insert(out, func(v))
20+
end
21+
return out
22+
end
23+
24+
function TS_filter(list, func)
25+
local out = {}
26+
for _, v in ipairs(list) do
27+
if func(v) then
28+
table.insert(out, v)
29+
end
30+
end
31+
return out
32+
end
33+
1034
-- Set data structure implementation
1135
Set = Set or {}
1236
Set.__index = Set

src/Transpiler.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,16 @@ export class LuaTranspiler {
510510
switch (expression.name.escapedText) {
511511
case "push":
512512
return `table.insert(${caller}, ${params})`;
513+
case "forEach":
514+
return `TS_forEach(${caller}, ${params})`;
515+
case "map":
516+
return `TS_map(${caller}, ${params})`;
517+
case "filter":
518+
return `TS_filter(${caller}, ${params})`;
519+
case "some":
520+
return `TS_some(${caller}, ${params})`;
521+
case "every":
522+
return `TS_every(${caller}, ${params})`;
513523
default:
514524
throw new TranspileError("Unsupported array function: " + expression.name.escapedText, node);
515525
}

0 commit comments

Comments
 (0)