projects
/
kaleidoscope-hs-old.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for more binary ops
[kaleidoscope-hs-old.git]
/
Main.hs
diff --git
a/Main.hs
b/Main.hs
index 37c6cbc788a9849ef721995f58b9c1191ba0385d..8f4610af8b249920f0b03e67091804ad70c34faa 100644
(file)
--- a/
Main.hs
+++ b/
Main.hs
@@
-5,6
+5,7
@@
module Main where
import qualified AST
import qualified Data.Text.Lazy.IO as Text
import Foreign.Ptr
import qualified AST
import qualified Data.Text.Lazy.IO as Text
import Foreign.Ptr
+import System.IO
import LLVM.Context
import LLVM.CodeModel
import LLVM.ExecutionEngine
import LLVM.Context
import LLVM.CodeModel
import LLVM.ExecutionEngine
@@
-23,7
+24,7
@@
main = do
ast <- read <$> getContents
let mdl = buildModule "main" $
function "expr" [] float $ \_ -> build ast >>= ret
ast <- read <$> getContents
let mdl = buildModule "main" $
function "expr" [] float $ \_ -> build ast >>= ret
- Text.
putStrLn
(ppllvm mdl)
+ Text.
hPutStrLn stderr
(ppllvm mdl)
withContext $ \ctx ->
withMCJIT ctx Nothing Nothing Nothing Nothing $ \mcjit ->
withModuleFromAST ctx mdl $ \mdl' ->
withContext $ \ctx ->
withMCJIT ctx Nothing Nothing Nothing Nothing $ \mcjit ->
withModuleFromAST ctx mdl $ \mdl' ->
@@
-34,7
+35,11
@@
main = do
build :: AST.Expr -> IRBuilderT ModuleBuilder Operand
build (AST.Num a) = pure $ ConstantOperand (Float (Single a))
build :: AST.Expr -> IRBuilderT ModuleBuilder Operand
build (AST.Num a) = pure $ ConstantOperand (Float (Single a))
-build (AST.
Add
a b) = do
+build (AST.
BinOp op
a b) = do
va <- build a
vb <- build b
va <- build a
vb <- build b
- fadd va vb
+ let instr = case op of
+ AST.Add -> fadd
+ AST.Sub -> fsub
+ AST.Mul -> fmul
+ instr va vb