tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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.