From e35cdb97adf6eb2ade2be7734d1c6c397d440dc1 Mon Sep 17 00:00:00 2001 From: Daniel Wirtz Date: Sat, 19 Sep 2020 08:48:06 +0200 Subject: GC: Integrate eqref and i31ref types (#3141) Adds the `eqref` and `i31ref` types to their respective code locations. Implements what can be implemented trivially and otherwise traps with a TODO for now. Integration of `eqref` is mostly complete due to it being nullable, just like `anyref`, but `i31ref` needs to remain disabled in the fuzzer because we are lacking the functionality to create trivial `i31ref` values, i.e. `(i31.new (i32.const 0))`, which is left for follow-ups to implement. --- src/js/binaryen.js-post.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/js/binaryen.js-post.js') diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 87a6bacda..4703abc54 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -37,6 +37,8 @@ function initializeConstants() { ['externref', 'Externref'], ['exnref', 'Exnref'], ['anyref', 'Anyref'], + ['eqref', 'Eqref'], + ['i31ref', 'I31ref'], ['unreachable', 'Unreachable'], ['auto', 'Auto'] ].forEach(entry => { @@ -2070,6 +2072,18 @@ function wrapModule(module, self = {}) { } }; + self['eqref'] = { + 'pop'() { + return Module['_BinaryenPop'](module, Module['eqref']); + } + }; + + self['i31ref'] = { + 'pop'() { + return Module['_BinaryenPop'](module, Module['i31ref']); + } + }; + self['ref'] = { 'null'(type) { return Module['_BinaryenRefNull'](module, type); -- cgit v1.2.3