Skip to content

Commit 823ee5f

Browse files
BridgeJS: expand integer type support
1 parent 1f54ba6 commit 823ee5f

File tree

96 files changed

+6081
-1095
lines changed

Some content is hidden

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

96 files changed

+6081
-1095
lines changed

Benchmarks/Sources/Generated/JavaScript/BridgeJS.json

Lines changed: 165 additions & 66 deletions
Large diffs are not rendered by default.

Examples/PlayBridgeJS/Sources/PlayBridgeJS/Generated/JavaScript/BridgeJS.json

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,11 @@
147147
"isStatic" : false,
148148
"name" : "startLine",
149149
"type" : {
150-
"int" : {
151-
150+
"integer" : {
151+
"_0" : {
152+
"isSigned" : true,
153+
"width" : "word"
154+
}
152155
}
153156
}
154157
},
@@ -157,8 +160,11 @@
157160
"isStatic" : false,
158161
"name" : "startColumn",
159162
"type" : {
160-
"int" : {
161-
163+
"integer" : {
164+
"_0" : {
165+
"isSigned" : true,
166+
"width" : "word"
167+
}
162168
}
163169
}
164170
},
@@ -167,8 +173,11 @@
167173
"isStatic" : false,
168174
"name" : "endLine",
169175
"type" : {
170-
"int" : {
171-
176+
"integer" : {
177+
"_0" : {
178+
"isSigned" : true,
179+
"width" : "word"
180+
}
172181
}
173182
}
174183
},
@@ -177,8 +186,11 @@
177186
"isStatic" : false,
178187
"name" : "endColumn",
179188
"type" : {
180-
"int" : {
181-
189+
"integer" : {
190+
"_0" : {
191+
"isSigned" : true,
192+
"width" : "word"
193+
}
182194
}
183195
}
184196
}

Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ struct StackCodegen {
748748
/// - Returns: An ExprSyntax representing the lift expression
749749
func liftExpression(for type: BridgeType) -> ExprSyntax {
750750
switch type {
751-
case .string, .int, .uint, .bool, .float, .double,
751+
case .string, .integer, .bool, .float, .double,
752752
.jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject, .unsafePointer,
753753
.swiftProtocol, .caseEnum, .associatedValueEnum, .rawValueEnum, .array, .dictionary:
754754
return "\(raw: type.swiftType).bridgeJSStackPop()"
@@ -766,7 +766,7 @@ struct StackCodegen {
766766
private func liftNullableExpression(wrappedType: BridgeType, kind: JSOptionalKind) -> ExprSyntax {
767767
let typeName = kind == .null ? "Optional" : "JSUndefinedOr"
768768
switch wrappedType {
769-
case .string, .int, .uint, .bool, .float, .double, .jsObject(nil), .jsValue,
769+
case .string, .integer, .bool, .float, .double, .jsObject(nil), .jsValue,
770770
.swiftStruct, .swiftHeapObject, .caseEnum, .associatedValueEnum, .rawValueEnum,
771771
.array, .dictionary:
772772
return "\(raw: typeName)<\(raw: wrappedType.swiftType)>.bridgeJSStackPop()"
@@ -789,7 +789,7 @@ struct StackCodegen {
789789
varPrefix: String
790790
) -> [CodeBlockItemSyntax] {
791791
switch type {
792-
case .string, .int, .uint, .bool, .float, .double, .jsValue,
792+
case .string, .integer, .bool, .float, .double, .jsValue,
793793
.jsObject(nil), .swiftHeapObject, .unsafePointer, .closure,
794794
.caseEnum, .rawValueEnum, .associatedValueEnum, .swiftStruct, .nullable:
795795
return ["\(raw: accessor).bridgeJSStackPush()"]
@@ -1425,8 +1425,7 @@ extension BridgeType {
14251425
var swiftType: String {
14261426
switch self {
14271427
case .bool: return "Bool"
1428-
case .int: return "Int"
1429-
case .uint: return "UInt"
1428+
case .integer(let t): return t.swiftTypeName
14301429
case .float: return "Float"
14311430
case .double: return "Double"
14321431
case .string: return "String"
@@ -1502,7 +1501,7 @@ extension BridgeType {
15021501
func liftParameterInfo() throws -> LiftingIntrinsicInfo {
15031502
switch self {
15041503
case .bool: return .bool
1505-
case .int, .uint: return .int
1504+
case .integer(let t): return LiftingIntrinsicInfo(parameters: [("value", t.wasmCoreType)])
15061505
case .float: return .float
15071506
case .double: return .double
15081507
case .string: return .string
@@ -1560,7 +1559,7 @@ extension BridgeType {
15601559
func loweringReturnInfo() throws -> LoweringIntrinsicInfo {
15611560
switch self {
15621561
case .bool: return .bool
1563-
case .int, .uint: return .int
1562+
case .integer(let t): return LoweringIntrinsicInfo(returnType: t.wasmCoreType)
15641563
case .float: return .float
15651564
case .double: return .double
15661565
case .string: return .string
@@ -1592,7 +1591,8 @@ extension SwiftEnumRawType {
15921591
var liftingIntrinsicInfo: BridgeType.LiftingIntrinsicInfo {
15931592
switch self {
15941593
case .bool: return .bool
1595-
case .int, .int32, .int64, .uint, .uint32, .uint64: return .int
1594+
case .integer(let integerType):
1595+
return .init(parameters: [("value", integerType.wasmCoreType)])
15961596
case .float: return .float
15971597
case .double: return .double
15981598
case .string: return .string
@@ -1602,7 +1602,8 @@ extension SwiftEnumRawType {
16021602
var loweringIntrinsicInfo: BridgeType.LoweringIntrinsicInfo {
16031603
switch self {
16041604
case .bool: return .bool
1605-
case .int, .int32, .int64, .uint, .uint32, .uint64: return .int
1605+
case .integer(let integerType):
1606+
return .init(returnType: integerType.wasmCoreType)
16061607
case .float: return .float
16071608
case .double: return .double
16081609
case .string: return .string

Plugins/BridgeJS/Sources/BridgeJSCore/ImportTS.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,7 @@ extension BridgeType {
822822
func loweringParameterInfo(context: BridgeContext = .importTS) throws -> LoweringParameterInfo {
823823
switch self {
824824
case .bool: return .bool
825-
case .int, .uint: return .int
825+
case .integer(let t): return LoweringParameterInfo(loweredParameters: [("value", t.wasmCoreType)])
826826
case .float: return .float
827827
case .double: return .double
828828
case .string: return .string
@@ -901,7 +901,7 @@ extension BridgeType {
901901
) throws -> LiftingReturnInfo {
902902
switch self {
903903
case .bool: return .bool
904-
case .int, .uint: return .int
904+
case .integer(let t): return LiftingReturnInfo(valueToLift: t.wasmCoreType)
905905
case .float: return .float
906906
case .double: return .double
907907
case .string: return .string

Plugins/BridgeJS/Sources/BridgeJSCore/SwiftToSkeleton.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ public final class SwiftToSkeleton {
442442
}
443443

444444
private enum ExportSwiftConstants {
445-
static let supportedRawTypes = SwiftEnumRawType.allCases.map { $0.rawValue }
445+
static let supportedRawTypes = SwiftEnumRawType.supportedTypeNames
446446
}
447447

448448
extension AttributeSyntax {
@@ -828,7 +828,7 @@ private final class ExportSwiftAPICollector: SyntaxAnyVisitor {
828828
let intValue = Int(intLiteral.literal.text)
829829
{
830830
let value = DefaultValue.int(isNegative ? -intValue : intValue)
831-
if let type = type, !type.isCompatibleWith(.int) {
831+
if let type = type, !type.isCompatibleWith(.integer(.int)) {
832832
return nil
833833
}
834834
return value
@@ -1489,12 +1489,12 @@ private final class ExportSwiftAPICollector: SyntaxAnyVisitor {
14891489
for enumCase in exportedEnum.cases {
14901490
for associatedValue in enumCase.associatedValues {
14911491
switch associatedValue.type {
1492-
case .string, .int, .float, .double, .bool, .caseEnum, .rawValueEnum,
1492+
case .string, .integer, .float, .double, .bool, .caseEnum, .rawValueEnum,
14931493
.swiftStruct, .swiftHeapObject, .jsObject, .associatedValueEnum, .array:
14941494
break
14951495
case .nullable(let wrappedType, _):
14961496
switch wrappedType {
1497-
case .string, .int, .float, .double, .bool, .caseEnum, .rawValueEnum,
1497+
case .string, .integer, .float, .double, .bool, .caseEnum, .rawValueEnum,
14981498
.swiftStruct, .swiftHeapObject, .jsObject, .associatedValueEnum, .array:
14991499
break
15001500
default:

Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ public struct BridgeJSLink {
302302
"let \(JSGlueVariableScope.reservedStorageToReturnOptionalHeapObject);",
303303
"let \(JSGlueVariableScope.reservedStringStack) = [];",
304304
"let \(JSGlueVariableScope.reservedI32Stack) = [];",
305+
"let \(JSGlueVariableScope.reservedI64Stack) = [];",
305306
"let \(JSGlueVariableScope.reservedF32Stack) = [];",
306307
"let \(JSGlueVariableScope.reservedF64Stack) = [];",
307308
"let \(JSGlueVariableScope.reservedPointerStack) = [];",
@@ -437,6 +438,16 @@ public struct BridgeJSLink {
437438
printer.write("return \(JSGlueVariableScope.reservedPointerStack).pop();")
438439
}
439440
printer.write("}")
441+
printer.write("bjs[\"swift_js_push_i64\"] = function(v) {")
442+
printer.indent {
443+
printer.write("\(JSGlueVariableScope.reservedI64Stack).push(v);")
444+
}
445+
printer.write("}")
446+
printer.write("bjs[\"swift_js_pop_i64\"] = function() {")
447+
printer.indent {
448+
printer.write("return \(JSGlueVariableScope.reservedI64Stack).pop();")
449+
}
450+
printer.write("}")
440451
if !allStructs.isEmpty {
441452
for structDef in allStructs {
442453
printer.write("bjs[\"swift_js_struct_lower_\(structDef.abiName)\"] = function(objectId) {")
@@ -3508,8 +3519,8 @@ extension BridgeType {
35083519
return "void"
35093520
case .string:
35103521
return "string"
3511-
case .int, .uint:
3512-
return "number"
3522+
case .integer(let t):
3523+
return t.tsTypeName
35133524
case .float:
35143525
return "number"
35153526
case .double:

0 commit comments

Comments
 (0)