wire __runtime_instanceof to 'instanceof' on upcasts

also adds runtime.instanceOf that can be exported for use by the host
This commit is contained in:
dcode
2019-04-02 23:58:58 +02:00
parent b62927f5e5
commit b58683aff4
12 changed files with 2569 additions and 141 deletions

View File

@ -1847,7 +1847,7 @@
call $~lib/env/abort
unreachable
end
block $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array>13 (result i32)
block $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array>11 (result i32)
i32.const 1
i32.const 12
call $~lib/runtime/runtime.allocate
@ -1855,7 +1855,7 @@
call $~lib/runtime/runtime.register
i32.const 2
call $~lib/arraybuffer/ArrayBufferView#constructor
br_if $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array>13
br_if $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array>11
drop
i32.const 0
end
@ -1870,12 +1870,12 @@
end
i32.const 1
global.set $~lib/argc
block $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array>14 (result i32)
block $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView>12 (result i32)
i32.const 1
global.get $std/arraybuffer/arr8
i32.load
call $~lib/dataview/DataView#constructor|trampoline
br_if $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array>14
br_if $__inlined_func$~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView>12
drop
i32.const 0
end

View File

@ -1982,38 +1982,570 @@
(func $~lib/arraybuffer/ArrayBuffer.isView<~lib/array/Array<i32>> (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
if
nop
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
end
i32.const 0
)
(func $~lib/arraybuffer/ArrayBuffer.isView<usize> (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
if
nop
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
end
i32.const 0
)
(func $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Uint8Array> (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
if
i32.const 1
return
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 1
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
end
i32.const 0
)
(func $~lib/arraybuffer/ArrayBuffer.isView<~lib/typedarray/Int32Array> (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
if
i32.const 1
return
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 1
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
end
i32.const 0
)
(func $~lib/arraybuffer/ArrayBuffer.isView<~lib/dataview/DataView> (; 16 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
if
i32.const 1
return
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 0
end
if
i32.const 1
return
end
block (result i32)
local.get $0
drop
i32.const 1
end
if
i32.const 1
return
end
end
i32.const 0
)