diff --git a/src/Language/Wasm/Interpreter.hs b/src/Language/Wasm/Interpreter.hs index dcdde2f..93be382 100644 --- a/src/Language/Wasm/Interpreter.hs +++ b/src/Language/Wasm/Interpreter.hs @@ -467,8 +467,9 @@ calcInstance (Store fs ts ms gs es ds) imps mod = do tableAddr <- case idx of ExternTable tableAddr -> return tableAddr _ -> throwError "incompatible import type" - let TableInstance { t = TableType lim et' } = ts ! tableAddr - if limitMatch lim limit && et == et' + let TableInstance { t = TableType (Limit _ max) et', items } = ts ! tableAddr + len <- MVector.length <$> (liftIO $ readIORef items) + if limitMatch (Limit (fromIntegral len) max) limit && et == et' then return idx else throwError "incompatible import type" diff --git a/tests/Test.hs b/tests/Test.hs index 214e939..5412560 100644 --- a/tests/Test.hs +++ b/tests/Test.hs @@ -19,7 +19,7 @@ main = do files <- filter (List.isSuffixOf ".wast") <$> Directory.listDirectory "tests/spec" - -- let files = ["simd_i16x8_q15mulr_sat_s.wast"] + -- let files = ["table_grow.wast"] scriptTestCases <- (`mapM` files) $ \file -> do test <- LBS.readFile ("tests/spec/" ++ file) return $ testCase file $ do diff --git a/wasm.cabal b/wasm.cabal index d730767..2a683cc 100644 --- a/wasm.cabal +++ b/wasm.cabal @@ -56,7 +56,7 @@ library , happy:happy >=1.9.4 && < 1.21 build-depends: array >=0.5 && < 0.6 - , base >=4.6 && < 5 + , base >=4.11 && < 5 , bytestring >=0.10 && < 0.12 , cereal >=0.5 && < 0.6 , containers >=0.5 && < 0.7