packages feed

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 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.