inline-asm 0.4.0.0 → 0.4.0.1
raw patch · 3 files changed
+14/−8 lines, 3 files
Files
- ChangeLog.md +4/−0
- inline-asm.cabal +2/−2
- src/Language/Asm/Inline/QQ.hs +8/−6
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