Skip to content

Commit 24da494

Browse files
committed
Handle tuple types better
1 parent b57d824 commit 24da494

6 files changed

Lines changed: 29 additions & 7 deletions

File tree

dist/TSHelper.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ var TSHelper = /** @class */ (function () {
3232
return ts.isIdentifier(node) || ts.isLiteralExpression(node) || ts.isArrayLiteralExpression(node) || ts.isObjectLiteralExpression(node);
3333
};
3434
TSHelper.isArrayType = function (type) {
35-
return type.flags == ts.TypeFlags.Object && type.symbol.escapedName == "Array";
35+
return (type.flags & ts.TypeFlags.Object) != 0
36+
&& type.symbol
37+
&& type.symbol.escapedName == "Array";
38+
};
39+
TSHelper.isTupleType = function (type) {
40+
return (type.flags & ts.TypeFlags.Object) != 0
41+
&& type.typeArguments != undefined;
3642
};
3743
TSHelper.isCompileMembersOnlyEnum = function (type) {
3844
return type.symbol

dist/Transpiler.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,8 @@ var LuaTranspiler = /** @class */ (function () {
557557
LuaTranspiler.prototype.transpileElementAccessExpression = function (node) {
558558
var element = this.transpileExpression(node.expression);
559559
var index = this.transpileExpression(node.argumentExpression);
560-
var isArray = TSHelper_1.TSHelper.isArrayType(this.checker.getTypeAtLocation(node.expression));
561-
if (isArray) {
560+
var type = this.checker.getTypeAtLocation(node.expression);
561+
if (TSHelper_1.TSHelper.isArrayType(type) || TSHelper_1.TSHelper.isTupleType(type)) {
562562
return element + "[" + index + "+1]";
563563
}
564564
else {

src/TSHelper.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ export class TSHelper {
3434
}
3535

3636
static isArrayType(type: ts.Type): boolean {
37-
return type.flags == ts.TypeFlags.Object && (<ts.ObjectType>type).symbol.escapedName == "Array";
37+
return (type.flags & ts.TypeFlags.Object) != 0
38+
&& (<ts.ObjectType>type).symbol
39+
&& (<ts.ObjectType>type).symbol.escapedName == "Array";
40+
}
41+
42+
static isTupleType(type: ts.Type): boolean {
43+
return (type.flags & ts.TypeFlags.Object) != 0
44+
&& (<ts.TypeReference>type).typeArguments != undefined;
3845
}
3946

4047
static isCompileMembersOnlyEnum(type: ts.Type) {

src/Transpiler.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -614,9 +614,8 @@ export class LuaTranspiler {
614614
const element = this.transpileExpression(node.expression);
615615
const index = this.transpileExpression(node.argumentExpression);
616616

617-
const isArray = tsEx.isArrayType(this.checker.getTypeAtLocation(node.expression));
618-
619-
if (isArray) {
617+
const type = this.checker.getTypeAtLocation(node.expression);
618+
if (tsEx.isArrayType(type) || tsEx.isTupleType(type)) {
620619
return `${element}[${index}+1]`;
621620
} else {
622621
return `${element}[${index}]`;

test/src/test2.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ local p = __destr0[1]
77
local q = __destr0[2]
88
local rest = TS_slice(__destr0, 2)
99

10+
local tobl = {}
11+
tobl["n"]=3
12+
local ertes = {1,"abc"}
13+
local b = ertes[0+1]
1014
TestClass = TestClass or {}
1115
TestClass.__index = TestClass
1216
function TestClass.new(construct, ...)

test/src/test2.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ let objTest = {a: 3, "B": true, [input[0]]: 5};
1111

1212
let [p, q, ...rest] = input;
1313

14+
let tobl: {[index: string]: number} = {};
15+
tobl["n"] = 3;
16+
17+
let ertes: [number, string] = [1, "abc"];
18+
let b = ertes[0];
19+
1420
declare interface unit {
1521
GetParent(): unit;
1622
GetAbsOrigin(): number;

0 commit comments

Comments
 (0)