text.js (8272B)
1 var parsingError = /wasm text error/; 2 3 assertErrorMessage(() => wasmEvalText(''), SyntaxError, parsingError); 4 assertErrorMessage(() => wasmEvalText('('), SyntaxError, parsingError); 5 assertErrorMessage(() => wasmEvalText('(m'), SyntaxError, parsingError); 6 assertErrorMessage(() => wasmEvalText('(module'), SyntaxError, parsingError); 7 assertErrorMessage(() => wasmEvalText('(moduler'), SyntaxError, parsingError); 8 assertErrorMessage(() => wasmEvalText('(module (func) (export "a'), SyntaxError, parsingError); 9 assertErrorMessage(() => wasmEvalText('(module (func (local $a i32) (param $b f32)))'), SyntaxError, parsingError); 10 11 assertErrorMessage(() => wasmEvalText('(module (func $a) (func) (export "a" (func $a)) (export "b" (func $b)))'), SyntaxError, /failed to find name/); 12 assertErrorMessage(() => wasmEvalText('(module (import "a" "b" (func $foo)) (import "a" "b" (func $foo)))'), SyntaxError, /duplicate func identifier/); 13 assertErrorMessage(() => wasmEvalText('(module (func $foo) (func $foo))'), SyntaxError, /duplicate func identifier/); 14 assertErrorMessage(() => wasmEvalText('(module (func (param $a i32) (local $a i32)))'), SyntaxError, /duplicate local identifier/); 15 assertErrorMessage(() => wasmEvalText('(module (func (local.get $a)))'), SyntaxError, /failed to find name/); 16 assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (type $a (func (param i32))))'), SyntaxError, /duplicate type identifier/); 17 assertErrorMessage(() => wasmEvalText('(module (import "a" "" (func)) (func (call $abc)))'), SyntaxError, /failed to find name/); 18 assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (func (type $b) (i32.const 13)))'), SyntaxError, /failed to find name/); 19 assertErrorMessage(() => wasmEvalText('(module (type $a (func)) (func (call_indirect (type $c) (i32.const 0) (local.get 0))))'), SyntaxError, /failed to find name/); 20 assertErrorMessage(() => wasmEvalText('(module (func (br $a)))'), SyntaxError, /failed to find name/); 21 assertErrorMessage(() => wasmEvalText('(module (func (block $a ) (br $a)))'), SyntaxError, /failed to find name/); 22 23 assertErrorMessage(() => wasmEvalText(`(module (func (call ${0xffffffff})))`), WebAssembly.CompileError, /(callee index out of range)|(function index out of bounds)/); 24 assertErrorMessage(() => wasmEvalText(`(module (export "func" ${0xffffffff}))`), SyntaxError, parsingError); 25 26 wasmEvalText('(module (func (param $a i32)))'); 27 wasmEvalText('(module (func (param i32)))'); 28 wasmEvalText('(module (func (param i32 i32 f32 f64 i32)))'); 29 assertErrorMessage(() => wasmEvalText('(module (func (param $a)))'), SyntaxError, parsingError); 30 assertErrorMessage(() => wasmEvalText('(module (func (param $a i32 i32)))'), SyntaxError, parsingError); 31 32 wasmEvalText('(module (func (local $a i32)))'); 33 wasmEvalText('(module (func (local i32)))'); 34 wasmEvalText('(module (func (local i32 i32 f32 f64 i32)))'); 35 assertErrorMessage(() => wasmEvalText('(module (func (local $a)))'), SyntaxError, parsingError); 36 assertErrorMessage(() => wasmEvalText('(module (func (local $a i32 i32)))'), SyntaxError, parsingError); 37 38 // Table 39 assertErrorMessage(() => wasmEvalText('(module (table (local $a)))'), SyntaxError, parsingError); 40 assertErrorMessage(() => wasmEvalText('(module (table $t))'), SyntaxError, parsingError); 41 assertErrorMessage(() => wasmEvalText('(module (table $t 1))'), SyntaxError, parsingError); 42 assertErrorMessage(() => wasmEvalText('(module (table $t 1 10))'), SyntaxError, parsingError); 43 wasmEvalText('(module (table $t 1 10 funcref))'); 44 wasmEvalText('(module (table $t 1 funcref))'); 45 wasmEvalText('(module (table 0 funcref))'); 46 47 assertErrorMessage(() => wasmEvalText('(module (table $t funcref))'), SyntaxError, parsingError); 48 wasmEvalText('(module (table $t funcref (elem)))'); 49 wasmEvalText('(module (func) (table $t funcref (elem 0 0 0)))'); 50 51 const { Table } = WebAssembly; 52 const table = new Table({initial:1, element:"anyfunc"}); 53 assertErrorMessage(() => wasmEvalText('(module (table $t (import) 1 funcref))'), SyntaxError, parsingError); 54 assertErrorMessage(() => wasmEvalText('(module (table $t (import "mod" "field") 1 funcref (elem 1 2 3)))'), SyntaxError, parsingError); 55 wasmEvalText('(module (table $t (import "mod" "field") 1 funcref))', {mod: {field: table}}); 56 57 assertErrorMessage(() => wasmEvalText('(module (table $t (export "mod") 1))'), SyntaxError, parsingError); 58 assertErrorMessage(() => wasmEvalText('(module (table $t (export "mod") funcref))'), SyntaxError, parsingError); 59 assertErrorMessage(() => wasmEvalText('(module (table $t (export "mod") funcref 1 2 3))'), SyntaxError, parsingError); 60 assertEq(wasmEvalText('(module (table $t (export "tbl") funcref (elem)))').exports.tbl instanceof Table, true); 61 assertEq(wasmEvalText('(module (func) (table $t (export "tbl") funcref (elem 0 0 0)))').exports.tbl instanceof Table, true); 62 63 // Functions. 64 assertErrorMessage(() => wasmEvalText('(module (func $t import))'), SyntaxError, parsingError); 65 assertErrorMessage(() => wasmEvalText('(module (func $t (import)))'), SyntaxError, parsingError); 66 assertErrorMessage(() => wasmEvalText('(module (func $t (import "mod" "func" (local i32))))'), SyntaxError, parsingError); 67 68 const func = i => 42 + i; 69 wasmEvalText('(module (func $t (import "mod" "func")))', { mod: {func} }); 70 wasmEvalText('(module (func $t (import "mod" "func") (param i32)))', { mod: {func} }); 71 wasmEvalText('(module (func $t (import "mod" "func") (result i32)))', { mod: {func} }); 72 wasmEvalText('(module (func $t (import "mod" "func") (param i32) (result i32)))', { mod: {func} }); 73 wasmEvalText('(module (func $t (import "mod" "func") (param i32)))', { mod: {func} }); 74 75 assertErrorMessage(() => wasmEvalText('(module (func $t (import "mod" "func") (type)))', { mod: {func} }), SyntaxError, parsingError); 76 wasmEvalText('(module (type $t (func)) (func $t (import "mod" "func") (type $t)))', { mod: {func} }); 77 78 assertErrorMessage(() => wasmEvalText('(module (func $t (export))))'), SyntaxError, parsingError); 79 wasmEvalText('(module (func (export "f")))'); 80 wasmEvalText('(module (func $f (export "f")))'); 81 wasmEvalText('(module (func $f (export "f") (param i32) (result i32) (i32.add (local.get 0) (i32.const 42))))'); 82 83 assertErrorMessage(() => wasmEvalText(` 84 (module 85 (type $tf (func (param i32) (result i32))) 86 (func (import "mod" "a") (type $tf)) 87 (func (export "f1")) 88 (func (import "mod" "b") (type $tf)) 89 (func (export "f2")) 90 ) 91 `), SyntaxError, /import after function/); 92 93 // Globals. 94 assertErrorMessage(() => wasmEvalText('(module (global $t (export)))'), SyntaxError, parsingError); 95 assertErrorMessage(() => wasmEvalText('(module (global $t (export "g")))'), SyntaxError, parsingError); 96 assertErrorMessage(() => wasmEvalText('(module (global $t (export "g") i32))'), WebAssembly.CompileError, /popping value/); 97 wasmEvalText('(module (global $t (export "g") i32 (i32.const 42)))'); 98 99 assertErrorMessage(() => wasmEvalText('(module (global $t (import) i32))'), SyntaxError, parsingError); 100 assertErrorMessage(() => wasmEvalText('(module (global $t (import "mod" "field")))'), SyntaxError, parsingError); 101 assertErrorMessage(() => wasmEvalText('(module (global $t (import "mod" "field")) i32 (i32.const 42))'), SyntaxError, parsingError); 102 wasmEvalText('(module (global $t (import "mod" "field") i32))', { mod: {field: 42} }); 103 104 assertErrorMessage(() => wasmEvalText(` 105 (module 106 (global (import "mod" "a") i32) 107 (global (export "f1") i32 (i32.const 42)) 108 (global (import "mod" "b") i32) 109 ) 110 `), SyntaxError, /import after global/); 111 112 // Memory. 113 assertErrorMessage(() => wasmEvalText('(module (memory (export)))'), SyntaxError, parsingError); 114 assertErrorMessage(() => wasmEvalText('(module (memory (export "g")))'), SyntaxError, parsingError); 115 wasmEvalText('(module (memory $t (export "g") 0))'); 116 117 const mem = new WebAssembly.Memory({ initial: 1 }); 118 assertErrorMessage(() => wasmEvalText('(module (memory $t (import) 1))'), SyntaxError, parsingError); 119 assertErrorMessage(() => wasmEvalText('(module (memory $t (import "mod" "field")))'), SyntaxError, parsingError); 120 wasmEvalText('(module (memory $t (import "mod" "field") 1))', { mod: {field: mem} }); 121 122 // Note: the s-expression text format is temporary, this file is mostly just to 123 // hold basic error smoke tests.