X Tutup
Skip to content

Commit fc41aa3

Browse files
yancoutoPerryvw
authored andcommitted
Fixed default constructor on subclass (#301)
1 parent d6c7a0d commit fc41aa3

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

src/Transpiler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1789,7 +1789,7 @@ export abstract class LuaTranspiler {
17891789
if (constructor) {
17901790
// Add constructor plus initialization of instance fields
17911791
result += this.transpileConstructor(constructor, className);
1792-
} else if (!isExtension) {
1792+
} else if (!isExtension && !extendsType) {
17931793
// Generate a constructor if none was defined
17941794
result += this.transpileConstructor(ts.createConstructor([], [], [], ts.createBlock([], true)),
17951795
className);

test/unit/class.spec.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,59 @@ export class ClassTests {
127127
Expect(result).toBe(4);
128128
}
129129

130+
@Test("SubclassDefaultConstructor")
131+
public subclassDefaultConstructor(): void {
132+
const result = util.transpileAndExecute(
133+
`class a {
134+
field: number;
135+
constructor(field: number) {
136+
this.field = field;
137+
}
138+
}
139+
class b extends a {}
140+
return new b(10).field;`
141+
);
142+
143+
Expect(result).toBe(10);
144+
}
145+
146+
@Test("SubsubclassDefaultConstructor")
147+
public subsubclassDefaultConstructor(): void {
148+
const result = util.transpileAndExecute(
149+
`class a {
150+
field: number;
151+
constructor(field: number) {
152+
this.field = field;
153+
}
154+
}
155+
class b extends a {}
156+
class c extends b {}
157+
return new c(10).field;`
158+
);
159+
160+
Expect(result).toBe(10);
161+
}
162+
163+
@Test("SubclassConstructor")
164+
public subclassConstructor(): void {
165+
const result = util.transpileAndExecute(
166+
`class a {
167+
field: number;
168+
constructor(field: number) {
169+
this.field = field;
170+
}
171+
}
172+
class b extends a {
173+
constructor(field: number) {
174+
super(field + 1);
175+
}
176+
}
177+
return new b(10).field;`
178+
);
179+
180+
Expect(result).toBe(11);
181+
}
182+
130183
@Test("classSuper")
131184
public classSuper(): void {
132185
// Transpile

0 commit comments

Comments
 (0)
X Tutup