Skip to content

Commit cbe3d38

Browse files
committed
Translate undefined as nil
1 parent e52bb32 commit cbe3d38

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/Transpiler.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,11 @@ export class LuaTranspiler {
566566
case ts.SyntaxKind.ElementAccessExpression:
567567
return this.transpileElementAccessExpression(node as ts.ElementAccessExpression);
568568
case ts.SyntaxKind.Identifier:
569-
// For identifiers simply return their name
569+
// Catch undefined which is passed as identifier
570+
if ((node as ts.Identifier).originalKeywordKind === ts.SyntaxKind.UndefinedKeyword) {
571+
return "nil";
572+
}
573+
// Otherwise simply return the name
570574
return (node as ts.Identifier).text;
571575
case ts.SyntaxKind.StringLiteral:
572576
const text = (node as ts.StringLiteral).text;
@@ -580,6 +584,7 @@ export class LuaTranspiler {
580584
case ts.SyntaxKind.FalseKeyword:
581585
return "false";
582586
case ts.SyntaxKind.NullKeyword:
587+
case ts.SyntaxKind.UndefinedKeyword:
583588
return "nil";
584589
case ts.SyntaxKind.ThisKeyword:
585590
return "self";

test/unit/assignments.spec.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export class AssignmentTests {
1313
@TestCase(`{a:3,b:"4"}`, `{a = 3,b = "4"}`)
1414
@Test("Const assignment")
1515
public constAssignment(inp: string, out: string) {
16-
var lua = util.transpileString(`const myvar = ${inp};`)
16+
const lua = util.transpileString(`const myvar = ${inp};`);
1717
Expect(lua).toBe(`local myvar = ${out}`);
1818
}
1919

@@ -25,7 +25,7 @@ export class AssignmentTests {
2525
@TestCase(`{a:3,b:"4"}`, `{a = 3,b = "4"}`)
2626
@Test("Const assignment")
2727
public letAssignment(inp: string, out: string) {
28-
var lua = util.transpileString(`let myvar = ${inp};`)
28+
const lua = util.transpileString(`let myvar = ${inp};`);
2929
Expect(lua).toBe(`local myvar = ${out}`);
3030
}
3131

@@ -37,7 +37,19 @@ export class AssignmentTests {
3737
@TestCase(`{a:3,b:"4"}`, `{a = 3,b = "4"}`)
3838
@Test("Const assignment")
3939
public varAssignment(inp: string, out: string) {
40-
var lua = util.transpileString(`var myvar = ${inp};`)
40+
const lua = util.transpileString(`var myvar = ${inp};`);
4141
Expect(lua).toBe(`local myvar = ${out}`);
4242
}
43+
44+
@TestCase("var myvar;")
45+
@TestCase("let myvar;")
46+
@TestCase("const myvar;")
47+
@TestCase("const myvar = null;")
48+
@TestCase("const myvar = undefined;")
49+
@Test("Null assignments")
50+
public nullAssignment(declaration: string) {
51+
const lua = util.transpileString(declaration + " return myvar;");
52+
const result = util.executeLua(lua);
53+
Expect(result).toBe(undefined);
54+
}
4355
}

0 commit comments

Comments
 (0)