Skip to content

Commit 5fd2c48

Browse files
committed
add support for ipairs iterables
1 parent 4a37a90 commit 5fd2c48

3 files changed

Lines changed: 21 additions & 0 deletions

File tree

src/transformation/utils/language-extensions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export function getExtensionKindForSymbol(
9999
export enum IterableExtensionKind {
100100
Iterable = "Iterable",
101101
Pairs = "Pairs",
102+
IPairs = "IPairs",
102103
PairsKey = "PairsKey",
103104
}
104105

src/transformation/visitors/language-extensions/iterable.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,23 @@ export function transformForOfPairsIterableStatement(
101101
);
102102
}
103103

104+
export function transformForOfIPairsIterableStatement(
105+
context: TransformationContext,
106+
statement: ts.ForOfStatement,
107+
block: lua.Block
108+
): lua.Statement {
109+
const pairsCall = lua.createCallExpression(lua.createIdentifier("ipairs"), [
110+
context.transformExpression(statement.expression),
111+
]);
112+
return transformForOfMultiIterableStatement(
113+
context,
114+
statement,
115+
block,
116+
pairsCall,
117+
invalidPairsIterableWithoutDestructuring
118+
);
119+
}
120+
104121
export function transformForOfPairsKeyIterableStatement(
105122
context: TransformationContext,
106123
statement: ts.ForOfStatement,

src/transformation/visitors/loops/for-of.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { isArrayType } from "../../utils/typescript";
66
import {
77
transformForOfIterableStatement,
88
transformForOfPairsIterableStatement,
9+
transformForOfIPairsIterableStatement,
910
transformForOfPairsKeyIterableStatement,
1011
} from "../language-extensions/iterable";
1112
import { isRangeFunction, transformRangeStatement } from "../language-extensions/range";
@@ -54,6 +55,8 @@ export const transformForOfStatement: FunctionVisitor<ts.ForOfStatement> = (node
5455
return transformForOfIterableStatement(context, node, body);
5556
} else if (iterableExtensionType === IterableExtensionKind.Pairs) {
5657
return transformForOfPairsIterableStatement(context, node, body);
58+
} else if (iterableExtensionType === IterableExtensionKind.IPairs) {
59+
return transformForOfIPairsIterableStatement(context, node, body);
5760
} else if (iterableExtensionType === IterableExtensionKind.PairsKey) {
5861
return transformForOfPairsKeyIterableStatement(context, node, body);
5962
} else {

0 commit comments

Comments
 (0)