1{-# OPTIONS_GHC -Wall #-}
2module AST.Expression.Optimized
7 , Decider(..), Choice(..)
12import Control.Monad (liftM, liftM2, liftM3, liftM4)
14import qualified Data.Set as Set
15import Data.Text (Text)
17import qualified AST.Effects as Effects
18import qualified AST.Literal as Literal
19import qualified AST.Module.Name as ModuleName
20import qualified AST.Variable as Var
21import qualified Optimize.DecisionTree as DT
22import qualified Reporting.Region as R
26-- TOP LEVEL DECLARATIONS
31 { _direct :: Set.Set Var.Global
32 , _indirect :: Set.Set Var.Global
33 , _effects :: Maybe Effects.ManagerType
52 = Literal Literal.Literal
54 | VarGlobal Var.Global
56 | Binop Var.Global Expr Expr
57 | Function [Text] Expr
59 | TailCall Text [Text] [Expr]
60 | If [(Expr, Expr)] Expr
61 | Let [(Text, Def)] Expr
62 | Case Text (Decider Choice) [(Int, Expr)]
66 | Update Expr [(Text, Expr)]
67 | Record [(Text, Expr)]
68 | Cmd ModuleName.Canonical Effects.ManagerType
69 | Sub ModuleName.Canonical Effects.ManagerType
70 | OutgoingPort Text Expr
71 | IncomingPort Text Expr
74 | Crash ModuleName.Canonical R.Region (Maybe Expr)
85 { _testChain :: [(DT.Path, DT.Test)]
86 , _success :: Decider a
87 , _failure :: Decider a
91 , _tests :: [(DT.Test, Decider a)]
92 , _fallback :: Decider a
106instance Binary Decl where
108 liftM4 Decl get get get get
110 put (Decl direct indirect fx body) =
111 put direct >> put indirect >> put fx >> put body
114instance Binary Def where
119 1 -> TailDef <$> get <*> get
120 _ -> error "problem getting Opt.Def binary"
125 putWord8 0 >> put body
128 putWord8 1 >> put args >> put body
131instance Binary Expr where
135 0 -> liftM Literal get
136 1 -> liftM VarLocal get
137 2 -> liftM VarGlobal get
139 4 -> liftM3 Binop get get get
140 5 -> liftM2 Function get get
141 6 -> liftM2 Call get get
142 7 -> liftM3 TailCall get get get
143 8 -> liftM2 If get get
144 9 -> liftM2 Let get get
145 10 -> liftM3 Case get get get
146 11 -> liftM2 Ctor get get
147 12 -> liftM2 CtorAccess get get
148 13 -> liftM2 Access get get
149 14 -> liftM2 Update get get
150 15 -> liftM Record get
151 16 -> liftM2 Cmd get get
152 17 -> liftM2 Sub get get
153 18 -> liftM2 OutgoingPort get get
154 19 -> liftM2 IncomingPort get get
155 20 -> liftM2 Program get get
156 21 -> liftM GLShader get
157 22 -> liftM3 Crash get get get
158 _ -> error "problem getting Opt.Expr binary"
162 Literal a -> putWord8 0 >> put a
163 VarLocal a -> putWord8 1 >> put a
164 VarGlobal a -> putWord8 2 >> put a
165 List a -> putWord8 3 >> put a
166 Binop a b c -> putWord8 4 >> put a >> put b >> put c
167 Function a b -> putWord8 5 >> put a >> put b
168 Call a b -> putWord8 6 >> put a >> put b
169 TailCall a b c -> putWord8 7 >> put a >> put b >> put c
170 If a b -> putWord8 8 >> put a >> put b
171 Let a b -> putWord8 9 >> put a >> put b
172 Case a b c -> putWord8 10 >> put a >> put b >> put c
173 Ctor a b -> putWord8 11 >> put a >> put b
174 CtorAccess a b -> putWord8 12 >> put a >> put b
175 Access a b -> putWord8 13 >> put a >> put b
176 Update a b -> putWord8 14 >> put a >> put b
177 Record a -> putWord8 15 >> put a
178 Cmd a b -> putWord8 16 >> put a >> put b
179 Sub a b -> putWord8 17 >> put a >> put b
180 OutgoingPort a b -> putWord8 18 >> put a >> put b
181 IncomingPort a b -> putWord8 19 >> put a >> put b
182 Program a b -> putWord8 20 >> put a >> put b
183 GLShader a -> putWord8 21 >> put a
184 Crash a b c -> putWord8 22 >> put a >> put b >> put c
187instance Binary Main where
191 Dynamic expr -> putWord8 1 >> put expr
197 1 -> liftM Dynamic get
198 _ -> error "problem getting Opt.Main binary"
201instance (Binary a) => Binary (Decider a) where
206 1 -> liftM3 Chain get get get
207 2 -> liftM3 FanOut get get get
208 _ -> error "problem getting Opt.Decider binary"
216 Chain testChain success failure ->
222 FanOut path tests fallback ->
229instance Binary Choice where
232 Inline expr -> putWord8 0 >> put expr
233 Jump index -> putWord8 1 >> put index
238 0 -> liftM Inline get
240 _ -> error "problem getting Opt.Choice binary"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list