on df41ae8 help sign in
elk/src/AST/Expression/Optimized.hs
76 lines 1.6 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Expression.Optimized
3 ( Def(..), Facts(..), dummyFacts
4 , Expr(..)
5 , Decider(..), Choice(..)
6 ) where
8import qualified AST.Literal as Literal
9import qualified AST.Module.Name as ModuleName
10import qualified AST.Variable as Var
11import qualified Optimize.DecisionTree as DT
12import qualified Reporting.Region as R
16-- DEFINITIONS
18data Def
19 = Def Facts String Expr
20 | TailDef Facts String [String] Expr
23data Facts = Facts
24 { home :: Maybe ModuleName.Canonical
25 , dependencies :: [Var.TopLevel]
26 }
29dummyFacts :: Facts
30dummyFacts =
31 Facts Nothing []
34-- EXPRESSIONS
36data Expr
37 = Literal Literal.Literal
38 | Var Var.Canonical
39 | Range Expr Expr
40 | ExplicitList [Expr]
41 | Binop Var.Canonical Expr Expr
42 | Function [String] Expr
43 | Call Expr [Expr]
44 | TailCall String [String] [Expr]
45 | If [(Expr, Expr)] Expr
46 | Let [Def] Expr
47 | Case String (Decider Choice) [(Int, Expr)]
48 | Data String [Expr]
49 | DataAccess Expr Int
50 | Access Expr String
51 | Update Expr [(String, Expr)]
52 | Record [(String, Expr)]
53 | Cmd ModuleName.Canonical
54 | Sub ModuleName.Canonical
55 | GLShader String String Literal.GLShaderTipe
56 | Crash ModuleName.Canonical R.Region (Maybe Expr)
59data Decider a
60 = Leaf a
61 | Chain
62 { _testChain :: [(DT.Path, DT.Test)]
63 , _success :: Decider a
64 , _failure :: Decider a
65 }
66 | FanOut
67 { _path :: DT.Path
68 , _tests :: [(DT.Test, Decider a)]
69 , _fallback :: Decider a
70 }
71 deriving (Eq)
74data Choice
75 = Inline Expr
76 | Jump Int