Skip to content

Commit 455f431

Browse files
authored
wasm2js: avoid non-ES5 stuff like "let" (#2041)
Also fix the fuzzer's handling of feature flags so that wasm2js can work.
1 parent 7fe2701 commit 455f431

66 files changed

Lines changed: 1190 additions & 1184 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

scripts/fuzz_opt.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828

2929
NANS = True
3030

31-
FUZZ_OPTS = [] # '--all-features' etc
31+
FEATURE_OPTS = [] # '--all-features' etc
32+
33+
FUZZ_OPTS = []
3234

3335
V8_OPTS = [
3436
'--experimental-wasm-eh',
@@ -138,19 +140,23 @@ def run_vm(cmd):
138140

139141

140142
def run_bynterp(wasm):
141-
return fix_output(run_vm([in_bin('wasm-opt'), wasm, '--fuzz-exec-before'] + FUZZ_OPTS))
143+
return fix_output(run_vm([in_bin('wasm-opt'), wasm, '--fuzz-exec-before'] + FEATURE_OPTS))
142144

143145

144146
def run_wasm2js(wasm):
145-
wrapper = run([in_bin('wasm-opt'), wasm, '--emit-js-wrapper=/dev/stdout'] + FUZZ_OPTS)
146-
main = run([in_bin('wasm2js'), wasm, '--emscripten'] + FUZZ_OPTS)
147+
wrapper = run([in_bin('wasm-opt'), wasm, '--emit-js-wrapper=/dev/stdout'] + FEATURE_OPTS)
148+
main = run([in_bin('wasm2js'), wasm, '--emscripten'] + FEATURE_OPTS)
147149
with open(os.path.join(options.binaryen_root, 'scripts', 'wasm2js.js')) as f:
148150
glue = f.read()
149151
with open('js.js', 'w') as f:
150152
f.write(glue)
151153
f.write(main)
152154
f.write(wrapper)
153-
return fix_output(run_vm([NODEJS, 'js.js', 'a.wasm']))
155+
out = fix_output(run_vm([NODEJS, 'js.js', 'a.wasm']))
156+
if 'exception' in out:
157+
# exception, so ignoring - wasm2js does not have normal wasm trapping, so opts can eliminate a trap
158+
out = IGNORE
159+
return out
154160

155161

156162
def run_vms(prefix):
@@ -186,14 +192,14 @@ def test_one(infile, opts):
186192

187193
# fuzz vms
188194
# gather VM outputs on input file
189-
run([in_bin('wasm-opt'), infile, '-ttf', '--emit-js-wrapper=a.js', '--emit-spec-wrapper=a.wat', '-o', 'a.wasm'] + FUZZ_OPTS)
195+
run([in_bin('wasm-opt'), infile, '-ttf', '--emit-js-wrapper=a.js', '--emit-spec-wrapper=a.wat', '-o', 'a.wasm'] + FUZZ_OPTS + FEATURE_OPTS)
190196
wasm_size = os.stat('a.wasm').st_size
191197
bytes += wasm_size
192198
print('pre js size :', os.stat('a.js').st_size, ' wasm size:', wasm_size)
193199
before = run_vms('a.')
194200
print('----------------')
195201
# gather VM outputs on processed file
196-
run([in_bin('wasm-opt'), 'a.wasm', '-o', 'b.wasm'] + opts + FUZZ_OPTS)
202+
run([in_bin('wasm-opt'), 'a.wasm', '-o', 'b.wasm'] + opts + FUZZ_OPTS + FEATURE_OPTS)
197203
wasm_size = os.stat('b.wasm').st_size
198204
bytes += wasm_size
199205
print('post js size:', os.stat('a.js').st_size, ' wasm size:', wasm_size)
@@ -205,10 +211,10 @@ def test_one(infile, opts):
205211
if NANS:
206212
break
207213
# fuzz binaryen interpreter itself. separate invocation so result is easily fuzzable
208-
run([in_bin('wasm-opt'), 'a.wasm', '--fuzz-exec', '--fuzz-binary'] + opts + FUZZ_OPTS)
214+
run([in_bin('wasm-opt'), 'a.wasm', '--fuzz-exec', '--fuzz-binary'] + opts + FUZZ_OPTS + FEATURE_OPTS)
209215
# check for determinism
210-
run([in_bin('wasm-opt'), 'a.wasm', '-o', 'b.wasm'] + opts + FUZZ_OPTS)
211-
run([in_bin('wasm-opt'), 'a.wasm', '-o', 'c.wasm'] + opts + FUZZ_OPTS)
216+
run([in_bin('wasm-opt'), 'a.wasm', '-o', 'b.wasm'] + opts + FUZZ_OPTS + FEATURE_OPTS)
217+
run([in_bin('wasm-opt'), 'a.wasm', '-o', 'c.wasm'] + opts + FUZZ_OPTS + FEATURE_OPTS)
212218
assert open('b.wasm').read() == open('c.wasm').read(), 'output must be deterministic'
213219

214220
return bytes

src/wasm2js.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,7 +1847,7 @@ void Wasm2JSGlue::emitPostES6() {
18471847
// can be used for conversions, so make sure there's at least one page.
18481848
{
18491849
auto pages = wasm.memory.initial == 0 ? 1 : wasm.memory.initial.addr;
1850-
out << "const mem" << moduleName.str << " = new ArrayBuffer("
1850+
out << "var mem" << moduleName.str << " = new ArrayBuffer("
18511851
<< pages * Memory::kPageSize
18521852
<< ");\n";
18531853
}
@@ -1857,7 +1857,7 @@ void Wasm2JSGlue::emitPostES6() {
18571857

18581858
// Actually invoke the `asmFunc` generated function, passing in all global
18591859
// values followed by all imports
1860-
out << "const ret" << moduleName.str << " = " << moduleName.str << "({"
1860+
out << "var ret" << moduleName.str << " = " << moduleName.str << "({"
18611861
<< "Math,"
18621862
<< "Int8Array,"
18631863
<< "Uint8Array,"
@@ -1906,7 +1906,7 @@ void Wasm2JSGlue::emitPostES6() {
19061906
export_name << *ptr;
19071907
}
19081908
}
1909-
out << "export const "
1909+
out << "export var "
19101910
<< asmangle(exp->name.str)
19111911
<< " = ret"
19121912
<< moduleName.str
@@ -1921,23 +1921,23 @@ void Wasm2JSGlue::emitMemory(std::string buffer, std::string segmentWriter) {
19211921

19221922
auto expr = R"(
19231923
function(mem) {
1924-
const _mem = new Uint8Array(mem);
1924+
var _mem = new Uint8Array(mem);
19251925
return function(offset, s) {
19261926
if (typeof Buffer === 'undefined') {
1927-
const bytes = atob(s);
1928-
for (let i = 0; i < bytes.length; i++)
1927+
var bytes = atob(s);
1928+
for (var i = 0; i < bytes.length; i++)
19291929
_mem[offset + i] = bytes.charCodeAt(i);
19301930
} else {
1931-
const bytes = Buffer.from(s, 'base64');
1932-
for (let i = 0; i < bytes.length; i++)
1931+
var bytes = Buffer.from(s, 'base64');
1932+
for (var i = 0; i < bytes.length; i++)
19331933
_mem[offset + i] = bytes[i];
19341934
}
19351935
}
19361936
}
19371937
)";
19381938

1939-
// const assign$name = ($expr)(mem$name);
1940-
out << "const " << segmentWriter
1939+
// var assign$name = ($expr)(mem$name);
1940+
out << "var " << segmentWriter
19411941
<< " = (" << expr << ")(" << buffer << ");\n";
19421942

19431943
for (auto& seg : wasm.memory.segments) {

test/binaryen.js/emit_asmjs.js.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function asmFunc(global, env, buffer) {
3232
};
3333
}
3434

35-
const memasmFunc = new ArrayBuffer(65536);
36-
const retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
37-
export const main = retasmFunc.main;
35+
var memasmFunc = new ArrayBuffer(65536);
36+
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
37+
export var main = retasmFunc.main;
3838

test/wasm2js.asserts.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ function asmFunc0(global, env, buffer) {
7676
};
7777
}
7878

79-
const memasmFunc0 = new ArrayBuffer(65536);
80-
const retasmFunc0 = asmFunc0({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc0);
79+
var memasmFunc0 = new ArrayBuffer(65536);
80+
var retasmFunc0 = asmFunc0({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc0);
8181
function check1() {
8282
retasmFunc0.empty();
8383
return 1 | 0;

test/wasm2js.traps.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ function asmFunc0(global, env, buffer) {
7676
};
7777
}
7878

79-
const memasmFunc0 = new ArrayBuffer(65536);
80-
const retasmFunc0 = asmFunc0({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc0);
79+
var memasmFunc0 = new ArrayBuffer(65536);
80+
var retasmFunc0 = asmFunc0({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc0);
8181
function check1() {
8282
retasmFunc0.empty();
8383
return 1 | 0;

test/wasm2js/address.2asm.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,24 +80,24 @@ function asmFunc(global, env, buffer) {
8080
};
8181
}
8282

83-
const memasmFunc = new ArrayBuffer(65536);
84-
const assignasmFunc = (
83+
var memasmFunc = new ArrayBuffer(65536);
84+
var assignasmFunc = (
8585
function(mem) {
86-
const _mem = new Uint8Array(mem);
86+
var _mem = new Uint8Array(mem);
8787
return function(offset, s) {
8888
if (typeof Buffer === 'undefined') {
89-
const bytes = atob(s);
90-
for (let i = 0; i < bytes.length; i++)
89+
var bytes = atob(s);
90+
for (var i = 0; i < bytes.length; i++)
9191
_mem[offset + i] = bytes.charCodeAt(i);
9292
} else {
93-
const bytes = Buffer.from(s, 'base64');
94-
for (let i = 0; i < bytes.length; i++)
93+
var bytes = Buffer.from(s, 'base64');
94+
for (var i = 0; i < bytes.length; i++)
9595
_mem[offset + i] = bytes[i];
9696
}
9797
}
9898
}
9999
)(memasmFunc);
100100
assignasmFunc(0, "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=");
101-
const retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); },print},memasmFunc);
102-
export const good = retasmFunc.good;
103-
export const bad = retasmFunc.bad;
101+
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); },print},memasmFunc);
102+
export var good = retasmFunc.good;
103+
export var bad = retasmFunc.bad;

test/wasm2js/base64.2asm.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ function asmFunc(global, env, buffer) {
2727
};
2828
}
2929

30-
const memasmFunc = new ArrayBuffer(65536);
31-
const retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
30+
var memasmFunc = new ArrayBuffer(65536);
31+
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);

test/wasm2js/block.2asm.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -189,19 +189,19 @@ function asmFunc(global, env, buffer) {
189189
};
190190
}
191191

192-
const memasmFunc = new ArrayBuffer(65536);
193-
const retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
194-
export const empty = retasmFunc.empty;
195-
export const singular = retasmFunc.singular;
196-
export const multi = retasmFunc.multi;
197-
export const nested = retasmFunc.nested;
198-
export const deep = retasmFunc.deep;
199-
export const as_unary_operand = retasmFunc.as_unary_operand;
200-
export const as_binary_operand = retasmFunc.as_binary_operand;
201-
export const as_test_operand = retasmFunc.as_test_operand;
202-
export const as_compare_operand = retasmFunc.as_compare_operand;
203-
export const break_bare = retasmFunc.break_bare;
204-
export const break_value = retasmFunc.break_value;
205-
export const break_repeated = retasmFunc.break_repeated;
206-
export const break_inner = retasmFunc.break_inner;
207-
export const effects = retasmFunc.effects;
192+
var memasmFunc = new ArrayBuffer(65536);
193+
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
194+
export var empty = retasmFunc.empty;
195+
export var singular = retasmFunc.singular;
196+
export var multi = retasmFunc.multi;
197+
export var nested = retasmFunc.nested;
198+
export var deep = retasmFunc.deep;
199+
export var as_unary_operand = retasmFunc.as_unary_operand;
200+
export var as_binary_operand = retasmFunc.as_binary_operand;
201+
export var as_test_operand = retasmFunc.as_test_operand;
202+
export var as_compare_operand = retasmFunc.as_compare_operand;
203+
export var break_bare = retasmFunc.break_bare;
204+
export var break_value = retasmFunc.break_value;
205+
export var break_repeated = retasmFunc.break_repeated;
206+
export var break_inner = retasmFunc.break_inner;
207+
export var effects = retasmFunc.effects;

test/wasm2js/br.2asm.js

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -729,65 +729,65 @@ function asmFunc(global, env, buffer) {
729729
};
730730
}
731731

732-
const memasmFunc = new ArrayBuffer(65536);
733-
const retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); },setTempRet0},memasmFunc);
734-
export const type_i32 = retasmFunc.type_i32;
735-
export const type_i64 = retasmFunc.type_i64;
736-
export const type_f32 = retasmFunc.type_f32;
737-
export const type_f64 = retasmFunc.type_f64;
738-
export const type_i32_value = retasmFunc.type_i32_value;
739-
export const type_i64_value = retasmFunc.type_i64_value;
740-
export const type_f32_value = retasmFunc.type_f32_value;
741-
export const type_f64_value = retasmFunc.type_f64_value;
742-
export const as_block_first = retasmFunc.as_block_first;
743-
export const as_block_mid = retasmFunc.as_block_mid;
744-
export const as_block_last = retasmFunc.as_block_last;
745-
export const as_block_value = retasmFunc.as_block_value;
746-
export const as_loop_first = retasmFunc.as_loop_first;
747-
export const as_loop_mid = retasmFunc.as_loop_mid;
748-
export const as_loop_last = retasmFunc.as_loop_last;
749-
export const as_br_value = retasmFunc.as_br_value;
750-
export const as_br_if_cond = retasmFunc.as_br_if_cond;
751-
export const as_br_if_value = retasmFunc.as_br_if_value;
752-
export const as_br_if_value_cond = retasmFunc.as_br_if_value_cond;
753-
export const as_br_table_index = retasmFunc.as_br_table_index;
754-
export const as_br_table_value = retasmFunc.as_br_table_value;
755-
export const as_br_table_value_index = retasmFunc.as_br_table_value_index;
756-
export const as_return_value = retasmFunc.as_return_value;
757-
export const as_if_cond = retasmFunc.as_if_cond;
758-
export const as_if_then = retasmFunc.as_if_then;
759-
export const as_if_else = retasmFunc.as_if_else;
760-
export const as_select_first = retasmFunc.as_select_first;
761-
export const as_select_second = retasmFunc.as_select_second;
762-
export const as_select_cond = retasmFunc.as_select_cond;
763-
export const as_call_first = retasmFunc.as_call_first;
764-
export const as_call_mid = retasmFunc.as_call_mid;
765-
export const as_call_last = retasmFunc.as_call_last;
766-
export const as_call_indirect_func = retasmFunc.as_call_indirect_func;
767-
export const as_call_indirect_first = retasmFunc.as_call_indirect_first;
768-
export const as_call_indirect_mid = retasmFunc.as_call_indirect_mid;
769-
export const as_call_indirect_last = retasmFunc.as_call_indirect_last;
770-
export const as_local_set_value = retasmFunc.as_local_set_value;
771-
export const as_load_address = retasmFunc.as_load_address;
772-
export const as_loadN_address = retasmFunc.as_loadN_address;
773-
export const as_store_address = retasmFunc.as_store_address;
774-
export const as_store_value = retasmFunc.as_store_value;
775-
export const as_storeN_address = retasmFunc.as_storeN_address;
776-
export const as_storeN_value = retasmFunc.as_storeN_value;
777-
export const as_unary_operand = retasmFunc.as_unary_operand;
778-
export const as_binary_left = retasmFunc.as_binary_left;
779-
export const as_binary_right = retasmFunc.as_binary_right;
780-
export const as_test_operand = retasmFunc.as_test_operand;
781-
export const as_compare_left = retasmFunc.as_compare_left;
782-
export const as_compare_right = retasmFunc.as_compare_right;
783-
export const as_convert_operand = retasmFunc.as_convert_operand;
784-
export const as_grow_memory_size = retasmFunc.as_grow_memory_size;
785-
export const nested_block_value = retasmFunc.nested_block_value;
786-
export const nested_br_value = retasmFunc.nested_br_value;
787-
export const nested_br_if_value = retasmFunc.nested_br_if_value;
788-
export const nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond;
789-
export const nested_br_table_value = retasmFunc.nested_br_table_value;
790-
export const nested_br_table_value_index = retasmFunc.nested_br_table_value_index;
732+
var memasmFunc = new ArrayBuffer(65536);
733+
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); },setTempRet0},memasmFunc);
734+
export var type_i32 = retasmFunc.type_i32;
735+
export var type_i64 = retasmFunc.type_i64;
736+
export var type_f32 = retasmFunc.type_f32;
737+
export var type_f64 = retasmFunc.type_f64;
738+
export var type_i32_value = retasmFunc.type_i32_value;
739+
export var type_i64_value = retasmFunc.type_i64_value;
740+
export var type_f32_value = retasmFunc.type_f32_value;
741+
export var type_f64_value = retasmFunc.type_f64_value;
742+
export var as_block_first = retasmFunc.as_block_first;
743+
export var as_block_mid = retasmFunc.as_block_mid;
744+
export var as_block_last = retasmFunc.as_block_last;
745+
export var as_block_value = retasmFunc.as_block_value;
746+
export var as_loop_first = retasmFunc.as_loop_first;
747+
export var as_loop_mid = retasmFunc.as_loop_mid;
748+
export var as_loop_last = retasmFunc.as_loop_last;
749+
export var as_br_value = retasmFunc.as_br_value;
750+
export var as_br_if_cond = retasmFunc.as_br_if_cond;
751+
export var as_br_if_value = retasmFunc.as_br_if_value;
752+
export var as_br_if_value_cond = retasmFunc.as_br_if_value_cond;
753+
export var as_br_table_index = retasmFunc.as_br_table_index;
754+
export var as_br_table_value = retasmFunc.as_br_table_value;
755+
export var as_br_table_value_index = retasmFunc.as_br_table_value_index;
756+
export var as_return_value = retasmFunc.as_return_value;
757+
export var as_if_cond = retasmFunc.as_if_cond;
758+
export var as_if_then = retasmFunc.as_if_then;
759+
export var as_if_else = retasmFunc.as_if_else;
760+
export var as_select_first = retasmFunc.as_select_first;
761+
export var as_select_second = retasmFunc.as_select_second;
762+
export var as_select_cond = retasmFunc.as_select_cond;
763+
export var as_call_first = retasmFunc.as_call_first;
764+
export var as_call_mid = retasmFunc.as_call_mid;
765+
export var as_call_last = retasmFunc.as_call_last;
766+
export var as_call_indirect_func = retasmFunc.as_call_indirect_func;
767+
export var as_call_indirect_first = retasmFunc.as_call_indirect_first;
768+
export var as_call_indirect_mid = retasmFunc.as_call_indirect_mid;
769+
export var as_call_indirect_last = retasmFunc.as_call_indirect_last;
770+
export var as_local_set_value = retasmFunc.as_local_set_value;
771+
export var as_load_address = retasmFunc.as_load_address;
772+
export var as_loadN_address = retasmFunc.as_loadN_address;
773+
export var as_store_address = retasmFunc.as_store_address;
774+
export var as_store_value = retasmFunc.as_store_value;
775+
export var as_storeN_address = retasmFunc.as_storeN_address;
776+
export var as_storeN_value = retasmFunc.as_storeN_value;
777+
export var as_unary_operand = retasmFunc.as_unary_operand;
778+
export var as_binary_left = retasmFunc.as_binary_left;
779+
export var as_binary_right = retasmFunc.as_binary_right;
780+
export var as_test_operand = retasmFunc.as_test_operand;
781+
export var as_compare_left = retasmFunc.as_compare_left;
782+
export var as_compare_right = retasmFunc.as_compare_right;
783+
export var as_convert_operand = retasmFunc.as_convert_operand;
784+
export var as_grow_memory_size = retasmFunc.as_grow_memory_size;
785+
export var nested_block_value = retasmFunc.nested_block_value;
786+
export var nested_br_value = retasmFunc.nested_br_value;
787+
export var nested_br_if_value = retasmFunc.nested_br_if_value;
788+
export var nested_br_if_value_cond = retasmFunc.nested_br_if_value_cond;
789+
export var nested_br_table_value = retasmFunc.nested_br_table_value;
790+
export var nested_br_table_value_index = retasmFunc.nested_br_table_value_index;
791791

792792
function asmFunc(global, env, buffer) {
793793
"almost asm";
@@ -817,5 +817,5 @@ function asmFunc(global, env, buffer) {
817817
};
818818
}
819819

820-
const memasmFunc = new ArrayBuffer(65536);
821-
const retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
820+
var memasmFunc = new ArrayBuffer(65536);
821+
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);

0 commit comments

Comments
 (0)