on 1925e31 help sign in
elk/src/AST/Expression/Optimized.hs
81 lines 1.7 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Expression.Optimized
3 ( Def(..), Facts(..), dummyFacts
4 , Expr(..)
5 , Decider(..), Choice(..)
6 ) where
8import Data.Text (Text)
10import qualified AST.Expression.Canonical as Can
11import qualified AST.Literal as Literal
12import qualified AST.Module.Name as ModuleName
13import qualified AST.Type as Type
14import qualified AST.Variable as Var
15import qualified Optimize.DecisionTree as DT
16import qualified Reporting.Region as R
20-- DEFINITIONS
22data Def
23 = Def Facts Text Expr
24 | TailDef Facts Text [Text] Expr
27data Facts = Facts
28 { home :: Maybe ModuleName.Canonical
29 }
32dummyFacts :: Facts
33dummyFacts =
34 Facts Nothing
37-- EXPRESSIONS
39data Expr
40 = Literal Literal.Literal
41 | Var Var.Canonical
42 | List [Expr]
43 | Binop Var.Canonical Expr Expr
44 | Function [Text] Expr
45 | Call Expr [Expr]
46 | TailCall Text [Text] [Expr]
47 | If [(Expr, Expr)] Expr
48 | Let [Def] Expr
49 | Case Text (Decider Choice) [(Int, Expr)]
50 | Ctor Text [Expr]
51 | CtorAccess Expr Int
52 | Access Expr Text
53 | Update Expr [(Text, Expr)]
54 | Record [(Text, Expr)]
55 | Cmd ModuleName.Canonical
56 | Sub ModuleName.Canonical
57 | OutgoingPort Text Type.Canonical
58 | IncomingPort Text Type.Canonical
59 | Program Can.Main Expr
60 | GLShader Text Text Literal.Shader
61 | Crash ModuleName.Canonical R.Region (Maybe Expr)
64data Decider a
65 = Leaf a
66 | Chain
67 { _testChain :: [(DT.Path, DT.Test)]
68 , _success :: Decider a
69 , _failure :: Decider a
70 }
71 | FanOut
72 { _path :: DT.Path
73 , _tests :: [(DT.Test, Decider a)]
74 , _fallback :: Decider a
75 }
76 deriving (Eq)
79data Choice
80 = Inline Expr
81 | Jump Int