Skip to content

Commit 0fb3e28

Browse files
BridgeJS: expand integer type support
1 parent ba66ff1 commit 0fb3e28

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
@@ -733,7 +733,7 @@ struct StackCodegen {
733733
/// - Returns: An ExprSyntax representing the lift expression
734734
func liftExpression(for type: BridgeType) -> ExprSyntax {
735735
switch type {
736-
case .string, .int, .uint, .bool, .float, .double,
736+
case .string, .integer, .bool, .float, .double,
737737
.jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject, .unsafePointer,
738738
.swiftProtocol, .caseEnum, .associatedValueEnum, .rawValueEnum, .array, .dictionary:
739739
return "\(raw: type.swiftType).bridgeJSStackPop()"
@@ -751,7 +751,7 @@ struct StackCodegen {
751751
private func liftNullableExpression(wrappedType: BridgeType, kind: JSOptionalKind) -> ExprSyntax {
752752
let typeName = kind == .null ? "Optional" : "JSUndefinedOr"
753753
switch wrappedType {
754-
case .string, .int, .uint, .bool, .float, .double, .jsObject(nil), .jsValue,
754+
case .string, .integer, .bool, .float, .double, .jsObject(nil), .jsValue,
755755
.swiftStruct, .swiftHeapObject, .caseEnum, .associatedValueEnum, .rawValueEnum,
756756
.array, .dictionary:
757757
return "\(raw: typeName)<\(raw: wrappedType.swiftType)>.bridgeJSStackPop()"
@@ -774,7 +774,7 @@ struct StackCodegen {
774774
varPrefix: String
775775
) -> [CodeBlockItemSyntax] {
776776
switch type {
777-
case .string, .int, .uint, .bool, .float, .double, .jsValue,
777+
case .string, .integer, .bool, .float, .double, .jsValue,
778778
.jsObject(nil), .swiftHeapObject, .unsafePointer, .closure,
779779
.caseEnum, .rawValueEnum, .associatedValueEnum, .swiftStruct, .nullable:
780780
return ["\(raw: accessor).bridgeJSStackPush()"]
@@ -1377,8 +1377,7 @@ extension BridgeType {
13771377
var swiftType: String {
13781378
switch self {
13791379
case .bool: return "Bool"
1380-
case .int: return "Int"
1381-
case .uint: return "UInt"
1380+
case .integer(let t): return t.swiftTypeName
13821381
case .float: return "Float"
13831382
case .double: return "Double"
13841383
case .string: return "String"
@@ -1444,7 +1443,7 @@ extension BridgeType {
14441443
func liftParameterInfo() throws -> LiftingIntrinsicInfo {
14451444
switch self {
14461445
case .bool: return .bool
1447-
case .int, .uint: return .int
1446+
case .integer(let t): return LiftingIntrinsicInfo(parameters: [("value", t.wasmCoreType)])
14481447
case .float: return .float
14491448
case .double: return .double
14501449
case .string: return .string
@@ -1502,7 +1501,7 @@ extension BridgeType {
15021501
func loweringReturnInfo() throws -> LoweringIntrinsicInfo {
15031502
switch self {
15041503
case .bool: return .bool
1505-
case .int, .uint: return .int
1504+
case .integer(let t): return LoweringIntrinsicInfo(returnType: t.wasmCoreType)
15061505
case .float: return .float
15071506
case .double: return .double
15081507
case .string: return .string
@@ -1534,7 +1533,8 @@ extension SwiftEnumRawType {
15341533
var liftingIntrinsicInfo: BridgeType.LiftingIntrinsicInfo {
15351534
switch self {
15361535
case .bool: return .bool
1537-
case .int, .int32, .int64, .uint, .uint32, .uint64: return .int
1536+
case .integer(let integerType):
1537+
return .init(parameters: [("value", integerType.wasmCoreType)])
15381538
case .float: return .float
15391539
case .double: return .double
15401540
case .string: return .string
@@ -1544,7 +1544,8 @@ extension SwiftEnumRawType {
15441544
var loweringIntrinsicInfo: BridgeType.LoweringIntrinsicInfo {
15451545
switch self {
15461546
case .bool: return .bool
1547-
case .int, .int32, .int64, .uint, .uint32, .uint64: return .int
1547+
case .integer(let integerType):
1548+
return .init(returnType: integerType.wasmCoreType)
15481549
case .float: return .float
15491550
case .double: return .double
15501551
case .string: return .string

Plugins/BridgeJS/Sources/BridgeJSCore/ImportTS.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,7 @@ extension BridgeType {
802802
func loweringParameterInfo(context: BridgeContext = .importTS) throws -> LoweringParameterInfo {
803803
switch self {
804804
case .bool: return .bool
805-
case .int, .uint: return .int
805+
case .integer(let t): return LoweringParameterInfo(loweredParameters: [("value", t.wasmCoreType)])
806806
case .float: return .float
807807
case .double: return .double
808808
case .string: return .string
@@ -876,7 +876,7 @@ extension BridgeType {
876876
) throws -> LiftingReturnInfo {
877877
switch self {
878878
case .bool: return .bool
879-
case .int, .uint: return .int
879+
case .integer(let t): return LiftingReturnInfo(valueToLift: t.wasmCoreType)
880880
case .float: return .float
881881
case .double: return .double
882882
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)