X-Git-Url: https://git.lukelau.me/?p=kaleidoscope-hs-old.git;a=blobdiff_plain;f=Main.hs;h=8f4610af8b249920f0b03e67091804ad70c34faa;hp=37c6cbc788a9849ef721995f58b9c1191ba0385d;hb=98897ccc44795260735bafc5124e0e14052247f2;hpb=4dc076eed8f88df110e2682bb24e208d19816790 diff --git a/Main.hs b/Main.hs index 37c6cbc..8f4610a 100644 --- 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