Skip to content

Commit d456030

Browse files
committed
Support for shorthand constructor field definition
1 parent e3e2283 commit d456030

4 files changed

Lines changed: 31 additions & 10 deletions

File tree

dist/Transpiler.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -692,12 +692,23 @@ var LuaTranspiler = /** @class */ (function () {
692692
return result;
693693
};
694694
LuaTranspiler.prototype.transpileConstructor = function (node, className, instanceFields) {
695+
var extraInstanceFields = [];
695696
var parameters = ["self"];
696-
node.parameters.forEach(function (param) { return parameters.push(param.name.escapedText); });
697+
node.parameters.forEach(function (param) {
698+
// If param has decorators, add extra instance field
699+
if (param.modifiers != undefined)
700+
extraInstanceFields.push(param.name.escapedText);
701+
// Add to parameter list
702+
parameters.push(param.name.escapedText);
703+
});
697704
var result = this.indent + ("function " + className + ".constructor(" + parameters.join(",") + ")\n");
698705
// Add in instance field declarations
699-
for (var _i = 0, instanceFields_1 = instanceFields; _i < instanceFields_1.length; _i++) {
700-
var f = instanceFields_1[_i];
706+
for (var _i = 0, extraInstanceFields_1 = extraInstanceFields; _i < extraInstanceFields_1.length; _i++) {
707+
var f = extraInstanceFields_1[_i];
708+
result += this.indent + (" self." + f + " = " + f + "\n");
709+
}
710+
for (var _a = 0, instanceFields_1 = instanceFields; _a < instanceFields_1.length; _a++) {
711+
var f = instanceFields_1[_a];
701712
// Get identifier
702713
var fieldIdentifier = f.name;
703714
var fieldName = fieldIdentifier.escapedText;

src/Transpiler.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -767,12 +767,23 @@ export class LuaTranspiler {
767767
}
768768

769769
transpileConstructor(node: ts.ConstructorDeclaration, className: string, instanceFields: ts.PropertyDeclaration[]): string {
770+
const extraInstanceFields = [];
771+
770772
let parameters = ["self"];
771-
node.parameters.forEach(param => parameters.push(<string>(<ts.Identifier>param.name).escapedText));
773+
node.parameters.forEach(param => {
774+
// If param has decorators, add extra instance field
775+
if (param.modifiers != undefined) extraInstanceFields.push(<string>(<ts.Identifier>param.name).escapedText);
776+
// Add to parameter list
777+
parameters.push(<string>(<ts.Identifier>param.name).escapedText);
778+
});
772779

773780
let result = this.indent + `function ${className}.constructor(${parameters.join(",")})\n` ;
774781

775782
// Add in instance field declarations
783+
for (const f of extraInstanceFields) {
784+
result += this.indent + ` self.${f} = ${f}\n`;
785+
}
786+
776787
for (const f of instanceFields) {
777788
// Get identifier
778789
const fieldIdentifier = <ts.Identifier>f.name;

test/src/test2.lua

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,8 @@ function TestClass.new(construct, ...)
99
return instance
1010
end
1111
function TestClass.constructor(self,tf)
12+
self.tf = tf
1213
self.field3 = globalString
13-
local localString = "abc"
14-
globalString="abc"
15-
self.field=""
16-
self.unit=GetUnit()
1714
end
1815
function TestClass.Test(self)
1916
print("sup")

test/src/test2.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ export class TestClass {
1919
field3: string = globalString; // Abc
2020
unit: unit;
2121

22-
constructor(tf: number) {
22+
constructor(readonly tf: number) {}
23+
24+
/*constructor(tf: number) {
2325
let localString = "abc";
2426
globalString = "abc";
2527
this.field = "";
2628
this.unit = GetUnit();
27-
}
29+
}*/
2830

2931
Test(): void {
3032
print("sup");

0 commit comments

Comments
 (0)