improve parsing error message

This commit is contained in:
Ilya Rezvov
2018-01-21 10:14:32 -08:00
parent c0992fee62
commit 91ceecb51e
4 changed files with 312 additions and 210 deletions
+1 -1
View File
@@ -13,5 +13,5 @@ import qualified Language.Wasm.Parser as Parser
main :: IO ()
main = do
file <- LBS.readFile "tests/samples/mod.wast"
print $ Parser.parseModule . map Lexer.tok <$> Lexer.scanner file
print $ Parser.parseModule <$> Lexer.scanner file
defaultMain $ testGroup "Test Suite" []
+93
View File
@@ -0,0 +1,93 @@
(module
(func $foo (result i32) (i32.const 0))
(func f
(i32.const 0)
(i32.const -2147483648)
(i32.const 4294967295)
(i32.const -0x80000000)
(i32.const 0xffffffff)
(i64.const 0)
(i64.const -9223372036854775808)
(i64.const 18446744073709551615)
(i64.const -0x8000000000000000)
(i64.const 0xffffffffffffffff)
)
(func $add (param $x f32) (param $y f32) (result f32) (f32.add (get_local $x) (get_local $y)))
(func $sub (param $x f32) (param $y f32) (result f32) (f32.sub (get_local $x) (get_local $y)))
(func $mul (param $x f32) (param $y f32) (result f32) (f32.mul (get_local $x) (get_local $y)))
(func $div (param $x f32) (param $y f32) (result f32) (f32.div (get_local $x) (get_local $y)))
(func $sqrt (param $x f32) (result f32) (f32.sqrt (get_local $x)))
(func $min (param $x f32) (param $y f32) (result f32) (f32.min (get_local $x) (get_local $y)))
(func $max (param $x f32) (param $y f32) (result f32) (f32.max (get_local $x) (get_local $y)))
(func $ceil (param $x f32) (result f32) (f32.ceil (get_local $x)))
(func $floor (param $x f32) (result f32) (f32.floor (get_local $x)))
(func $trunc (param $x f32) (result f32) (f32.trunc (get_local $x)))
(func $nearest (param $x f32) (result f32) (f32.nearest (get_local $x)))
(func $abs (param $x f32) (result f32) (f32.abs (get_local $x)))
(func $neg (param $x f32) (result f32) (f32.neg (get_local $x)))
(func $copysign (param $x f32) (param $y f32) (result f32) (f32.copysign (get_local $x) (get_local $y)))
(func f (param x i64) (result i64)
(if_else (i64.eq (get_local 0) (i64.const 0))
(i64.const 1)
(i64.mul (get_local 0) (call 0 (i64.sub (get_local 0) (i64.const 1))))
)
)
(func $fac-rec (param $n i64) (result i64)
(if_else (i64.eq (get_local $n) (i64.const 0))
(i64.const 1)
(i64.mul
(get_local $n)
(call $fac-rec (i64.sub (get_local $n) (i64.const 1)))
)
)
)
(func f (param a i64) (result i64)
(set_local 1 (get_local 0))
(set_local 2 (i64.const 1))
(block
(loop
(if_else
(i64.eq (get_local 1) (i64.const 0))
(br 1)
(block
(set_local 2 (i64.mul (get_local 1) (get_local 2)))
(set_local 1 (i64.sub (get_local 1) (i64.const 1)))
)
)
(br 0)
)
)
(return (get_local 2))
)
;; foo
(func f (param i64) (result i64)
(set_local 1 (get_local 0))
(set_local 2 (i64.const 1))
(block
(loop
(if_else
(i64.eq (get_local 1) (i64.const 0))
(br 1)
(block
(set_local 2 (i64.mul (get_local 1) (get_local 2)))
(set_local 1 (i64.sub (get_local 1) (i64.const 1)))
)
)
(br 0)
)
)
(return (get_local 2))
)
)