Skip to content

Commit 6716dfc

Browse files
[NFC] BridgeJS: Remove tag stack and use i32 stack for enum case tags
1 parent 9ab70c6 commit 6716dfc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+130
-315
lines changed

Benchmarks/Sources/Generated/BridgeJS.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,21 @@ extension APIResult: _BridgedSwiftAssociatedValueEnum {
6565
switch self {
6666
case .success(let param0):
6767
param0.bridgeJSLowerStackReturn()
68-
_swift_js_push_tag(Int32(0))
68+
_swift_js_push_i32(Int32(0))
6969
case .failure(let param0):
7070
param0.bridgeJSLowerStackReturn()
71-
_swift_js_push_tag(Int32(1))
71+
_swift_js_push_i32(Int32(1))
7272
case .flag(let param0):
7373
param0.bridgeJSLowerStackReturn()
74-
_swift_js_push_tag(Int32(2))
74+
_swift_js_push_i32(Int32(2))
7575
case .rate(let param0):
7676
param0.bridgeJSLowerStackReturn()
77-
_swift_js_push_tag(Int32(3))
77+
_swift_js_push_i32(Int32(3))
7878
case .precise(let param0):
7979
param0.bridgeJSLowerStackReturn()
80-
_swift_js_push_tag(Int32(4))
80+
_swift_js_push_i32(Int32(4))
8181
case .info:
82-
_swift_js_push_tag(Int32(5))
82+
_swift_js_push_i32(Int32(5))
8383
}
8484
}
8585
}
@@ -162,26 +162,26 @@ extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
162162
switch self {
163163
case .success(let param0):
164164
param0.bridgeJSLowerStackReturn()
165-
_swift_js_push_tag(Int32(0))
165+
_swift_js_push_i32(Int32(0))
166166
case .error(let param0, let param1):
167167
param0.bridgeJSLowerStackReturn()
168168
param1.bridgeJSLowerStackReturn()
169-
_swift_js_push_tag(Int32(1))
169+
_swift_js_push_i32(Int32(1))
170170
case .location(let param0, let param1, let param2):
171171
param0.bridgeJSLowerStackReturn()
172172
param1.bridgeJSLowerStackReturn()
173173
param2.bridgeJSLowerStackReturn()
174-
_swift_js_push_tag(Int32(2))
174+
_swift_js_push_i32(Int32(2))
175175
case .status(let param0, let param1, let param2):
176176
param0.bridgeJSLowerStackReturn()
177177
param1.bridgeJSLowerStackReturn()
178178
param2.bridgeJSLowerStackReturn()
179-
_swift_js_push_tag(Int32(3))
179+
_swift_js_push_i32(Int32(3))
180180
case .coordinates(let param0, let param1, let param2):
181181
param0.bridgeJSLowerStackReturn()
182182
param1.bridgeJSLowerStackReturn()
183183
param2.bridgeJSLowerStackReturn()
184-
_swift_js_push_tag(Int32(4))
184+
_swift_js_push_i32(Int32(4))
185185
case .comprehensive(let param0, let param1, let param2, let param3, let param4, let param5, let param6, let param7, let param8):
186186
param0.bridgeJSLowerStackReturn()
187187
param1.bridgeJSLowerStackReturn()
@@ -192,9 +192,9 @@ extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
192192
param6.bridgeJSLowerStackReturn()
193193
param7.bridgeJSLowerStackReturn()
194194
param8.bridgeJSLowerStackReturn()
195-
_swift_js_push_tag(Int32(5))
195+
_swift_js_push_i32(Int32(5))
196196
case .info:
197-
_swift_js_push_tag(Int32(6))
197+
_swift_js_push_i32(Int32(6))
198198
}
199199
}
200200
}

Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,7 @@ struct EnumCodegen {
13231323
if enumCase.associatedValues.isEmpty {
13241324
printer.write("case .\(enumCase.name):")
13251325
printer.indent {
1326-
printer.write("_swift_js_push_tag(Int32(\(caseIndex)))")
1326+
printer.write("_swift_js_push_i32(Int32(\(caseIndex)))")
13271327
}
13281328
} else {
13291329
let pattern = enumCase.associatedValues.enumerated()
@@ -1334,7 +1334,7 @@ struct EnumCodegen {
13341334
generatePayloadPushingCode(printer: printer, associatedValues: enumCase.associatedValues)
13351335
// Push tag AFTER payloads so it's popped first (LIFO) by the JS lift function.
13361336
// This ensures nested enum tags don't overwrite the outer tag.
1337-
printer.write("_swift_js_push_tag(Int32(\(caseIndex)))")
1337+
printer.write("_swift_js_push_i32(Int32(\(caseIndex)))")
13381338
}
13391339
}
13401340
}

Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ public struct BridgeJSLink {
246246
"let \(JSGlueVariableScope.reservedStorageToReturnOptionalFloat);",
247247
"let \(JSGlueVariableScope.reservedStorageToReturnOptionalDouble);",
248248
"let \(JSGlueVariableScope.reservedStorageToReturnOptionalHeapObject);",
249-
"let \(JSGlueVariableScope.reservedTagStack) = [];",
250249
"let \(JSGlueVariableScope.reservedStringStack) = [];",
251250
"let \(JSGlueVariableScope.reservedI32Stack) = [];",
252251
"let \(JSGlueVariableScope.reservedF32Stack) = [];",
@@ -342,11 +341,6 @@ public struct BridgeJSLink {
342341
printer.write("\(JSGlueVariableScope.reservedSwift).memory.release(id);")
343342
}
344343
printer.write("}")
345-
printer.write("bjs[\"swift_js_push_tag\"] = function(tag) {")
346-
printer.indent {
347-
printer.write("\(JSGlueVariableScope.reservedTagStack).push(tag);")
348-
}
349-
printer.write("}")
350344
printer.write("bjs[\"swift_js_push_i32\"] = function(v) {")
351345
printer.indent {
352346
printer.write("\(JSGlueVariableScope.reservedI32Stack).push(v | 0);")

Plugins/BridgeJS/Sources/BridgeJSLink/JSGlueGen.swift

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ final class JSGlueVariableScope {
2323
static let reservedStorageToReturnOptionalHeapObject = "tmpRetOptionalHeapObject"
2424
static let reservedTextEncoder = "textEncoder"
2525
static let reservedTextDecoder = "textDecoder"
26-
static let reservedTagStack = "tagStack"
2726
static let reservedStringStack = "strStack"
2827
static let reservedI32Stack = "i32Stack"
2928
static let reservedF32Stack = "f32Stack"
@@ -52,7 +51,6 @@ final class JSGlueVariableScope {
5251
reservedStorageToReturnOptionalHeapObject,
5352
reservedTextEncoder,
5453
reservedTextDecoder,
55-
reservedTagStack,
5654
reservedStringStack,
5755
reservedI32Stack,
5856
reservedF32Stack,
@@ -122,9 +120,6 @@ extension JSGlueVariableScope {
122120
func emitPushPointerReturn(_ value: String, printer: CodeFragmentPrinter) {
123121
printer.write("\(JSGlueVariableScope.reservedPointerStack).push(\(value));")
124122
}
125-
func popTag() -> String {
126-
return "\(JSGlueVariableScope.reservedTagStack).pop()"
127-
}
128123
func popString() -> String {
129124
return "\(JSGlueVariableScope.reservedStringStack).pop()"
130125
}
@@ -661,7 +656,7 @@ struct IntrinsicJSFragment: Sendable {
661656
let (scope, printer) = (context.scope, context.printer)
662657
let retName = scope.variable("ret")
663658
printer.write(
664-
"const \(retName) = \(JSGlueVariableScope.reservedEnumHelpers).\(enumBase).lift(\(scope.popTag()));"
659+
"const \(retName) = \(JSGlueVariableScope.reservedEnumHelpers).\(enumBase).lift(\(scope.popI32()));"
665660
)
666661
return [retName]
667662
}
@@ -1022,7 +1017,7 @@ struct IntrinsicJSFragment: Sendable {
10221017
case .associatedValueEnum(let fullName):
10231018
let base = fullName.components(separatedBy: ".").last ?? fullName
10241019
let tagVar = scope.variable("tag")
1025-
printer.write("const \(tagVar) = \(scope.popTag());")
1020+
printer.write("const \(tagVar) = \(scope.popI32());")
10261021
let isNullVar = scope.variable("isNull")
10271022
printer.write("const \(isNullVar) = (\(tagVar) === -1);")
10281023
printer.write("let \(resultVar);")
@@ -2112,7 +2107,7 @@ struct IntrinsicJSFragment: Sendable {
21122107
printer.write("if (\(isSomeVar)) {")
21132108
try printer.indent {
21142109
// For optional associated value enums, Swift uses bridgeJSLowerParameter()
2115-
// which pushes caseId to i32Stack (not tagStack like bridgeJSLowerReturn()).
2110+
// which pushes caseId to i32Stack (same as bridgeJSLowerReturn()).
21162111
if case .associatedValueEnum(let fullName) = wrappedType {
21172112
let base = fullName.components(separatedBy: ".").last ?? fullName
21182113
let caseIdVar = scope.variable("caseId")
@@ -2486,7 +2481,7 @@ struct IntrinsicJSFragment: Sendable {
24862481
let (scope, printer) = (context.scope, context.printer)
24872482
let resultVar = scope.variable("enumValue")
24882483
printer.write(
2489-
"const \(resultVar) = \(JSGlueVariableScope.reservedEnumHelpers).\(base).lift(\(scope.popTag()), );"
2484+
"const \(resultVar) = \(JSGlueVariableScope.reservedEnumHelpers).\(base).lift(\(scope.popI32()), );"
24902485
)
24912486
return [resultVar]
24922487
}

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumAssociatedValue.swift

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,21 @@ extension APIResult: _BridgedSwiftAssociatedValueEnum {
5656
switch self {
5757
case .success(let param0):
5858
param0.bridgeJSLowerStackReturn()
59-
_swift_js_push_tag(Int32(0))
59+
_swift_js_push_i32(Int32(0))
6060
case .failure(let param0):
6161
param0.bridgeJSLowerStackReturn()
62-
_swift_js_push_tag(Int32(1))
62+
_swift_js_push_i32(Int32(1))
6363
case .flag(let param0):
6464
param0.bridgeJSLowerStackReturn()
65-
_swift_js_push_tag(Int32(2))
65+
_swift_js_push_i32(Int32(2))
6666
case .rate(let param0):
6767
param0.bridgeJSLowerStackReturn()
68-
_swift_js_push_tag(Int32(3))
68+
_swift_js_push_i32(Int32(3))
6969
case .precise(let param0):
7070
param0.bridgeJSLowerStackReturn()
71-
_swift_js_push_tag(Int32(4))
71+
_swift_js_push_i32(Int32(4))
7272
case .info:
73-
_swift_js_push_tag(Int32(5))
73+
_swift_js_push_i32(Int32(5))
7474
}
7575
}
7676
}
@@ -146,21 +146,21 @@ extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
146146
switch self {
147147
case .success(let param0):
148148
param0.bridgeJSLowerStackReturn()
149-
_swift_js_push_tag(Int32(0))
149+
_swift_js_push_i32(Int32(0))
150150
case .error(let param0, let param1):
151151
param0.bridgeJSLowerStackReturn()
152152
param1.bridgeJSLowerStackReturn()
153-
_swift_js_push_tag(Int32(1))
153+
_swift_js_push_i32(Int32(1))
154154
case .status(let param0, let param1, let param2):
155155
param0.bridgeJSLowerStackReturn()
156156
param1.bridgeJSLowerStackReturn()
157157
param2.bridgeJSLowerStackReturn()
158-
_swift_js_push_tag(Int32(2))
158+
_swift_js_push_i32(Int32(2))
159159
case .coordinates(let param0, let param1, let param2):
160160
param0.bridgeJSLowerStackReturn()
161161
param1.bridgeJSLowerStackReturn()
162162
param2.bridgeJSLowerStackReturn()
163-
_swift_js_push_tag(Int32(3))
163+
_swift_js_push_i32(Int32(3))
164164
case .comprehensive(let param0, let param1, let param2, let param3, let param4, let param5, let param6, let param7, let param8):
165165
param0.bridgeJSLowerStackReturn()
166166
param1.bridgeJSLowerStackReturn()
@@ -171,9 +171,9 @@ extension ComplexResult: _BridgedSwiftAssociatedValueEnum {
171171
param6.bridgeJSLowerStackReturn()
172172
param7.bridgeJSLowerStackReturn()
173173
param8.bridgeJSLowerStackReturn()
174-
_swift_js_push_tag(Int32(4))
174+
_swift_js_push_i32(Int32(4))
175175
case .info:
176-
_swift_js_push_tag(Int32(5))
176+
_swift_js_push_i32(Int32(5))
177177
}
178178
}
179179
}
@@ -225,16 +225,16 @@ extension Utilities.Result: _BridgedSwiftAssociatedValueEnum {
225225
switch self {
226226
case .success(let param0):
227227
param0.bridgeJSLowerStackReturn()
228-
_swift_js_push_tag(Int32(0))
228+
_swift_js_push_i32(Int32(0))
229229
case .failure(let param0, let param1):
230230
param0.bridgeJSLowerStackReturn()
231231
param1.bridgeJSLowerStackReturn()
232-
_swift_js_push_tag(Int32(1))
232+
_swift_js_push_i32(Int32(1))
233233
case .status(let param0, let param1, let param2):
234234
param0.bridgeJSLowerStackReturn()
235235
param1.bridgeJSLowerStackReturn()
236236
param2.bridgeJSLowerStackReturn()
237-
_swift_js_push_tag(Int32(2))
237+
_swift_js_push_i32(Int32(2))
238238
}
239239
}
240240
}
@@ -279,11 +279,11 @@ extension NetworkingResult: _BridgedSwiftAssociatedValueEnum {
279279
switch self {
280280
case .success(let param0):
281281
param0.bridgeJSLowerStackReturn()
282-
_swift_js_push_tag(Int32(0))
282+
_swift_js_push_i32(Int32(0))
283283
case .failure(let param0, let param1):
284284
param0.bridgeJSLowerStackReturn()
285285
param1.bridgeJSLowerStackReturn()
286-
_swift_js_push_tag(Int32(1))
286+
_swift_js_push_i32(Int32(1))
287287
}
288288
}
289289
}
@@ -363,7 +363,7 @@ extension APIOptionalResult: _BridgedSwiftAssociatedValueEnum {
363363
__bjs_unwrapped_param0.bridgeJSLowerStackReturn()
364364
}
365365
_swift_js_push_i32(__bjs_isSome_param0 ? 1 : 0)
366-
_swift_js_push_tag(Int32(0))
366+
_swift_js_push_i32(Int32(0))
367367
case .failure(let param0, let param1):
368368
let __bjs_isSome_param0 = param0 != nil
369369
if let __bjs_unwrapped_param0 = param0 {
@@ -375,7 +375,7 @@ extension APIOptionalResult: _BridgedSwiftAssociatedValueEnum {
375375
__bjs_unwrapped_param1.bridgeJSLowerStackReturn()
376376
}
377377
_swift_js_push_i32(__bjs_isSome_param1 ? 1 : 0)
378-
_swift_js_push_tag(Int32(1))
378+
_swift_js_push_i32(Int32(1))
379379
case .status(let param0, let param1, let param2):
380380
let __bjs_isSome_param0 = param0 != nil
381381
if let __bjs_unwrapped_param0 = param0 {
@@ -392,7 +392,7 @@ extension APIOptionalResult: _BridgedSwiftAssociatedValueEnum {
392392
__bjs_unwrapped_param2.bridgeJSLowerStackReturn()
393393
}
394394
_swift_js_push_i32(__bjs_isSome_param2 ? 1 : 0)
395-
_swift_js_push_tag(Int32(2))
395+
_swift_js_push_i32(Int32(2))
396396
}
397397
}
398398
}
@@ -504,26 +504,26 @@ extension TypedPayloadResult: _BridgedSwiftAssociatedValueEnum {
504504
switch self {
505505
case .precision(let param0):
506506
param0.bridgeJSLowerStackReturn()
507-
_swift_js_push_tag(Int32(0))
507+
_swift_js_push_i32(Int32(0))
508508
case .direction(let param0):
509509
param0.bridgeJSLowerStackReturn()
510-
_swift_js_push_tag(Int32(1))
510+
_swift_js_push_i32(Int32(1))
511511
case .optPrecision(let param0):
512512
let __bjs_isSome_param0 = param0 != nil
513513
if let __bjs_unwrapped_param0 = param0 {
514514
__bjs_unwrapped_param0.bridgeJSLowerStackReturn()
515515
}
516516
_swift_js_push_i32(__bjs_isSome_param0 ? 1 : 0)
517-
_swift_js_push_tag(Int32(2))
517+
_swift_js_push_i32(Int32(2))
518518
case .optDirection(let param0):
519519
let __bjs_isSome_param0 = param0 != nil
520520
if let __bjs_unwrapped_param0 = param0 {
521521
__bjs_unwrapped_param0.bridgeJSLowerStackReturn()
522522
}
523523
_swift_js_push_i32(__bjs_isSome_param0 ? 1 : 0)
524-
_swift_js_push_tag(Int32(3))
524+
_swift_js_push_i32(Int32(3))
525525
case .empty:
526-
_swift_js_push_tag(Int32(4))
526+
_swift_js_push_i32(Int32(4))
527527
}
528528
}
529529
}
@@ -586,21 +586,21 @@ extension AllTypesResult: _BridgedSwiftAssociatedValueEnum {
586586
switch self {
587587
case .structPayload(let param0):
588588
param0.bridgeJSLowerReturn()
589-
_swift_js_push_tag(Int32(0))
589+
_swift_js_push_i32(Int32(0))
590590
case .classPayload(let param0):
591591
param0.bridgeJSLowerStackReturn()
592-
_swift_js_push_tag(Int32(1))
592+
_swift_js_push_i32(Int32(1))
593593
case .jsObjectPayload(let param0):
594594
param0.bridgeJSLowerStackReturn()
595-
_swift_js_push_tag(Int32(2))
595+
_swift_js_push_i32(Int32(2))
596596
case .nestedEnum(let param0):
597597
param0.bridgeJSLowerReturn()
598-
_swift_js_push_tag(Int32(3))
598+
_swift_js_push_i32(Int32(3))
599599
case .arrayPayload(let param0):
600600
param0.bridgeJSLowerReturn()
601-
_swift_js_push_tag(Int32(4))
601+
_swift_js_push_i32(Int32(4))
602602
case .empty:
603-
_swift_js_push_tag(Int32(5))
603+
_swift_js_push_i32(Int32(5))
604604
}
605605
}
606606
}
@@ -675,33 +675,33 @@ extension OptionalAllTypesResult: _BridgedSwiftAssociatedValueEnum {
675675
switch self {
676676
case .optStruct(let param0):
677677
param0.bridgeJSLowerReturn()
678-
_swift_js_push_tag(Int32(0))
678+
_swift_js_push_i32(Int32(0))
679679
case .optClass(let param0):
680680
let __bjs_isSome_param0 = param0 != nil
681681
if let __bjs_unwrapped_param0 = param0 {
682682
__bjs_unwrapped_param0.bridgeJSLowerStackReturn()
683683
}
684684
_swift_js_push_i32(__bjs_isSome_param0 ? 1 : 0)
685-
_swift_js_push_tag(Int32(1))
685+
_swift_js_push_i32(Int32(1))
686686
case .optJSObject(let param0):
687687
let __bjs_isSome_param0 = param0 != nil
688688
if let __bjs_unwrapped_param0 = param0 {
689689
__bjs_unwrapped_param0.bridgeJSLowerStackReturn()
690690
}
691691
_swift_js_push_i32(__bjs_isSome_param0 ? 1 : 0)
692-
_swift_js_push_tag(Int32(2))
692+
_swift_js_push_i32(Int32(2))
693693
case .optNestedEnum(let param0):
694694
let __bjs_isSome_param0 = param0 != nil
695695
if let __bjs_unwrapped_param0 = param0 {
696696
_swift_js_push_i32(__bjs_unwrapped_param0.bridgeJSLowerParameter())
697697
}
698698
_swift_js_push_i32(__bjs_isSome_param0 ? 1 : 0)
699-
_swift_js_push_tag(Int32(3))
699+
_swift_js_push_i32(Int32(3))
700700
case .optArray(let param0):
701701
param0.bridgeJSLowerReturn()
702-
_swift_js_push_tag(Int32(4))
702+
_swift_js_push_i32(Int32(4))
703703
case .empty:
704-
_swift_js_push_tag(Int32(5))
704+
_swift_js_push_i32(Int32(5))
705705
}
706706
}
707707
}

0 commit comments

Comments
 (0)