on fe7bbbd help sign in
elk/src/AST/Expression/Optimized.hs
92 lines 1.9 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Expression.Optimized
3 ( Decl(..)
4 , Def(..)
5 , Expr(..)
6 , Decider(..), Choice(..)
7 )
8 where
11import qualified Data.Set as Set
12import Data.Text (Text)
14import qualified AST.Effects as Effects
15import qualified AST.Expression.Canonical as Can
16import qualified AST.Literal as Literal
17import qualified AST.Module.Name as ModuleName
18import qualified AST.Type as Type
19import qualified AST.Variable as Var
20import qualified Optimize.DecisionTree as DT
21import qualified Reporting.Region as R
25-- TOP LEVEL DECLARATIONS
28data Decl =
29 Decl
30 { _deps :: Set.Set Var.Global
31 , _effects :: Maybe Effects.ManagerType
32 , _body :: !Def
33 }
37-- DEFINITIONS
40data Def
41 = Def Expr
42 | TailDef [Text] Expr
46-- EXPRESSIONS
49data Expr
50 = Literal Literal.Literal
51 | VarLocal Text
52 | VarGlobal ModuleName.Canonical Text
53 | List [Expr]
54 | Binop ModuleName.Canonical Text Expr Expr
55 | Function [Text] Expr
56 | Call Expr [Expr]
57 | TailCall Text [Text] [Expr]
58 | If [(Expr, Expr)] Expr
59 | Let [(Text, Def)] Expr
60 | Case Text (Decider Choice) [(Int, Expr)]
61 | Ctor Text [Expr]
62 | CtorAccess Expr Int
63 | Access Expr Text
64 | Update Expr [(Text, Expr)]
65 | Record [(Text, Expr)]
66 | Cmd ModuleName.Canonical Effects.ManagerType
67 | Sub ModuleName.Canonical Effects.ManagerType
68 | OutgoingPort Text Type.Canonical
69 | IncomingPort Text Type.Canonical
70 | Program Can.Main Expr
71 | GLShader Text
72 | Crash ModuleName.Canonical R.Region (Maybe Expr)
75data Decider a
76 = Leaf a
77 | Chain
78 { _testChain :: [(DT.Path, DT.Test)]
79 , _success :: Decider a
80 , _failure :: Decider a
81 }
82 | FanOut
83 { _path :: DT.Path
84 , _tests :: [(DT.Test, Decider a)]
85 , _fallback :: Decider a
86 }
87 deriving (Eq)
90data Choice
91 = Inline Expr
92 | Jump Int