on f232da4 help sign in
elk/src/AST/Expression/Optimized.hs
91 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 | Var Var.Canonical
52 | List [Expr]
53 | Binop Var.Canonical Expr Expr
54 | Function [Text] Expr
55 | Call Expr [Expr]
56 | TailCall Text [Text] [Expr]
57 | If [(Expr, Expr)] Expr
58 | Let [(Text, Def)] Expr
59 | Case Text (Decider Choice) [(Int, Expr)]
60 | Ctor Text [Expr]
61 | CtorAccess Expr Int
62 | Access Expr Text
63 | Update Expr [(Text, Expr)]
64 | Record [(Text, Expr)]
65 | Cmd ModuleName.Canonical Effects.ManagerType
66 | Sub ModuleName.Canonical Effects.ManagerType
67 | OutgoingPort Text Type.Canonical
68 | IncomingPort Text Type.Canonical
69 | Program Can.Main Expr
70 | GLShader Text Text Literal.Shader
71 | Crash ModuleName.Canonical R.Region (Maybe Expr)
74data Decider a
75 = Leaf a
76 | Chain
77 { _testChain :: [(DT.Path, DT.Test)]
78 , _success :: Decider a
79 , _failure :: Decider a
80 }
81 | FanOut
82 { _path :: DT.Path
83 , _tests :: [(DT.Test, Decider a)]
84 , _fallback :: Decider a
85 }
86 deriving (Eq)
89data Choice
90 = Inline Expr
91 | Jump Int