ddc-driver-0.4.1.1: DDC/Driver/Stage/Lite.hs
module DDC.Driver.Stage.Lite
( stageLiteLoad
, stageLiteOpt
, stageLiteToSalt)
where
import DDC.Driver.Dump
import DDC.Driver.Config
import DDC.Interface.Source
import DDC.Build.Builder
import DDC.Build.Pipeline
import DDC.Core.Transform.Namify
import DDC.Base.Pretty
import qualified DDC.Core.Salt.Name as Salt
import qualified DDC.Build.Language.Lite as Lite
import qualified DDC.Core.Lite as Lite
import qualified DDC.Core.Check as C
import qualified DDC.Core.Simplifier.Recipe as S
---------------------------------------------------------------------------------------------------
-- | Load and type check Core Lite.
stageLiteLoad
:: Config -> Source
-> [PipeCore () Lite.Name]
-> PipeText Lite.Name Lite.Error
stageLiteLoad config source pipesLite
= PipeTextLoadCore Lite.fragment
C.Recon (dump config source "dump.lite-check.txt")
[ PipeCoreReannotate (const ())
( PipeCoreOutput pprDefaultMode
(dump config source "dump.lite-load.dcl")
: pipesLite ) ]
---------------------------------------------------------------------------------------------------
-- | Optimise Core Lite.
stageLiteOpt
:: Config -> Source
-> [PipeCore () Lite.Name]
-> PipeCore () Lite.Name
stageLiteOpt config source pipes
= PipeCoreSimplify
Lite.fragment
(0 :: Int)
(configSimplLite config)
( PipeCoreOutput pprDefaultMode
(dump config source "dump.lite-opt.dcl")
: pipes)
---------------------------------------------------------------------------------------------------
-- | Convert Core Lite to Core Salt.
---
-- The Lite to Salt transform requires the program to be normalised,
-- and have type annotations.
stageLiteToSalt
:: Config -> Source
-> [PipeCore () Salt.Name]
-> PipeCore () Lite.Name
stageLiteToSalt config source pipesSalt
= PipeCoreSimplify Lite.fragment 0 normalizeLite
[ PipeCoreCheck Lite.fragment C.Recon SinkDiscard
[ PipeCoreOutput pprDefaultMode
(dump config source "dump.lite-normalized.dcl")
, PipeCoreAsLite
[ PipeLiteToSalt (buildSpec $ configBuilder config)
(configRuntime config)
( PipeCoreOutput pprDefaultMode
(dump config source "dump.salt.dcs")
: pipesSalt)]]]
where normalizeLite
= S.anormalize
(makeNamifier Lite.freshT)
(makeNamifier Lite.freshX)