Skip to content

Instantly share code, notes, and snippets.

@pzp1997
Last active February 25, 2020 15:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pzp1997/761fa768c9e6848b4e0a3a3c7bbd98b0 to your computer and use it in GitHub Desktop.
Save pzp1997/761fa768c9e6848b4e0a3a3c7bbd98b0 to your computer and use it in GitHub Desktop.
data Can.Def
= Def (A.Located Name) [Pattern] Can.Expr
| TypedDef (A.Located Name) FreeVars [(Pattern, Type)] Can.Expr Type
data Can.Decls
= Declare Can.Def Can.Decls
| DeclareRec Can.Def [Can.Def] Can.Decls
| SaveTheEnvironment
data ModuleName.Canonical =
Canonical
{ _package :: !Pkg.Name
, _module :: !Name.Name
}
data Opt.Global = Global ModuleName.Canonical Name
data Opt.LocalGraph =
LocalGraph
{ _l_main :: Maybe Main
, _l_nodes :: Map.Map Opt.Global Opt.Node -- PERF profile switching Global to Name
, _l_fields :: Map.Map Name Int
}
data Opt.Def
= Def Name Opt.Expr
| TailDef Name [Name] Opt.Expr
data Opt.Node
= Define Opt.Expr (Set.Set Opt.Global)
| DefineTailFunc [Name] Opt.Expr (Set.Set Opt.Global)
| Cycle [Name] [(Name, Opt.Expr)] [Opt.Def] (Set.Set Opt.Global)
| ...
Optimize.Module.addDef :: ModuleName.Canonical -> Annotations -> Can.Def -> Opt.LocalGraph -> Result i [W.Warning] Opt.LocalGraph
Optimize.Module.addDefHelp :: A.Region -> Annotations -> ModuleName.Canonical -> Name.Name -> [Can.Pattern] -> Can.Expr -> Opt.LocalGraph -> Result i w Opt.LocalGraph
Optimize.Module.addDefNode :: ModuleName.Canonical -> Name.Name -> [Can.Pattern] -> Can.Expr -> Set.Set Opt.Global -> Opt.LocalGraph -> Opt.LocalGraph
-- Shower thought: maybe do everything on the global graph
-- Be careful about inlining things called in the view
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment