- Notifications
You must be signed in to change notification settings - Fork 818
Closed
Description
I'm trying to use the experimental wat parser wasm::WATParser::parseModule()
in my project. It read in the following wat:
(module (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32 i32 i32 i32) (result i32))) (type $3 (func (result i32))) (import "om" "omg" (global $impg f32)) (import "wasi_snapshot_preview1" "proc_exit" (func $fimport$0 (param i32))) (import "wasi_snapshot_preview1" "fd_write" (func $fimport$1 (param i32 i32 i32 i32) (result i32))) (import "om" "omf" (func $impf)) (global $global$0 (mut i32) (i32.const 66592)) (global $g i64 (i64.const 100000)) (memory $0 256 256) (data $0 (i32.const 1024) "hello world!\n") (table $0 2 2 funcref) (elem $0 (i32.const 1) $0) (export "memory" (memory $0)) (export "__indirect_function_table" (table $0)) (export "_start" (func $1)) (export "stackSave" (func $2)) (export "stackRestore" (func $3)) (export "expg" (global $g)) (func $0 ) (func $1 (local $0 i32) (local $1 i32) global.get $global$0 i32.const 16 i32.sub local.tee $0 global.set $global$0 local.get $0 i32.const 13 i32.store offset=12 local.get $0 i32.const 1024 i32.store offset=8 i32.const 1 local.get $0 i32.const 8 i32.add i32.const 1 local.get $0 i32.const 4 i32.add call $fimport$1 local.tee $1 if i32.const 1040 local.get $1 i32.store end local.get $0 i32.load offset=4 drop local.get $0 i32.const 16 i32.add global.set $global$0 i32.const 0 call $fimport$0 unreachable ) (func $2 (result i32) global.get $global$0 ) (func $3 (param $0 i32) local.get $0 global.set $global$0 ) (func $donothing (param i32) (result i32) local.get 0 i32.const 100000 i32.add ) (func $donothing2 (param i32) (result i32) local.get 0 global.get $g i32.wrap_i64 i32.add ) )
There are four explicit type definitions as above, and two implicit type (func (param i32) (result i32))
for the last $donothing()
and $donothing2()
functions.
After the parse I called BinaryenModulePrint()
and the following wat showed up:
(module (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32) (result i32))) (type $2 (func (param i32 i32 i32 i32) (result i32))) (type $3 (func (result i32))) (import "om" "omg" (global $impg f32)) (import "wasi_snapshot_preview1" "proc_exit" (func $fimport$0 (param i32))) (import "wasi_snapshot_preview1" "fd_write" (func $fimport$1 (param i32 i32 i32 i32) (result i32))) (import "om" "omf" (func $impf)) (global $global$0 (mut i32) (i32.const 66592)) (global $g i64 (i64.const 100000)) (memory $0 256 256) (data $0 (i32.const 1024) "hello world!\n") (table $0 2 2 funcref) (elem $0 (i32.const 1) $0) (export "memory" (memory $0)) (export "__indirect_function_table" (table $0)) (export "_start" (func $1)) (export "stackSave" (func $2)) (export "stackRestore" (func $3)) (export "expg" (global $g)) (func $0 (; has Stack IR ;) (nop) ) (func $1 (; has Stack IR ;) (local $0 i32) (local $1 i32) (global.set $global$0 (local.tee $0 (i32.sub (global.get $global$0) (i32.const 16) ) ) ) (i32.store offset=12 (local.get $0) (i32.const 13) ) (i32.store offset=8 (local.get $0) (i32.const 1024) ) (if (local.tee $1 (call $fimport$1 (i32.const 1) (i32.add (local.get $0) (i32.const 8) ) (i32.const 1) (i32.add (local.get $0) (i32.const 4) ) ) ) (then (i32.store (i32.const 1040) (local.get $1) ) ) ) (drop (i32.load offset=4 (local.get $0) ) ) (global.set $global$0 (i32.add (local.get $0) (i32.const 16) ) ) (call $fimport$0 (i32.const 0) ) (unreachable) ) (func $2 (; has Stack IR ;) (result i32) (global.get $global$0) ) (func $3 (; has Stack IR ;) (param $0 i32) (global.set $global$0 (local.get $0) ) ) (func $donothing (; has Stack IR ;) (param $0 i32) (result i32) (i32.add (local.get $0) (i32.const 100000) ) ) (func $donothing2 (; has Stack IR ;) (param $0 i32) (result i32) (i32.add (local.get $0) (i32.wrap_i64 (global.get $g) ) ) ) )
So type name duplicated and when I wanted to read in the generated wat again, I got an error: duplicate element name
. I want to figure out if I misused the new parser or it is a bug.
Metadata
Metadata
Assignees
Labels
No labels