Skip to content

Commit

Permalink
fixing pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
janmasrovira committed Aug 9, 2024
1 parent aad3657 commit 9ae71b6
Show file tree
Hide file tree
Showing 12 changed files with 85 additions and 85 deletions.
31 changes: 14 additions & 17 deletions src/Juvix/Compiler/Builtins/Effect.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,18 @@ registerBuiltin = registerBuiltin' . toBuiltinPrim
getBuiltinSymbol :: (IsBuiltin a, Member Builtins r) => Interval -> a -> Sem r Symbol
getBuiltinSymbol i = getBuiltinSymbol' i . toBuiltinPrim

newtype BuiltinsState = BuiltinsState
{ _builtinsTable :: HashMap BuiltinPrim Symbol
}

makeLenses ''BuiltinsState

iniBuiltins :: BuiltinsState
iniBuiltins = BuiltinsState mempty

runBuiltins :: forall r a. (Member (Error BuiltinsError) r) => BuiltinsState -> Sem (Builtins ': r) a -> Sem r (BuiltinsState, a)
type BuiltinsTable = HashMap BuiltinPrim Symbol

runBuiltins ::
forall r a.
(Member (Error BuiltinsError) r) =>
BuiltinsTable ->
Sem (Builtins ': r) a ->
Sem r (BuiltinsTable, a)
runBuiltins ini = reinterpret (runState ini) $ \case
GetBuiltinSymbol' i b -> fromMaybeM notDefined (gets (^. builtinsTable . at b))
GetBuiltinSymbol' i b -> fromMaybeM notDefined (gets @BuiltinsTable (^. at b))
where
notDefined :: Sem (State BuiltinsState ': r) x
notDefined :: Sem (State BuiltinsTable ': r) x
notDefined =
throw $
ErrNotDefined
Expand All @@ -43,13 +41,12 @@ runBuiltins ini = reinterpret (runState ini) $ \case
_notDefinedLoc = i
}
RegisterBuiltin' b n -> do
s <- gets (^. builtinsTable . at b)
s <- gets @BuiltinsTable (^. at b)
case s of
Nothing -> do
modify (over builtinsTable (set (at b) (Just n)))
Nothing -> modify @BuiltinsTable (set (at b) (Just n))
Just {} -> alreadyDefined
where
alreadyDefined :: Sem (State BuiltinsState ': r) x
alreadyDefined :: Sem (State BuiltinsTable ': r) x
alreadyDefined =
throw $
ErrAlreadyDefined
Expand All @@ -58,5 +55,5 @@ runBuiltins ini = reinterpret (runState ini) $ \case
_alreadyDefinedLoc = getLoc n
}

evalBuiltins :: (Member (Error BuiltinsError) r) => BuiltinsState -> Sem (Builtins ': r) a -> Sem r a
evalBuiltins :: (Member (Error BuiltinsError) r) => BuiltinsTable -> Sem (Builtins ': r) a -> Sem r a
evalBuiltins s = fmap snd . runBuiltins s
4 changes: 1 addition & 3 deletions src/Juvix/Compiler/Concrete/Translation/FromParsed.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ module Juvix.Compiler.Concrete.Translation.FromParsed
)
where

import Juvix.Compiler.Builtins.Effect
import Juvix.Compiler.Concrete.Data.Highlight
import Juvix.Compiler.Concrete.Language
import Juvix.Compiler.Concrete.Translation.FromParsed.Analysis.Scoping
Expand All @@ -23,8 +22,7 @@ fromParsed ::
Reader ModuleTable,
Reader Parsed.ParserResult,
Error JuvixError,
NameIdGen,
Builtins
NameIdGen
]
r
) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,14 @@ scopeCheck' ::
scopeCheck' importTab pr m = do
fmap mkResult
. runReader tab
. evalBuiltins builtinsState
. evalBuiltins (tab ^. infoBuiltins)
. runReader iniScopeParameters
. runState (iniScoperState tab)
$ checkTopModule m
where
tab :: InfoTable
tab = computeCombinedInfoTable importTab

builtinsState :: BuiltinsState
builtinsState =
BuiltinsState
{ _builtinsTable = tab ^. infoBuiltins
}

iniScopeParameters :: ScopeParameters
iniScopeParameters =
ScopeParameters
Expand Down
93 changes: 49 additions & 44 deletions src/Juvix/Compiler/Internal/Translation/FromConcrete.hs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ checkCoercionCycles = do
. ErrCoercionCycles
. CoercionCycles

-- TODO consider passing only builtin information instead of the whole S.InfoTable
checkTopModule ::
(Members '[HighlightBuilder, Reader S.InfoTable, Reader EntryPoint, Reader InfoTable, Error TypeCheckerError, NameIdGen, ResultBuilder, Termination] r) =>
Module ->
Expand Down
7 changes: 6 additions & 1 deletion src/Juvix/Compiler/Internal/Translation/Repl.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ module Juvix.Compiler.Internal.Translation.Repl
)
where

import Juvix.Compiler.Concrete.Data.Highlight
import Juvix.Compiler.Internal.Data.LocalVars
import Juvix.Compiler.Internal.Language
import Juvix.Compiler.Internal.Translation.FromInternal
import Juvix.Compiler.Internal.Translation.FromInternal.Analysis.Termination
import Juvix.Compiler.Internal.Translation.FromInternal.Analysis.TypeChecking
import Juvix.Compiler.Pipeline.Artifacts
import Juvix.Prelude

typeCheckExpressionType ::
forall r.
Expand All @@ -17,11 +20,13 @@ typeCheckExpressionType ::
Sem r TypedExpression
typeCheckExpressionType exp = do
table <- extendedTableReplArtifacts exp
stable <- gets (^. artifactScopeTable)
runResultBuilderArtifacts
. runBuiltinsArtifacts
. runNameIdGenArtifacts
. ignoreHighlightBuilder
. runReader table
. runReader stable
. withEmptyLocalVars
. withEmptyInsertedArgsStack
. mapError (JuvixError @TypeCheckerError)
Expand Down
9 changes: 5 additions & 4 deletions src/Juvix/Compiler/Pipeline/Artifacts.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ module Juvix.Compiler.Pipeline.Artifacts
where

import Juvix.Compiler.Builtins
import Juvix.Compiler.Builtins.Effect qualified as Builtins
import Juvix.Compiler.Concrete.Data.InfoTableBuilder qualified as Scoped
import Juvix.Compiler.Concrete.Data.Scope qualified as S
import Juvix.Compiler.Core.Data.InfoTableBuilder qualified as Core
Expand All @@ -28,7 +27,7 @@ import Juvix.Prelude
appendArtifactsModuleTable :: ModuleTable -> Artifacts -> Artifacts
appendArtifactsModuleTable mtab =
over artifactInternalTypedTable (computeCombinedInfoTable importTab <>)
. over (artifactBuiltins . Builtins.builtinsTable) (computeCombinedBuiltins mtab <>)
. over (artifactBuiltins) (computeCombinedBuiltins mtab <>)
. over (artifactCoreModule . Core.moduleImportsTable) (computeCombinedCoreInfoTable mtab <>)
. over artifactModuleTable (mtab <>)
where
Expand All @@ -49,9 +48,11 @@ tmpCoreInfoTableBuilderArtifacts m = do
modify' (set artifactCoreModule md)
return a

runBuiltinsArtifacts :: (Members '[Error JuvixError, State Artifacts] r) => Sem (Builtins ': r) a -> Sem r a
runBuiltinsArtifacts :: forall r a. (Members '[Error JuvixError, State Artifacts] r) => Sem (Builtins ': r) a -> Sem r a
runBuiltinsArtifacts =
runStateLikeArtifacts runBuiltins artifactBuiltins
mapError (JuvixError @BuiltinsError)
. runStateLikeArtifacts runBuiltins artifactBuiltins
. inject

runScoperInfoTableBuilderArtifacts :: (Members '[State Artifacts] r) => Sem (Scoped.InfoTableBuilder ': r) a -> Sem r a
runScoperInfoTableBuilderArtifacts = runStateLikeArtifacts Scoped.runInfoTableBuilderRepl artifactScopeTable
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Pipeline/Artifacts/Base.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ data Artifacts = Artifacts
{ _artifactParsing :: ParserState,
-- Scoping
_artifactResolver :: ResolverState,
_artifactBuiltins :: BuiltinsState,
_artifactBuiltins :: BuiltinsTable,
_artifactNameIdState :: NameIdGenState,
_artifactScopeTable :: Scoped.InfoTable,
_artifactScopeExports :: HashSet NameId,
Expand Down
5 changes: 3 additions & 2 deletions src/Juvix/Compiler/Pipeline/Repl.hs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import Juvix.Compiler.Core.Transformation.DisambiguateNames (disambiguateNames)
import Juvix.Compiler.Internal qualified as Internal
import Juvix.Compiler.Internal.Translation.FromInternal.Analysis.Termination.Checker
import Juvix.Compiler.Internal.Translation.FromInternal.Analysis.TypeChecking.Error
import Juvix.Compiler.Internal.Translation.Repl qualified as Repl
import Juvix.Compiler.Pipeline.Artifacts
import Juvix.Compiler.Pipeline.Artifacts.PathResolver
import Juvix.Compiler.Pipeline.Driver
Expand Down Expand Up @@ -110,7 +111,7 @@ expressionUpToTyped fp txt = do
p <- expressionUpToAtomsParsed fp txt
runTerminationArtifacts
( upToInternalExpression p
>>= Internal.typeCheckExpressionType
>>= Repl.typeCheckExpressionType
)

compileExpression ::
Expand All @@ -120,7 +121,7 @@ compileExpression ::
compileExpression p =
runTerminationArtifacts
( upToInternalExpression p
>>= Internal.typeCheckExpression
>>= Repl.typeCheckExpression
)
>>= fromInternalExpression

Expand Down
3 changes: 1 addition & 2 deletions src/Juvix/Compiler/Pipeline/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ module Juvix.Compiler.Pipeline.Run
)
where

import Juvix.Compiler.Builtins
import Juvix.Compiler.Concrete.Data.Highlight
import Juvix.Compiler.Concrete.Data.Scope
import Juvix.Compiler.Concrete.Translation.FromParsed.Analysis.Scoping qualified as Scoped
Expand Down Expand Up @@ -318,7 +317,7 @@ runReplPipelineIOEither' lockMode entry = do
_artifactCoercions = mempty,
_artifactCoreModule = Core.emptyModule,
_artifactScopeTable = mempty,
_artifactBuiltins = iniBuiltins,
_artifactBuiltins = mempty,
_artifactScopeExports = mempty,
_artifactScoperState = Scoper.iniScoperState mempty,
_artifactModuleTable = mempty
Expand Down
3 changes: 2 additions & 1 deletion src/Juvix/Compiler/Store/Scoped/Data/InfoTable.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ module Juvix.Compiler.Store.Scoped.Data.InfoTable where

import Data.HashMap.Strict qualified as HashMap
import Data.HashSet qualified as HashSet
import Juvix.Compiler.Builtins.Effect (BuiltinsTable)
import Juvix.Compiler.Concrete.Data.ScopedName qualified as S
import Juvix.Compiler.Concrete.Language
import Juvix.Compiler.Store.Scoped.Data.SymbolEntry
Expand All @@ -24,7 +25,7 @@ data InfoTable = InfoTable
_infoInductives :: HashMap NameId (InductiveDef 'Scoped),
_infoConstructors :: HashMap NameId (ConstructorDef 'Scoped),
_infoAxioms :: HashMap NameId (AxiomDef 'Scoped),
_infoBuiltins :: HashMap BuiltinPrim S.Symbol,
_infoBuiltins :: BuiltinsTable,
_infoScoperAlias :: HashMap S.NameId PreSymbolEntry
}
deriving stock (Generic)
Expand Down
4 changes: 1 addition & 3 deletions src/Juvix/Formatter.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

module Juvix.Formatter where

import Juvix.Compiler.Builtins.Effect
import Juvix.Compiler.Concrete.Data.Highlight.Input (ignoreHighlightBuilder)
import Juvix.Compiler.Concrete.Language
import Juvix.Compiler.Concrete.Print (ppOutDefault)
Expand Down Expand Up @@ -110,8 +109,7 @@ formatModuleInfo ::
'[ PathResolver,
Error JuvixError,
Files,
Reader Package,
Builtins
Reader Package
]
r
) =>
Expand Down

0 comments on commit 9ae71b6

Please sign in to comment.