@@ -71,12 +71,16 @@ let _LIST_ID = untagSimpleNumber(builtinId("List"))
7171let _OPTION_ID = untagSimpleNumber(builtinId("Option"))
7272@unsafe
7373let _RESULT_ID = untagSimpleNumber(builtinId("Result"))
74+ @unsafe
75+ let _RANGE_ID = untagSimpleNumber(builtinId("Range"))
7476
7577let _SOME = "Some"
7678let _NONE = "None"
7779let _OK = "Ok"
7880let _ERR = "Err"
7981
82+ let _RANGE_FIELDS = [> "rangeStart", "rangeEnd"]
83+
8084// Resizable arrays: <num items> <capacity> <...data>
8185@unsafe
8286let _VEC_LEN_OFFSET = 0n
@@ -163,6 +167,12 @@ let isListVariant = variant => {
163167 typeId == _LIST_ID
164168}
165169
170+ @unsafe
171+ let isRangeRecord = record_ => {
172+ let typeId = WasmI32.load(record_, 8n) >> 1n
173+ typeId == _RANGE_ID
174+ }
175+
166176@unsafe
167177let getBuiltinVariantName = variant => {
168178 let typeId = WasmI32.load(variant, 8n) >> 1n
@@ -231,14 +241,18 @@ let getVariantMetadata = variant => {
231241@unsafe
232242let getRecordFieldNames = record_ => {
233243 let typeHash = WasmI32.load(record_, 4n) >> 1n
234- let arity = WasmI32.load(record_, 12n)
244+ if (isRangeRecord(record_)) {
245+ return Memory.incRef(WasmI32.fromGrain(_RANGE_FIELDS))
246+ } else {
247+ let arity = WasmI32.load(record_, 12n)
235248
236- let mut fields = findTypeMetadata(typeHash)
249+ let mut fields = findTypeMetadata(typeHash)
237250
238- if (fields == -1n) return -1n
251+ if (fields == -1n) return -1n
239252
240- fields += 4n
241- return getFieldArray(fields, arity)
253+ fields += 4n
254+ return getFieldArray(fields, arity)
255+ }
242256}
243257
244258@unsafe
0 commit comments