mirror of
https://github.com/anoma/juvix.git
synced 2024-12-13 19:49:20 +03:00
2d798ec31c
* Depends on PR #1824 * Closes #1556 * Closes #1825 * Closes #1843 * Closes #1729 * Closes #1596 * Closes #1343 * Closes #1382 * Closes #1867 * Closes #1876 * Changes the `juvix compile` command to use the new pipeline. * Removes the `juvix dev minic` command and the `BackendC` tests. * Adds the `juvix eval` command. * Fixes bugs in the Nat-to-integer conversion. * Fixes bugs in the Internal-to-Core and Core-to-Core.Stripped translations. * Fixes bugs in the RemoveTypeArgs transformation. * Fixes bugs in lambda-lifting (incorrect de Bruijn indices in the types of added binders). * Fixes several other bugs in the compilation pipeline. * Adds a separate EtaExpandApps transformation to avoid quadratic runtime in the Internal-to-Core translation due to repeated calls to etaExpandApps. * Changes Internal-to-Core to avoid generating matches on values which don't have an inductive type. --------- Co-authored-by: Paul Cadman <git@paulcadman.dev> Co-authored-by: janmasrovira <janmasrovira@gmail.com>
32 lines
1.3 KiB
Haskell
32 lines
1.3 KiB
Haskell
module Commands.Compile where
|
|
|
|
import Commands.Base
|
|
import Commands.Compile.Options
|
|
import Commands.Dev.Core.Compile.Base qualified as Compile
|
|
import Commands.Extra.Compile qualified as Compile
|
|
import Data.Text.IO qualified as TIO
|
|
import Juvix.Compiler.Core qualified as Core
|
|
import Juvix.Compiler.Core.Pretty qualified as Core
|
|
|
|
runCommand :: (Members '[Embed IO, App] r) => CompileOptions -> Sem r ()
|
|
runCommand opts@CompileOptions {..} = do
|
|
inputFile <- someBaseToAbs' (_compileInputFile ^. pathPath)
|
|
Core.CoreResult {..} <- runPipeline _compileInputFile upToCore
|
|
let arg =
|
|
Compile.PipelineArg
|
|
{ _pipelineArgFile = inputFile,
|
|
_pipelineArgOptions = opts,
|
|
_pipelineArgInfoTable = _coreResultTable
|
|
}
|
|
case _compileTarget of
|
|
TargetNative64 -> Compile.runCPipeline arg
|
|
TargetWasm32Wasi -> Compile.runCPipeline arg
|
|
TargetGeb -> Compile.runGebPipeline arg
|
|
TargetCore -> writeCoreFile arg
|
|
TargetAsm -> Compile.runAsmPipeline arg
|
|
|
|
writeCoreFile :: (Members '[Embed IO, App] r) => Compile.PipelineArg -> Sem r ()
|
|
writeCoreFile Compile.PipelineArg {..} = do
|
|
coreFile <- Compile.outputFile _pipelineArgOptions _pipelineArgFile
|
|
embed $ TIO.writeFile (toFilePath coreFile) (show $ Core.ppOut Core.defaultOptions {Core._optShowDeBruijnIndices = True} _pipelineArgInfoTable)
|