Skip to content

Commit 94ec790

Browse files
BridgeJS: Fix classes without @js init constructors
1 parent ea03d75 commit 94ec790

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -488,19 +488,23 @@ struct BridgeJSLink {
488488
dtsExportEntryLines.append("\(klass.name): {")
489489
jsLines.append("class \(klass.name) extends SwiftHeapObject {")
490490

491+
// Always add __construct and constructor methods for all classes
492+
var constructorLines: [String] = []
493+
constructorLines.append("static __construct(ptr) {")
494+
constructorLines.append("return new \(klass.name)(ptr, instance.exports.bjs_\(klass.name)_deinit);".indent(count: 4))
495+
constructorLines.append("}")
496+
constructorLines.append("")
497+
constructorLines.append("constructor(pointer, deinit) {")
498+
constructorLines.append("super(pointer, deinit);".indent(count: 4))
499+
constructorLines.append("}")
500+
jsLines.append(contentsOf: constructorLines.map { $0.indent(count: 4) })
501+
491502
if let constructor: ExportedConstructor = klass.constructor {
492503
let thunkBuilder = ExportedThunkBuilder(effects: constructor.effects)
493504
for param in constructor.parameters {
494505
thunkBuilder.lowerParameter(param: param)
495506
}
496507
var funcLines: [String] = []
497-
funcLines.append("static __construct(ptr) {")
498-
funcLines.append("return new \(klass.name)(ptr, instance.exports.bjs_\(klass.name)_deinit);".indent(count: 4))
499-
funcLines.append("}")
500-
funcLines.append("")
501-
funcLines.append("constructor(pointer, deinit) {")
502-
funcLines.append("super(pointer, deinit);".indent(count: 4))
503-
funcLines.append("}")
504508
funcLines.append("")
505509
funcLines.append("static init(\(constructor.parameters.map { $0.name }.joined(separator: ", "))) {")
506510
let returnExpr = thunkBuilder.callConstructor(abiName: constructor.abiName)

0 commit comments

Comments
 (0)