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 System.IO
 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
-  Text.putStrLn (ppllvm mdl)
+  Text.hPutStrLn stderr (ppllvm 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.Add a b) = do
+build (AST.BinOp op a b) = do
   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