blob: a5ae3a826a4b202a6343e19331a3c1dc464d7e2b [file] [edit]
;;; TOOL: run-wasm-decompile
(module
(import "ns" "fi" (func))
(import "ns" "g3" (global i32))
(import "ns" "tab3" (table 0 12 funcref))
;; (import "ns" "m1" (memory 1)) ;; Can test only 1 at a time :(
(memory (export "m2") 1)
(global $g1 (mut i32) (i32.const 10))
(global (export "g2") (mut i32) (i32.const 11))
(table $tab1 0 10 funcref)
(table (export "tab2") 0 11 funcref)
(data 0 (offset (i32.const 0)) "Hello, World!\n\00")
(data 0 (offset (i32.const 100)) "abcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyz")
(data 0 (offset (i32.const 200)) "hi") ;; Too short for data derived name
(data 0 (offset (i32.const 300)) "Hello, World!\n\00") ;; Duplicate.
(func $f (param i32 i32) (result i32) (local i64 f32 f64)
i64.const 8
set_local 2
f32.const 6.0
set_local 3
f64.const 7.0
tee_local 4
f64.const 10.0
f64.lt
if
i32.const 1
i32.const 2
i32.load offset=3 align=1
i32.const 5
i32.add
i32.store offset=4
end
get_local 0
get_global $g1
i32.add
i32.const 9
call $f
drop
loop
block
i32.const 0
if (result i32)
i32.const 1
else
i32.const 2
end
br_if 0
br 1
end
i32.const 1
br_if 0
end
i32.const 1
i32.const 2
i32.const 1
i32.const 1
i32.eq
select
drop
block
block
block
block
block
local.get 0
br_table 3 2 1 0 4
unreachable
end
i32.const 100
return
end
i32.const 101
return
end
i32.const 102
return
end
i32.const 103
return
end
i32.const 104
drop
i32.const 1
block (param i32) ;; block with input
br_if 0
end
block (result i32) ;; block as an exp.
i32.const 2
i32.const 0
br_if 0
drop
i32.const 3
end
set_local 0
nop
ref.null func
ref.is_null
drop
i32.const 0 ;; fi
call_indirect
i32.const 0
)
(func $g (param) (result) (local i32)
;; This is rare, but requires special handling: uses of local outside scope
;; of first definition.
loop
i32.const 1
tee_local 0
br_if 0
end
get_local 0
drop
)
;; LLD outputs a name section with de-mangled C++ function signatures as names,
;; so have to make sure special chars get removed.
(func (export "void signature-&<>(int a)") (param) (result))
(func (export "void signature-&[](int a)") (param) (result))
(func $not-exported (param) (result))
(export "f" (func $f))
)
(;; STDOUT ;;;
export memory m2(initial: 1, max: 0);
import global ns_g3:int;
global g_b:int = 10;
export global g2:int = 11;
import table ns_tab3:funcref;
table T_b:funcref(min: 0, max: 10);
export table tab2:funcref(min: 0, max: 11);
data d_HelloWorld(offset: 0) = "Hello, World!\0a\00";
data d_abcdefghijklmnoqrstuvwxyzabc(offset: 100) =
"abcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstu"
"vwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmno"
"qrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghij"
"klmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoqrstuvwxyz";
data d_c(offset: 200) = "hi";
data d_d(offset: 300) = "Hello, World!\0a\00";
import function ns_fi();
export function f(a:int, b:int):int {
var c:long = 8L;
var d:float = 6.0f;
var e:double = 7.0;
if (e < 10.0) { d_HelloWorld[5@4]:int = d_HelloWorld[5]:int@1 + 5 }
f(a + g_b, 9);
loop L_b {
if (if (0) { 1 } else { 2 }) goto B_c;
continue L_b;
label B_c:
if (1) continue L_b;
}
select_if(1, 2, 1 == 1);
br_table[B_f, B_g, B_h, B_i, ..B_e](a);
unreachable;
label B_i:
return 100;
label B_h:
return 101;
label B_g:
return 102;
label B_f:
return 103;
label B_e:
104;
if (1) goto B_j;
label B_j:
a = {
2;
if (0) goto B_k;
3;
label B_k:
}
nop;
is_null(null);
call_indirect(0);
return 0;
}
function f_c() {
var a:int;
loop L_a {
a = 1;
if (a) continue L_a;
}
a;
}
function signature() {
}
function signature_1() {
}
function f_f() {
}
;;; STDOUT ;;)