Programs are now actually compiled all the way through.

This commit is contained in:
Samuel Hammersberg 2023-03-24 18:46:12 +01:00
parent e0c78f5783
commit e500c70529
3 changed files with 29 additions and 36 deletions

View file

@ -51,6 +51,7 @@ executable language
, hspec , hspec
, QuickCheck , QuickCheck
, directory , directory
, process
default-language: GHC2021 default-language: GHC2021
@ -83,5 +84,6 @@ Test-suite language-testsuite
, hspec , hspec
, QuickCheck , QuickCheck
, process , process
, bytestring
default-language: GHC2021 default-language: GHC2021

View file

@ -1,4 +1,4 @@
module Compiler where module Compiler (compile) where
import Grammar.ErrM (Err) import Grammar.ErrM (Err)
import System.Exit (exitFailure, exitSuccess) import System.Exit (exitFailure, exitSuccess)
@ -13,15 +13,10 @@ import System.Process.Extra (CreateProcess (..),
--spawnWait s = spawnCommand s >>= \s >>= waitForProcess --spawnWait s = spawnCommand s >>= \s >>= waitForProcess
optimize :: String -> IO String optimize :: String -> IO String
optimize prg = do optimize = readCreateProcess (shell "opt --O3 -S")
result <- readCreateProcess (shell "opt --O3") prg
putStrLn result
compileClang :: String -> IO String
compileClang = readCreateProcess (shell "clang -x ir -o hello_world -")
-- (Just hin, Just hout, _, _) <- createProcess (proc "opt" ["--O3"]){ std_in = CreatePipe, std_out = CreatePipe } compile :: String -> IO String
-- hSetBuffering hin NoBuffering compile s = optimize s >>= compileClang
-- hPutStrLn hin prg
-- hFlush hin
--bytes <- hGetContents hout
--putStrLn bytes
pure ""

View file

@ -2,32 +2,29 @@
module Main where module Main where
import Codegen.Codegen (generateCode) import Codegen.Codegen (generateCode)
import Data.Bool (bool) import Data.Bool (bool)
import GHC.IO.Handle.Text (hPutStrLn) import GHC.IO.Handle.Text (hPutStrLn)
import Grammar.ErrM (Err) import Grammar.ErrM (Err)
import Grammar.Par (myLexer, pProgram) import Grammar.Par (myLexer, pProgram)
import Grammar.Print (printTree) import Grammar.Print (printTree)
import Monomorphizer.Monomorphizer (monomorphize) import Monomorphizer.Monomorphizer (monomorphize)
import Control.Monad (when) import Control.Monad (when)
import Data.List.Extra (isSuffixOf) import Data.List.Extra (isSuffixOf)
import Compiler (optimize) import Compiler (compile)
import Renamer.Renamer (rename) import Renamer.Renamer (rename)
import System.Directory ( import System.Directory (createDirectory, doesPathExist,
createDirectory, getDirectoryContents,
doesPathExist, removeDirectoryRecursive,
getDirectoryContents, setCurrentDirectory)
removeDirectoryRecursive, import System.Environment (getArgs)
setCurrentDirectory, import System.Exit (exitFailure, exitSuccess)
) import System.IO (stderr)
import System.Environment (getArgs) import System.Process.Extra (spawnCommand, waitForProcess)
import System.Exit (exitFailure, exitSuccess) import TypeChecker.TypeChecker (typecheck)
import System.IO (stderr)
import System.Process.Extra (spawnCommand, waitForProcess)
import TypeChecker.TypeChecker (typecheck)
main :: IO () main :: IO ()
main = main =
@ -67,8 +64,7 @@ main' debug s = do
writeFile "output/llvm.ll" generatedCode writeFile "output/llvm.ll" generatedCode
debugDotViz debugDotViz
optimize generatedCode compile generatedCode
-- interpred <- fromInterpreterErr $ interpret lifted -- interpred <- fromInterpreterErr $ interpret lifted
-- putStrLn "\n-- interpret" -- putStrLn "\n-- interpret"
-- print interpred -- print interpred