ddc-tools 0.3.1.1 → 0.3.1.2
raw patch · 5 files changed
+101/−30 lines, 5 filesdep ~ddc-driver
Dependency ranges changed: ddc-driver
Files
- ddc-tools.cabal +4/−5
- src/ddc-main/DDC/Main/Help.hs +1/−1
- src/ddc-main/DDC/Main/OptLevels.hs +79/−8
- src/ddc-main/Main.hs +16/−15
- src/ddci-core/DDCI/Core/Interface/Interactive.hs +1/−1
ddc-tools.cabal view
@@ -1,5 +1,5 @@ Name: ddc-tools-Version: 0.3.1.1+Version: 0.3.1.2 License: MIT License-file: LICENSE Author: The Disciplined Disciple Compiler Strike Force@@ -9,7 +9,6 @@ Stability: experimental Category: Compilers/Interpreters Homepage: http://disciple.ouroborus.net-Bug-reports: disciple@ouroborus.net Synopsis: Disciplined Disciple Compiler command line tools. Description: Disciplined Disciple Compiler command line tools. @@ -51,8 +50,8 @@ ddc-core-salt == 0.3.1.*, ddc-core-llvm == 0.3.1.*, ddc-build == 0.3.1.*,- ddc-driver == 0.3.1.*,- ddc-code == 0.3.1.*+ ddc-code == 0.3.1.*,+ ddc-driver >= 0.3.1.2 && < 0.3.2 Main-is: Main.hs@@ -86,7 +85,7 @@ ddc-core-salt == 0.3.1.*, ddc-core-llvm == 0.3.1.*, ddc-build == 0.3.1.*,- ddc-driver == 0.3.1.*+ ddc-driver >= 0.3.1.2 && < 0.3.2 Main-is: Main.hs
src/ddc-main/DDC/Main/Help.hs view
@@ -3,7 +3,7 @@ -- | The version identifier string. version :: String-version = "The Disciplined Disciple Compiler, version 0.3.0"+version = "The Disciplined Disciple Compiler, version 0.3.1" -- | What to print when we have no input files.
src/ddc-main/DDC/Main/OptLevels.hs view
@@ -16,12 +16,15 @@ import DDC.Core.Simplifier (Simplifier) import System.FilePath import Control.Monad+import Data.List import Data.Monoid import Data.Maybe+import qualified DDC.Core.Fragment as C import qualified DDC.Core.Simplifier as S import qualified DDC.Core.Simplifier.Recipe as S import qualified DDC.Core.Lite as Lite import qualified DDC.Core.Salt as Salt+import qualified DDC.Core.Salt.Runtime as Salt import qualified DDC.Build.Language.Salt as Salt import qualified DDC.Build.Language.Lite as Lite import qualified Data.Map as Map@@ -37,24 +40,27 @@ -- getSimplLiteOfConfig :: Config -> Builder + -> Maybe FilePath -- ^ path of current module -> IO (Simplifier Int () Lite.Name) -getSimplLiteOfConfig config builder+getSimplLiteOfConfig config builder filePath = case configOptLevelLite config of OptLevel0 -> opt0_lite config- OptLevel1 -> opt1_lite config builder+ OptLevel1 -> opt1_lite config builder filePath -- | Get the simplifier for Salt code from the config. -- getSimplSaltOfConfig :: Config -> Builder+ -> Salt.Config+ -> Maybe FilePath -- ^ path of current module -> IO (Simplifier Int () Salt.Name) -getSimplSaltOfConfig config builder+getSimplSaltOfConfig config builder runtimeConfig filePath = case configOptLevelSalt config of OptLevel0 -> opt0_salt config- OptLevel1 -> opt1_salt config builder+ OptLevel1 -> opt1_salt config builder runtimeConfig filePath -- Level 0 --------------------------------------------------------------------@@ -78,9 +84,10 @@ -- | Level 1 optimiser for Core Lite code. opt1_lite :: Config -> Builder+ -> Maybe FilePath -- ^ path of current module -> IO (Simplifier Int () Lite.Name) -opt1_lite config _builder+opt1_lite config _builder filePath = do -- Auto-inline basic numeric code. let inlineModulePaths@@ -110,8 +117,11 @@ rules <- mapM (\(m,file) -> cmdTryReadRules Lite.fragment (file ++ ".rules") m) $ inlineModules `zip` inlineModulePaths - let rules' = concat rules+ -- Load rules for target module as well+ modrules <- loadLiteRules filePath + let rules' = concat rules ++ modrules+ -- Simplifier to convert to a-normal form. let normalizeLite = S.anormalize@@ -132,9 +142,11 @@ -- | Level 1 optimiser for Core Salt code. opt1_salt :: Config -> Builder+ -> Salt.Config+ -> Maybe FilePath -- ^ path of current module -> IO (Simplifier Int () Salt.Name) -opt1_salt config builder+opt1_salt config builder runtimeConfig filePath = do -- Auto-inline the low-level code from the runtime system -- that constructs and destructs objects.@@ -168,9 +180,13 @@ -- Optionally load the rewrite rules for each 'with' module rules <- mapM (\(m,file) -> cmdTryReadRules Salt.fragment (file ++ ".rules") m) $ inlineModules `zip` inlineModulePaths- let rules' = concat rules + -- Load rules for target module as well+ modrules <- loadSaltRules builder runtimeConfig filePath + let rules' = concat rules ++ modrules++ -- Simplifier to convert to a-normal form. let normalizeSalt = S.anormalize@@ -185,4 +201,59 @@ <> S.bubble <> S.flatten <> normalizeSalt <> S.forward <> (S.Trans $ S.Rewrite rules'))+++-- | Load rules for main module+loadLiteRules+ :: Maybe FilePath+ -> IO (S.NamedRewriteRules () Lite.Name)++loadLiteRules (Just filePath)+ | isSuffixOf ".dcl" filePath+ = do -- Parse module to get exported fn types+ modu <- cmdReadModule' False Lite.fragment filePath+ case modu of+ Just mod' -> cmdTryReadRules Lite.fragment (filePath ++ ".rules")+ (reannotate (const ()) mod')+ Nothing -> return []++loadLiteRules _+ = return []+++-- | Load rules for main module+loadSaltRules+ :: Builder+ -> Salt.Config+ -> Maybe FilePath+ -> IO (S.NamedRewriteRules () Salt.Name)++loadSaltRules builder runtimeConfig (Just filePath)+ -- If the main module is a lite module, we need to load the lite then convert it to salt+ | isSuffixOf ".dcl" filePath+ = do modu <- cmdReadModule' False Lite.fragment filePath+ let path' = (reverse $ drop 3 $ reverse filePath) ++ "dcs.rules"+ case modu of+ Just mod' ->+ case Lite.saltOfLiteModule (buildSpec builder) + runtimeConfig+ (C.profilePrimDataDefs Lite.profile) + (C.profilePrimKinds Lite.profile)+ (C.profilePrimTypes Lite.profile)+ mod' + of Left _ -> return []+ Right mm' -> cmdTryReadRules Salt.fragment path'+ (reannotate (const ()) mm')++ Nothing -> return []++ | isSuffixOf ".dcs" filePath+ = do modu <- cmdReadModule' False Salt.fragment filePath+ case modu of+ Just mod' -> cmdTryReadRules Salt.fragment (filePath ++ ".rules") (reannotate (const ()) mod')+ Nothing -> return []++loadSaltRules _ _ _+ = return []+
src/ddc-main/Main.hs view
@@ -86,13 +86,13 @@ -- Compile a module to object code. ModeCompile filePath- -> do dconfig <- getDriverConfig config+ -> do dconfig <- getDriverConfig config (Just filePath) runError $ cmdCompile dconfig filePath -- Compile a module into an executable. ModeMake filePath- -> do dconfig <- getDriverConfig config+ -> do dconfig <- getDriverConfig config (Just filePath) runError $ cmdMake dconfig filePath @@ -109,7 +109,7 @@ -- Convert a module to Salt. ModeToSalt filePath -> do language <- languageFromFilePath filePath- dconfig <- getDriverConfig config+ dconfig <- getDriverConfig config (Just filePath) str <- readFile filePath runError $ cmdToSalt dconfig language (SourceFile filePath) str @@ -117,7 +117,7 @@ -- Convert a module to C ModeToC filePath -> do language <- languageFromFilePath filePath- dconfig <- getDriverConfig config+ dconfig <- getDriverConfig config (Just filePath) str <- readFile filePath runError $ cmdToC dconfig language (SourceFile filePath) str @@ -125,18 +125,18 @@ -- Convert a module to LLVM ModeToLLVM filePath -> do language <- languageFromFilePath filePath- dconfig <- getDriverConfig config+ dconfig <- getDriverConfig config (Just filePath) str <- readFile filePath runError $ cmdToLlvm dconfig language (SourceFile filePath) str -- Build the runtime and base libraries. ModeBaseBuild- -> do dconfig <- getDriverConfig config+ -> do dconfig <- getDriverConfig config Nothing runError $ cmdBaseBuild dconfig -- Print the external builder info for this platform. ModePrintBuilder- -> do dconfig <- getDriverConfig config+ -> do dconfig <- getDriverConfig config Nothing putStrLn $ renderIndent $ ppr (Driver.configBuilder dconfig) -- Print where the runtime and base libraries are installed.@@ -145,22 +145,23 @@ -- | Get the compile driver from the config.-getDriverConfig :: Config -> IO Driver.Config-getDriverConfig config+getDriverConfig :: Config -> Maybe FilePath -> IO Driver.Config+getDriverConfig config filePath = do Just builder <- determineDefaultBuilder (defaultBuilderConfig config)- simplLite <- getSimplLiteOfConfig config builder- simplSalt <- getSimplSaltOfConfig config builder+ let runtimeConfig+ = Runtime.Config+ { Runtime.configHeapSize = configRuntimeHeapSize config } + simplLite <- getSimplLiteOfConfig config builder filePath+ simplSalt <- getSimplSaltOfConfig config builder runtimeConfig filePath+ return $ Driver.Config { Driver.configDump = configDump config , Driver.configSimplLite = simplLite , Driver.configSimplSalt = simplSalt , Driver.configViaBackend = configViaBackend config - , Driver.configRuntime - = Runtime.Config- { Runtime.configHeapSize = configRuntimeHeapSize config }-+ , Driver.configRuntime = runtimeConfig , Driver.configBuilder = builder , Driver.configSuppressCoreImports = False , Driver.configSuppressHashImports = False
src/ddci-core/DDCI/Core/Interface/Interactive.hs view
@@ -14,7 +14,7 @@ -- | Run an interactive session, reading commands from the console. runInteractive :: IO () runInteractive- = do putStrLn "DDCi-core, version 0.3.0: http://disciple.ouroborus.net."+ = do putStrLn "DDCi-core, version 0.3.1: http://disciple.ouroborus.net." putStrLn "Type :help for help." -- Setup terminal mode.