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
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 ) ]
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)
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)