Skip to content

Commit

Permalink
Add option to specify Core transformations to internal core-eval
Browse files Browse the repository at this point in the history
  • Loading branch information
paulcadman committed Dec 14, 2022
1 parent d091322 commit 78fbd25
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 16 deletions.
16 changes: 2 additions & 14 deletions app/Commands/Dev/Core/Read/Options.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module Commands.Dev.Core.Read.Options where
import Commands.Dev.Core.Eval.Options qualified as Eval
import CommonOptions
import Evaluator qualified
import Juvix.Compiler.Core.Data.TransformationId.Parser
import Juvix.Compiler.Core.Data.TransformationId
import Juvix.Compiler.Core.Pretty.Options qualified as Core

data CoreReadOptions = CoreReadOptions
Expand Down Expand Up @@ -51,18 +51,6 @@ parseCoreReadOptions = do
( long "eval"
<> help "evaluate after the transformation"
)
_coreReadTransformations <-
option
(eitherReader parseTransf)
( long "transforms"
<> short 't'
<> value mempty
<> metavar "[Transform]"
<> completer (mkCompleter (return . completionsString))
<> help "hint: use autocomplete"
)
_coreReadTransformations <- optTransformationIds
_coreReadInputFile <- parseInputJuvixCoreFile
pure CoreReadOptions {..}
where
parseTransf :: String -> Either String [TransformationId]
parseTransf = mapLeft unpack . parseTransformations . pack
4 changes: 3 additions & 1 deletion app/Commands/Dev/Internal/CoreEval.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import Commands.Dev.Internal.CoreEval.Options
import Data.HashMap.Strict qualified as HashMap
import Evaluator
import Juvix.Compiler.Core.Data.InfoTable
import Juvix.Compiler.Core.Transformation qualified as Core
import Juvix.Compiler.Core.Translation

runCommand :: Members '[Embed IO, App] r => InternalCoreEvalOptions -> Sem r ()
runCommand localOpts = do
tab <- (^. coreResultTable) <$> runPipeline (localOpts ^. internalCoreEvalInputFile) upToCore
forM_ ((tab ^. infoMain) >>= ((tab ^. identContext) HashMap.!?)) (evalAndPrint localOpts tab)
let tab' = Core.applyTransformations (project localOpts ^. internalCoreEvalTransformations) tab
forM_ ((tab' ^. infoMain) >>= ((tab' ^. identContext) HashMap.!?)) (evalAndPrint localOpts tab')
5 changes: 4 additions & 1 deletion app/Commands/Dev/Internal/CoreEval/Options.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ module Commands.Dev.Internal.CoreEval.Options where

import CommonOptions
import Evaluator qualified as Eval
import Juvix.Compiler.Core.Data.TransformationId
import Juvix.Compiler.Core.Pretty.Options qualified as Core

data InternalCoreEvalOptions = InternalCoreEvalOptions
{ _internalCoreEvalShowDeBruijn :: Bool,
{ _internalCoreEvalTransformations :: [TransformationId],
_internalCoreEvalShowDeBruijn :: Bool,
_internalCoreEvalNoIO :: Bool,
_internalCoreEvalInputFile :: Path
}
Expand All @@ -28,6 +30,7 @@ instance CanonicalProjection InternalCoreEvalOptions Eval.EvalOptions where

parseInternalCoreEval :: Parser InternalCoreEvalOptions
parseInternalCoreEval = do
_internalCoreEvalTransformations <- optTransformationIds
_internalCoreEvalShowDeBruijn <-
switch
( long "show-de-bruijn"
Expand Down
16 changes: 16 additions & 0 deletions app/CommonOptions.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module CommonOptions
where

import Control.Exception qualified as GHC
import Juvix.Compiler.Core.Data.TransformationId.Parser
import Juvix.Prelude
import Options.Applicative
import System.Process
Expand Down Expand Up @@ -194,3 +195,18 @@ optDeBruijn =
( long "show-de-bruijn"
<> help "Show variable de Bruijn indices"
)

optTransformationIds :: Parser [TransformationId]
optTransformationIds =
option
(eitherReader parseTransf)
( long "transforms"
<> short 't'
<> value mempty
<> metavar "[Transform]"
<> completer (mkCompleter (return . completionsString))
<> help "hint: use autocomplete"
)
where
parseTransf :: String -> Either String [TransformationId]
parseTransf = mapLeft unpack . parseTransformations . pack

0 comments on commit 78fbd25

Please sign in to comment.