on master help sign in
Record field name translations for shaders

Fix https://github.com/elm/compiler/issues/1744 This does not fix unsafeShader though

commit2a396586c7a01be3ad053c6b018f62df830d689b authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 9 Aug 2018, 10:45 (8 years ago) parent091fa6b
4 files changed+24−9
builder/src/Generate/Nitpick.hs+1−1 compiler/src/AST/Optimized.hs+3−3 compiler/src/Generate/JavaScript/Expression.hs+16−3 compiler/src/Optimize/Expression.hs+4−2
builder/src/Generate/Nitpick.hs+1−1
@@ -75,7 +75,7 @@ hasDebug expression =
7575 Opt.Record fs -> any hasDebug fs
7676 Opt.Unit -> False
7777 Opt.Tuple a b c -> hasDebug a || hasDebug b || maybe False hasDebug c
78− Opt.Shader _ -> False
78+ Opt.Shader _ _ _ -> False
7979
8080
8181defHasDebug :: Opt.Def -> Bool
compiler/src/AST/Optimized.hs+3−3
@@ -65,7 +65,7 @@ data Expr
6565 | Record (Map.Map N.Name Expr)
6666 | Unit
6767 | Tuple Expr Expr (Maybe Expr)
68− | Shader Text
68+ | Shader Text (Set.Set N.Name) (Set.Set N.Name)
6969
7070
7171data Global = Global ModuleName.Canonical N.Name
@@ -213,7 +213,7 @@ instance Binary Expr where
213213 Record a -> putWord8 23 >> put a
214214 Unit -> putWord8 24
215215 Tuple a b c -> putWord8 25 >> put a >> put b >> put c
216− Shader a -> putWord8 26 >> put a
216+ Shader a b c -> putWord8 26 >> put a >> put b >> put c
217217
218218 get =
219219 do word <- getWord8
@@ -244,7 +244,7 @@ instance Binary Expr where
244244 23 -> liftM Record get
245245 24 -> pure Unit
246246 25 -> liftM3 Tuple get get get
247− 26 -> liftM Shader get
247+ 26 -> liftM3 Shader get get get
248248 _ -> error "problem getting Opt.Expr binary"
249249
250250
compiler/src/Generate/JavaScript/Expression.hs+16−3
@@ -16,6 +16,7 @@ import qualified Data.IntMap as IntMap
1616import qualified Data.List as List
1717import Data.Map ((!))
1818import qualified Data.Map as Map
19+import qualified Data.Set as Set
1920import qualified Data.Text.Encoding as Text
2021
2122import qualified AST.Canonical as Can
@@ -178,9 +179,21 @@ generate mode expression =
178179 , generateJsExpr mode c
179180 ]
180181
181− Opt.Shader src ->
182− let string = JS.String (Text.encodeUtf8Builder src) in
183− JsExpr $ JS.Object [ ( Name.fromLocal "src", string ) ]
182+ Opt.Shader src attributes uniforms ->
183+ let
184+ toTranlation field =
185+ ( Name.fromLocal field
186+ , JS.String (Name.toBuilder (generateField mode field))
187+ )
188+
189+ toTranslationObject fields =
190+ JS.Object (map toTranlation (Set.toList fields))
191+ in
192+ JsExpr $ JS.Object $
193+ [ ( Name.fromLocal "src", JS.String (Text.encodeUtf8Builder src) )
194+ , ( Name.fromLocal "attributes", toTranslationObject attributes )
195+ , ( Name.fromLocal "uniforms", toTranslationObject uniforms )
196+ ]
184197
185198
186199
compiler/src/Optimize/Expression.hs+4−2
@@ -10,11 +10,13 @@ module Optimize.Expression
1010
1111import Prelude hiding (cycle)
1212import Control.Monad (foldM)
13+import qualified Data.Map as Map
1314import qualified Data.Set as Set
1415
1516import qualified AST.Canonical as Can
1617import qualified AST.Optimized as Opt
1718import qualified AST.Module.Name as ModuleName
19+import qualified AST.Utils.Shader as Shader
1820import qualified Data.Index as Index
1921import qualified Elm.Name as N
2022import qualified Optimize.Case as Case
@@ -168,8 +170,8 @@ optimize cycle (A.At region expression) =
168170 <*> optimize cycle b
169171 <*> traverse (optimize cycle) maybeC
170172
171− Can.Shader _ src _ ->
172− pure (Opt.Shader src)
173+ Can.Shader _ src (Shader.Shader attributes uniforms _varyings) ->
174+ pure (Opt.Shader src (Map.keysSet attributes) (Map.keysSet uniforms))
173175
174176
175177