packages feed

inline-asm 0.4.0.0 → 0.4.0.1

raw patch · 3 files changed

+14/−8 lines, 3 files

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for inline-asm +## v0.4.0.1++* Fix expression parser not parsing some expressions it definitely should parse.+ ## v0.4.0.0  * Add helpers (`unroll`/`unrolls`) for compile-time loop unrolling.
inline-asm.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: f683958e05ac6942c4577cd9ff973a4bb40eed75491ff79902ed77b42389b28a+-- hash: 1c3cded6588b9b5609e74d24e1b430bda30bb591a276e05d7908a41a23636c86  name:           inline-asm-version:        0.4.0.0+version:        0.4.0.1 synopsis:       Inline some Assembly in ur Haskell! description:    Please see the README on GitHub at <https://github.com/0xd34df00d/inline-asm#readme> category:       FFI
src/Language/Asm/Inline/QQ.hs view
@@ -58,17 +58,19 @@   mempty = AsmQQCode ""  -parseExpr :: MonadError String m => String -> Int -> String -> m Int-parseExpr var num inputStr = liftEither $ first showParseError $ runParser (expr <* eof) "" inputStr+parseExpr :: MonadError String m => String -> String -> m (Int -> Int)+parseExpr var inputStr = liftEither $ first showParseError $ runParser (expr <* eof) "" inputStr   where     expr = makeExprParser term table <?> "expr"-    term = parens expr <|> ML.signed lexSpace (string "0x" *> ML.hexadecimal <|> ML.decimal) <|> (lexeme (string var) $> num) <?> "term"+    term = parens expr+       <|> lexeme (ML.signed lexSpace (string "0x" *> ML.hexadecimal <|> ML.decimal) <&> const)+       <|> lexeme (string var $> id)     table = [ [ binary "*" (*) ]             , [ binary "+" (+)               , binary "-" (-)               ]             ]-    binary name fun = CE.InfixL $ symbol name $> fun+    binary name fun = CE.InfixL $ symbol name $> (\l r n -> l n `fun` r n)     symbol = ML.symbol lexSpace     parens = between (symbol "(") (symbol ")")     lexeme = ML.lexeme lexSpace@@ -79,8 +81,8 @@                             Left err -> error err                             Right codes -> mconcat $ getZipList codes   where-    sub str = case traverse (\n -> parseExpr var n str) ints of-                   Right results -> show <$> ZipList results+    sub str = case parseExpr var str of+                   Right fun -> ZipList $ show . fun <$> ints                    Left _ -> pure $ "{" <> str <> "}"  unrolls :: String -> [Int] -> [AsmQQCode] -> AsmQQCode