X-Git-Url: https://git.lukelau.me/?p=kaleidoscope-hs-old.git;a=blobdiff_plain;f=Main.hs;fp=Main.hs;h=7a26601b60ab6ca070c604d893332a1bbd1a62ab;hp=0000000000000000000000000000000000000000;hb=3b388fc2dfc375b25dc2d263237d2c895e433a6e;hpb=a0b31174f4b7f6ac037dc4002c38cd61b09dabaa diff --git a/Main.hs b/Main.hs new file mode 100644 index 0000000..7a26601 --- /dev/null +++ b/Main.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Main where + +import qualified AST +import qualified Data.Text.Lazy.IO as Text +import LLVM.IRBuilder +import LLVM.AST.Constant +import LLVM.AST.Float +import LLVM.AST.Operand +import LLVM.AST.Type +import LLVM.Pretty + +main :: IO () +main = do + ast <- read <$> getContents + let mdl = buildModule "main" $ + function "expr" [] float $ \_ -> do + build ast + return () + Text.putStrLn (ppllvm mdl) + +build :: AST.Expr -> IRBuilderT ModuleBuilder Operand +build (AST.Num a) = pure $ ConstantOperand (Float (Single a)) +build (AST.Add a b) = do + va <- build a + vb <- build b + fadd va vb