Skip to content

Commit f1e14da

Browse files
committed
Migrate to Heap Type with some failing tests
1 parent d502b70 commit f1e14da

File tree

13 files changed

+43
-41
lines changed

13 files changed

+43
-41
lines changed

Sources/WAT/Encoder.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,9 @@ extension ValueType: WasmEncodable {
127127

128128
extension ReferenceType: WasmEncodable {
129129
func encode(to encoder: inout Encoder) {
130-
switch self {
131-
case .funcRef: encoder.output.append(0x70)
132-
case .funcRefNonNull: encoder.output.append(0x71)
130+
switch self.heapType {
131+
case .funcRef: encoder.output.append(isNullable ? 0x70 : 0x71)
133132
case .externRef: encoder.output.append(0x6F)
134-
case .externRefNonNull: encoder.output.append(0x6E) // Is this correct
135133
}
136134
}
137135
}

Sources/WAT/Parser/WastParser.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,11 @@ struct WastParser {
6363
mutating func visitRefFunc(functionIndex: UInt32) throws {
6464
addValue(.ref(.function(FunctionAddress(functionIndex))))
6565
}
66-
mutating func visitRefNull(type: ReferenceType) throws {
66+
mutating func visitRefNull(type: HeapType) throws {
6767
let value: Reference
6868
switch type {
6969
case .externRef: value = .extern(nil)
70-
case .externRefNonNull: value = .function(nil) // non null
7170
case .funcRef: value = .function(nil)
72-
case .funcRefNonNull: value = .function(nil) // non null
7371
}
7472
addValue(.ref(value))
7573
}

Sources/WAT/Parser/WatParser.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -650,8 +650,8 @@ struct WatParser {
650650
switch keyword {
651651
case "funcref": return .funcRef
652652
case "externref": return .externRef
653-
case "func": return isNullable ? .funcRef : .funcRefNonNull
654-
case "extern": return isNullable ? .externRef : .externRefNonNull
653+
case "func": return ReferenceType(isNullable: isNullable, heapType: .funcRef)
654+
case "extern": return ReferenceType(isNullable: isNullable, heapType: .funcRef)
655655
default: return nil
656656
}
657657
}

Sources/WasmKit/Execution/ConstEvaluation.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ extension ConstExpression {
6262
return try context.globalValue(globalIndex)
6363
case .refNull(let type):
6464
switch type {
65-
case .externRef, .externRefNonNull: return .ref(.extern(nil))
66-
case .funcRef, .funcRefNonNull: return .ref(.function(nil))
65+
case .externRef: return .ref(.extern(nil))
66+
case .funcRef: return .ref(.function(nil))
67+
default:
68+
throw ValidationError(.illegalConstExpressionInstruction(constInst))
6769
}
6870
case .refFunc(let functionIndex):
6971
return try .ref(context.functionRef(functionIndex))

Sources/WasmKit/Execution/Instances.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,11 @@ struct TableEntity /* : ~Copyable */ {
274274

275275
init(_ tableType: TableType, resourceLimiter: any ResourceLimiter) throws {
276276
let emptyElement: Reference
277-
switch tableType.elementType {
277+
switch tableType.elementType.heapType {
278278
case .funcRef:
279279
emptyElement = .function(nil)
280-
case .funcRefNonNull:
281-
emptyElement = .function(nil) // shouldn't be null
282280
case .externRef:
283281
emptyElement = .extern(nil)
284-
case .externRefNonNull:
285-
emptyElement = .extern(nil) // shouldn't be null
286282
}
287283

288284
let numberOfElements = Int(tableType.limits.min)

Sources/WasmKit/Execution/Instructions/InstructionSupport.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ extension Int32: InstructionImmediate {
105105

106106
extension Instruction.RefNullOperand {
107107
init(result: VReg, type: ReferenceType) {
108-
self.init(result: result, rawType: type.rawValue)
108+
self.init(result: result, rawType: 0) // need to figure out rawType here
109109
}
110110

111111
var type: ReferenceType {
112-
ReferenceType(rawValue: rawType).unsafelyUnwrapped
112+
ReferenceType(isNullable: true, heapType: .funcRef) // is this still a valid conversion?
113113
}
114114
}
115115

Sources/WasmKit/Execution/Instructions/Misc.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ extension Execution {
2222
mutating func refNull(sp: Sp, immediate: Instruction.RefNullOperand) {
2323
let value: Value
2424
switch immediate.type {
25-
case .externRef, .externRefNonNull:
25+
case .externRef:
2626
value = .ref(.extern(nil))
27-
case .funcRef, .funcRefNonNull:
27+
case .funcRef:
2828
value = .ref(.function(nil))
29+
default:
30+
fatalError()
2931
}
3032
sp[immediate.result] = UntypedValue(value)
3133
}

Sources/WasmKit/Execution/UntypedValue.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,10 @@ struct UntypedValue: Equatable, Hashable {
117117
switch type {
118118
case .funcRef:
119119
return .function(decodeOptionalInt())
120-
case .funcRefNonNull:
121-
// can skip optional check
122-
return .function(decodeOptionalInt())
123120
case .externRef:
124121
return .extern(decodeOptionalInt())
125-
case .externRefNonNull:
126-
// can skip optional check
127-
return .extern(decodeOptionalInt())
122+
default:
123+
fatalError()
128124
}
129125
}
130126

Sources/WasmKit/Execution/Value.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import enum WasmTypes.ReferenceType
1+
import struct WasmTypes.ReferenceType
22
import enum WasmTypes.ValueType
33

44
/// > Note:

Sources/WasmKit/Validator.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,7 @@ extension WasmTypes.Reference {
337337
// Should we validate nonNull variants have associated values present?
338338
switch (self, type) {
339339
case (.function, .funcRef): return
340-
case (.function, .funcRefNonNull): return
341340
case (.extern, .externRef): return
342-
case (.extern, .externRefNonNull): return
343341
default:
344342
throw ValidationError(.expectTypeButGot(expected: "\(type)", got: "\(self)"))
345343
}

0 commit comments

Comments
 (0)