on master help sign in
Dissolve AST.Literal, be explicit in Source, Canonical, patterns, etc.
232f7dcEvan Czaplicki
src/AST/Expression/Canonical.hs+14−9
@@ -33,9 +33,10 @@ import qualified Data.Map as Map
33import Data.Text (Text)
33import Data.Text (Text)
34
34
35import qualified AST.Binop as Binop
35import qualified AST.Binop as Binop
36−import qualified AST.Literal as Literal
37import qualified AST.Module.Name as ModuleName
36import qualified AST.Module.Name as ModuleName
37+import qualified AST.Shader as Shader
38import qualified AST.Type as Type
38import qualified AST.Type as Type
39+import qualified Data.Index as Index
39import qualified Elm.Name as N
40import qualified Elm.Name as N
40import Elm.Name (Name)
41import Elm.Name (Name)
41import qualified Reporting.Annotation as A
42import qualified Reporting.Annotation as A
@@ -56,7 +57,10 @@ data Expr_
56 | VarKernel Name Name
57 | VarKernel Name Name
57 | VarForeign ModuleName.Canonical Name
58 | VarForeign ModuleName.Canonical Name
58 | VarOperator Name ModuleName.Canonical Name
59 | VarOperator Name ModuleName.Canonical Name
59− | Literal Literal.Literal
60+ | Chr Text
61+ | Str Text
62+ | Int Int
63+ | Float Double
60 | List [Expr]
64 | List [Expr]
61 | Negate Expr
65 | Negate Expr
62 | Binop Name ModuleName.Canonical Name Expr Expr
66 | Binop Name ModuleName.Canonical Name Expr Expr
@@ -67,14 +71,13 @@ data Expr_
67 | LetRec [Def] Expr
71 | LetRec [Def] Expr
68 | LetDestruct Match Expr Expr
72 | LetDestruct Match Expr Expr
69 | Case Expr [(Match, Expr)]
73 | Case Expr [(Match, Expr)]
70− | CtorAccess Expr Int
71 | Accessor Name
74 | Accessor Name
72 | Access Expr Name
75 | Access Expr Name
73 | Update Expr (Map.Map Name Expr)
76 | Update Expr (Map.Map Name Expr)
74 | Record (Map.Map Name Expr)
77 | Record (Map.Map Name Expr)
75 | Unit
78 | Unit
76 | Tuple Expr Expr (Maybe Expr)
79 | Tuple Expr Expr (Maybe Expr)
77− | GLShader Name Name Literal.Shader
80+ | Shader Name Name Shader.Shader
78
81
79
82
80
83
@@ -95,7 +98,7 @@ data Def =
95
98
96
99
97data Args = Args [Arg] Destructors
100data Args = Args [Arg] Destructors
98−data Arg = Arg Int Pattern
101+data Arg = Arg Index.ZeroBased Pattern
99
102
100data Match = Match Pattern Destructors
103data Match = Match Pattern Destructors
101
104
@@ -111,22 +114,24 @@ data Pattern_
111 | PTuple Pattern Pattern (Maybe Pattern)
114 | PTuple Pattern Pattern (Maybe Pattern)
112 | PList [Pattern]
115 | PList [Pattern]
113 | PCons Pattern Pattern
116 | PCons Pattern Pattern
114− | PLiteral Literal.Literal
117+ | PChr Text
118+ | PStr Text
119+ | PInt Int
115 | PCtor
120 | PCtor
116 { _p_home :: ModuleName.Canonical
121 { _p_home :: ModuleName.Canonical
117 , _p_type :: N.Name
122 , _p_type :: N.Name
118 , _p_vars :: [N.Name]
123 , _p_vars :: [N.Name]
119 , _p_name :: N.Name
124 , _p_name :: N.Name
120− , _p_args :: [(Int, Type.Canonical, Pattern)] -- zero indexed
125+ , _p_args :: [(Index.ZeroBased, Type.Canonical, Pattern)]
121 }
126 }
122
127
123
128
124type Destructors = Map.Map N.Name (A.Located Destructor)
129type Destructors = Map.Map N.Name (A.Located Destructor)
125
130
126data Destructor
131data Destructor
127− = DIndex Int Destructor
132+ = DIndex Index.ZeroBased Destructor
128 | DField N.Name Destructor
133 | DField N.Name Destructor
129− | DRoot Int
134+ | DRoot Index.ZeroBased
130
135
131
136
132
137
src/AST/Expression/Source.hs+9−4
@@ -21,7 +21,7 @@ import qualified Data.ByteString as B
21import Data.Text (Text)
21import Data.Text (Text)
22
22
23import qualified AST.Binop as Binop
23import qualified AST.Binop as Binop
24−import qualified AST.Literal as Literal
24+import qualified AST.Shader as Shader
25import qualified AST.Type as Type
25import qualified AST.Type as Type
26import qualified Elm.Name as N
26import qualified Elm.Name as N
27import qualified Reporting.Annotation as A
27import qualified Reporting.Annotation as A
@@ -36,7 +36,10 @@ type Expr = A.Located Expr_
36
36
37
37
38data Expr_
38data Expr_
39− = Literal Literal.Literal
39+ = Chr Text
40+ | Str Text
41+ | Int Int
42+ | Float Double
40 | Var (Maybe N.Name) N.Name
43 | Var (Maybe N.Name) N.Name
41 | List [Expr]
44 | List [Expr]
42 | Op N.Name
45 | Op N.Name
@@ -53,7 +56,7 @@ data Expr_
53 | Record [(A.Located N.Name, Expr)]
56 | Record [(A.Located N.Name, Expr)]
54 | Unit
57 | Unit
55 | Tuple Expr Expr [Expr]
58 | Tuple Expr Expr [Expr]
56− | GLShader Text Text Literal.Shader
59+ | Shader Text Text Shader.Shader
57
60
58
61
59
62
@@ -83,7 +86,9 @@ data Pattern_
83 | PCtor R.Region (Maybe N.Name) N.Name [Pattern]
86 | PCtor R.Region (Maybe N.Name) N.Name [Pattern]
84 | PList [Pattern]
87 | PList [Pattern]
85 | PCons Pattern Pattern
88 | PCons Pattern Pattern
86− | PLiteral Literal.Literal
89+ | PChr Text
90+ | PStr Text
91+ | PInt Int
87
92
88
93
89
94
src/AST/Expression/Valid.hs+6−3
@@ -20,7 +20,7 @@ import Data.Text (Text)
20
20
21import qualified AST.Binop as Binop
21import qualified AST.Binop as Binop
22import qualified AST.Expression.Source as Src
22import qualified AST.Expression.Source as Src
23−import qualified AST.Literal as Literal
23+import qualified AST.Shader as Shader
24import qualified AST.Type as Type
24import qualified AST.Type as Type
25import qualified Elm.Name as N
25import qualified Elm.Name as N
26import qualified Reporting.Annotation as A
26import qualified Reporting.Annotation as A
@@ -35,7 +35,10 @@ type Expr = A.Located Expr_
35
35
36
36
37data Expr_
37data Expr_
38− = Literal Literal.Literal
38+ = Chr Text
39+ | Str Text
40+ | Int Int
41+ | Float Double
39 | Var (Maybe N.Name) N.Name
42 | Var (Maybe N.Name) N.Name
40 | List [Expr]
43 | List [Expr]
41 | Op N.Name
44 | Op N.Name
@@ -52,7 +55,7 @@ data Expr_
52 | Record [(A.Located N.Name, Expr)]
55 | Record [(A.Located N.Name, Expr)]
53 | Unit
56 | Unit
54 | Tuple Expr Expr [Expr]
57 | Tuple Expr Expr [Expr]
55− | GLShader Text Text Literal.Shader
58+ | Shader Text Text Shader.Shader
56
59
57
60
58
61
src/AST/Literal.hsdeleted−92
@@ -1,92 +0,0 @@
1−{-# OPTIONS_GHC -Wall #-}
2−{-# LANGUAGE OverloadedStrings #-}
3−module AST.Literal
4− ( Literal(..)
5− , toBuilder
6− , Shader(..)
7− , GLType(..)
8− )
9− where
10−
11−
12−import Data.Binary
13−import qualified Data.Map as Map
14−import Data.Monoid ((<>))
15−import Data.Text (Text)
16−import Data.Text.Lazy.Builder (Builder, fromText)
17−import Data.Text.Lazy.Builder.Int (decimal)
18−import Data.Text.Lazy.Builder.RealFloat (realFloat)
19−
20−
21−
22−-- LITERALS
23−
24−
25−data Literal
26− = Chr Text
27− | Str Text
28− | IntNum Int
29− | FloatNum Double
30− deriving (Eq, Ord)
31−
32−
33−toBuilder :: Literal -> Builder
34−toBuilder literal =
35− case literal of
36− Chr c -> fromText ("'" <> c <> "'")
37− Str s -> fromText ("\"" <> s <> "\"")
38− IntNum n -> decimal n
39− FloatNum n -> realFloat n
40−
41−
42−
43−-- WebGL TYPES
44−
45−
46−data Shader =
47− Shader
48− { attribute :: Map.Map Text GLType
49− , uniform :: Map.Map Text GLType
50− , varying :: Map.Map Text GLType
51− }
52− deriving (Eq)
53−
54−
55−data GLType
56− = Int
57− | Float
58− | V2
59− | V3
60− | V4
61− | M4
62− | Texture
63− deriving (Eq)
64−
65−
66−
67−-- BINARY
68−
69−
70−instance Binary Literal where
71− put literal =
72− case literal of
73− Chr chr ->
74− putWord8 0 >> put chr
75−
76− Str str ->
77− putWord8 1 >> put str
78−
79− IntNum n ->
80− putWord8 2 >> put n
81−
82− FloatNum n ->
83− putWord8 3 >> put n
84−
85− get =
86− do word <- getWord8
87− case word of
88− 0 -> Chr <$> get
89− 1 -> Str <$> get
90− 2 -> IntNum <$> get
91− 3 -> FloatNum <$> get
92− _ -> error "bad binary for AST.Literal"
src/AST/Shader.hsnew file+36
@@ -0,0 +1,36 @@
1+{-# OPTIONS_GHC -Wall #-}
2+module AST.Shader
3+ ( Shader(..)
4+ , Type(..)
5+ )
6+ where
7+
8+
9+import qualified Data.Map as Map
10+import qualified Elm.Name as N
11+
12+
13+
14+-- SHADERS
15+
16+
17+data Shader =
18+ Shader
19+ { _attribute :: Map.Map N.Name Type
20+ , _uniform :: Map.Map N.Name Type
21+ , _varying :: Map.Map N.Name Type
22+ }
23+
24+
25+
26+-- GL TYPES
27+
28+
29+data Type
30+ = Int
31+ | Float
32+ | V2
33+ | V3
34+ | V4
35+ | M4
36+ | Texture