;; Test tokenization
(assert_malformed
(module quote "(func (drop (i32.const0)))")
"unknown operator"
)
(assert_malformed
(module quote "(func br 0drop)")
"unknown operator"
)
;; Tokens can be delimited by parentheses
(module
(func(nop))
)
(module
(func (nop)nop)
)
(module
(func nop(nop))
)
(module
(func(nop)(nop))
)
(module
(func $f(nop))
)
(module
(func br 0(nop))
)
(module
(table 1 funcref)
(func)
(elem (i32.const 0)0)
)
(module
(table 1 funcref)
(func $f)
(elem (i32.const 0)$f)
)
(module
(memory 1)
(data (i32.const 0)"a")
)
(module
(import "spectest" "print"(func))
)
;; Tokens can be delimited by comments
(module
(func;;bla
)
)
(module
(func (nop);;bla
)
)
(module
(func nop;;bla
)
)
(module
(func $f;;bla
)
)
(module
(func br 0;;bla
)
)
(module
(data "a";;bla
)
)
;; Space required between symbols and non-parenthesis tokens
(module
(func (block $l (i32.const 0) (br_table 0 $l)))
)
(assert_malformed
(module quote
"(func (block $l (i32.const 0) (br_table 0$l)))"
)
"unknown operator"
)
(module
(func (block $l (i32.const 0) (br_table $l 0)))
)
(assert_malformed
(module quote
"(func (block $l (i32.const 0) (br_table $l0)))"
)
"unknown label"
)
(module
(func (block $l (i32.const 0) (br_table $l $l)))
)
(assert_malformed
(module quote
"(func (block $l (i32.const 0) (br_table $l$l)))"
)
"unknown label"
)
(module
(func (block $l0 (i32.const 0) (br_table $l0)))
)
(module
(func (block $l$l (i32.const 0) (br_table $l$l)))
)
;; Space required between strings and non-parenthesis tokens
(module
(data "a")
)
(assert_malformed
(module quote
"(data\"a\")"
)
"unknown operator"
)
(module
(data $l "a")
)
(assert_malformed
(module quote
"(data $l\"a\")"
)
"unknown operator"
)
(module
(data $l " a")
)
(assert_malformed
(module quote
"(data $l\" a\")"
)
"unknown operator"
)
(module
(data $l "a ")
)
(assert_malformed
(module quote
"(data $l\"a \")"
)
"unknown operator"
)
(module
(data $l "a " "b")
)
(assert_malformed
(module quote
"(data $l\"a \"\"b\")"
)
"unknown operator"
)
(module
(data $l "")
)
(assert_malformed
(module quote
"(data $l\"\")"
)
"unknown operator"
)
(module
(data $l " ")
)
(assert_malformed
(module quote
"(data $l\" \")"
)
"unknown operator"
)
(module
(data $l " ")
)
(assert_malformed
(module quote
"(data $l\" \")"
)
"unknown operator"
)
(module
(data "a" "b")
)
(assert_malformed
(module quote
"(data \"a\"\"b\")"
)
"unknown operator"
)
(module
(data "a" " b")
)
(assert_malformed
(module quote
"(data \"a\"\" b\")"
)
"unknown operator"
)
(module
(data "a " "b")
)
(assert_malformed
(module quote
"(data \"a \"\"b\")"
)
"unknown operator"
)
(module
(data "" "")
)
(assert_malformed
(module quote
"(data \"\"\"\")"
)
"unknown operator"
)
(module
(data "" " ")
)
(assert_malformed
(module quote
"(data \"\"\" \")"
)
"unknown operator"
)
(module
(data " " "")
)
(assert_malformed
(module quote
"(data \" \"\"\")"
)
"unknown operator"
)
(assert_malformed
(module quote
"(func \"a\"x)"
)
"unknown operator"
)
(assert_malformed
(module quote
"(func \"a\"0)"
)
"unknown operator"
)
(assert_malformed
(module quote
"(func 0\"a\")"
)
"unknown operator"
)
(assert_malformed
(module quote
"(func \"a\"$x)"
)
"unknown operator"
)