Source code
Revision control
Copy as Markdown
Other Tools
wasmValidateText(`
(module
(func (result i32)
(i32.add
(block (result i32 i32)
(i32.const 32)
(i32.const 10)))))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32) (i32.const 10)
(block (param i32 i32) (result i32 i32))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(block (param i32) (result i32 i32)
(i32.const 10))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.add
(loop (result i32 i32)
(i32.const 32)
(i32.const 10)))))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32) (i32.const 10)
(loop (param i32 i32) (result i32 i32))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(loop (param i32) (result i32 i32)
(i32.const 10))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.add
(block (result i32 i32)
(i32.const 32)
(i32.const 10)
(br 0)))))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(block (param i32 i32) (result i32 i32)
(br 0))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(block (param i32) (result i32 i32)
(i32.const 10)
(br 0))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.add
(block (result i32 i32)
(i32.const 32)
(i32.const 10)
(block (param i32 i32) (result i32 i32)
(br 1))))))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(block (param i32 i32) (result i32 i32)
(block (param i32 i32) (result i32 i32)
(br 1)))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(block (param i32 i32) (result i32 i32)
(block (param i32 i32) (result i32 i32)
(br 0)))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(block (param i32) (result i32 i32)
(i32.const 10)
(block (param i32 i32) (result i32 i32)
(br 1)))
(i32.add)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(i32.const 1)
(if (param i32 i32) (result i32)
(then (i32.add))
(else (i32.sub)))))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(i32.const 1)
(if (param i32 i32) (result i32 i32)
(then
(drop)
(drop)
(i32.const 10)
(i32.const 32)))
(i32.sub)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(i32.const 1)
(if (param i32 i32) (result i32 i32)
(then (return)))
(i32.sub)))`);
wasmValidateText(`
(module
(func (result i32)
(i32.const 32)
(i32.const 10)
(i32.const 1)
(if (param i32 i32) (result i32 i32)
(then)
(else (return)))
(i32.sub)))`);
wasmValidateText(`
(module
(func (result i32)
(local $i i32)
(i32.const 0) ;; sum
(i32.const 10) ;; i
(loop $loop (param i32 i32) (result i32)
(local.tee $i)
(i32.add) ;; sum = i + sum
(i32.sub (local.get $i) (i32.const 1))
(local.tee $i)
(local.get $i)
(br_if $loop (i32.eqz))
(drop))))`);
// Tests the encoding: with more than 64 function types, the block type encoded
// as an uleb will create a confusion with the valtype; an sleb is required.
wasmValidateText(`
(module
${(function () {
s = "";
for ( let i=0; i < 64; i++ ) {
let t = [];
for ( let j=0; j < 6; j++ )
t.push(i & (1 << j) ? "i32" : "f32");
s += "(func (param " + t.join(" ") + "))\n";
}
return s;
})()}
(func (result i32)
(i32.add
(block (result i32 i32)
(i32.const 32)
(i32.const 10)))))`);
wasmValidateText(`
(module
(func (result i32)
(block $B (result i32 i32)
(br $B (i32.const 1) (i32.const 2))
(i32.const 0x1337))
(drop)))`);
wasmValidateText(`
(module
(func (result i32)
(block $B (result i32 i32)
(i32.const 1)
(br $B (i32.const 2))
(i32.const 0x1337))
(drop)))`);
wasmValidateText(`
(module
(func (result i32)
(block $B (result i32 i32)
(i32.const 1)
(i32.const 2)
(br $B)
(i32.const 0x1337))
(drop)))`);
wasmValidateText(`
(module
(func (param $cond i32) (result i32)
(block $B (result i32 i32)
(br_if $B (i32.const 1) (i32.const 2) (local.get $cond)))
(drop)))`);
wasmValidateText(`
(module
(func (param $cond i32) (result i32)
(block $B (result i32 i32)
(i32.const 1)
(br_if $B (i32.const 2) (local.get $cond)))
(drop)))`);
wasmValidateText(`
(module
(func (param $cond i32) (result i32)
(block $B (result i32 i32)
(i32.const 1)
(i32.const 2)
(br_if $B (local.get $cond)))
(drop)))`);
wasmValidateText(`
(module
(func (param $cond i32) (result i32)
(block $B (result i32 i32)
(i32.const 1)
(i32.const 2)
(local.get $cond)
(br_if $B))
(drop)))`);
wasmValidateText(`
(module
(func (param $index i32) (result i32)
(block $OUT (result i32)
(block $B1 (result i32 i32)
(block $B2 (result i32 i32)
(block $B3 (result i32 i32)
(br_table $B1 $B2 $B3 (i32.const 1) (i32.const 2) (local.get $index)))
(br $OUT (i32.add)))
(br $OUT (i32.sub)))
(br $OUT (i32.mul)))))`);