on master help sign in
Pass Global to generateCtor instead of just the constructor name

This will allow special handling for Dict in eq

commit80e656292b9cedfa8e34d41bf09452d834b7c7ff authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 16 Apr 2018, 10:35 (9 years ago) parentca94170
5 files changed+29−29
builder/src/Generate/Nitpick.hs+3−3 compiler/src/AST/Optimized.hs+9−9 compiler/src/Generate/JavaScript.hs+12−12 compiler/src/Generate/JavaScript/Expression.hs+2−2 compiler/src/Optimize/Module.hs+3−3
builder/src/Generate/Nitpick.hs+3−3
@@ -35,9 +35,9 @@ nodeHasDebug node =
3535 case node of
3636 Opt.Define expr _ -> hasDebug expr
3737 Opt.DefineTailFunc _ expr _ -> hasDebug expr
38− Opt.Ctor _ _ _ -> False
39− Opt.Enum _ _ -> False
40− Opt.Box _ -> False
38+ Opt.Ctor _ _ -> False
39+ Opt.Enum _ -> False
40+ Opt.Box -> False
4141 Opt.Link _ -> False
4242 Opt.Cycle defs _ -> any (hasDebug . snd) defs
4343 Opt.Manager _ -> False
compiler/src/AST/Optimized.hs+9−9
@@ -146,9 +146,9 @@ data Main
146146data Node
147147 = Define Expr (Set.Set Global)
148148 | DefineTailFunc [N.Name] Expr (Set.Set Global)
149− | Ctor N.Name Index.ZeroBased Int
150− | Enum N.Name Index.ZeroBased
151− | Box N.Name
149+ | Ctor Index.ZeroBased Int
150+ | Enum Index.ZeroBased
151+ | Box
152152 | Link Global
153153 | Cycle [(N.Name, Expr)] (Set.Set Global)
154154 | Manager EffectsType
@@ -340,9 +340,9 @@ instance Binary Node where
340340 case node of
341341 Define a b -> putWord8 0 >> put a >> put b
342342 DefineTailFunc a b c -> putWord8 1 >> put a >> put b >> put c
343− Ctor a b c -> putWord8 2 >> put a >> put b >> put c
344− Enum a b -> putWord8 3 >> put a >> put b
345− Box a -> putWord8 4 >> put a
343+ Ctor a b -> putWord8 2 >> put a >> put b
344+ Enum a -> putWord8 3 >> put a
345+ Box -> putWord8 4
346346 Link a -> putWord8 5 >> put a
347347 Cycle a b -> putWord8 6 >> put a >> put b
348348 Manager a -> putWord8 7 >> put a
@@ -355,9 +355,9 @@ instance Binary Node where
355355 case word of
356356 0 -> liftM2 Define get get
357357 1 -> liftM3 DefineTailFunc get get get
358− 2 -> liftM3 Ctor get get get
359− 3 -> liftM2 Enum get get
360− 4 -> liftM Box get
358+ 2 -> liftM2 Ctor get get
359+ 3 -> liftM Enum get
360+ 4 -> return Box
361361 5 -> liftM Link get
362362 6 -> liftM2 Cycle get get
363363 7 -> liftM Manager get
compiler/src/Generate/JavaScript.hs+12−12
@@ -149,9 +149,9 @@ addGlobalHelp mode graph global state =
149149 var global (Expr.generateTailDef mode name argNames body)
150150 )
151151
152− Opt.Ctor name index arity ->
152+ Opt.Ctor index arity ->
153153 addStmt state (
154− var global (Expr.generateCtor mode name index arity)
154+ var global (Expr.generateCtor mode global index arity)
155155 )
156156
157157 Opt.Link linkedGlobal ->
@@ -176,14 +176,14 @@ addGlobalHelp mode graph global state =
176176 _ ->
177177 addBuilder (addDeps clientDeps state) (generateKernel mode clientChunks)
178178
179− Opt.Enum name index ->
179+ Opt.Enum index ->
180180 addStmt state (
181− generateEnum mode global name index
181+ generateEnum mode global index
182182 )
183183
184− Opt.Box name ->
184+ Opt.Box ->
185185 addStmt state (
186− generateBox mode global name
186+ generateBox mode global
187187 )
188188
189189 Opt.PortIncoming decoder deps ->
@@ -323,13 +323,13 @@ addChunk mode builder chunk =
323323-- GENERATE ENUM
324324
325325
326−generateEnum :: Mode.Mode -> Opt.Global -> N.Name -> Index.ZeroBased -> JS.Stmt
327−generateEnum mode (Opt.Global home name) ctorName index =
326+generateEnum :: Mode.Mode -> Opt.Global -> Index.ZeroBased -> JS.Stmt
327+generateEnum mode global@(Opt.Global home name) index =
328328 let
329329 definition =
330330 case mode of
331331 Mode.Dev _ _ ->
332− Expr.codeToExpr (Expr.generateCtor mode ctorName index 0)
332+ Expr.codeToExpr (Expr.generateCtor mode global index 0)
333333
334334 Mode.Prod _ _ ->
335335 JS.Int (Index.toMachine index)
@@ -341,13 +341,13 @@ generateEnum mode (Opt.Global home name) ctorName index =
341341-- GENERATE BOX
342342
343343
344−generateBox :: Mode.Mode -> Opt.Global -> N.Name -> JS.Stmt
345−generateBox mode (Opt.Global home name) ctorName =
344+generateBox :: Mode.Mode -> Opt.Global -> JS.Stmt
345+generateBox mode global@(Opt.Global home name) =
346346 let
347347 definition =
348348 case mode of
349349 Mode.Dev _ _ ->
350− Expr.codeToExpr (Expr.generateCtor mode ctorName Index.first 1)
350+ Expr.codeToExpr (Expr.generateCtor mode global Index.first 1)
351351
352352 Mode.Prod _ _ ->
353353 JS.Ref (Name.fromGlobal ModuleName.basics N.identity)
compiler/src/Generate/JavaScript/Expression.hs+2−2
@@ -248,8 +248,8 @@ toChar =
248248-- CTOR
249249
250250
251−generateCtor :: Mode.Mode -> N.Name -> Index.ZeroBased -> Int -> Code
252−generateCtor mode name index arity =
251+generateCtor :: Mode.Mode -> Opt.Global -> Index.ZeroBased -> Int -> Code
252+generateCtor mode (Opt.Global _ name) index arity =
253253 let
254254 argNames =
255255 Index.indexedMap (\i _ -> Name.fromIndex i) [1 .. arity]
compiler/src/Optimize/Module.hs+3−3
@@ -73,9 +73,9 @@ addCtorNode home opts nodes (Can.Ctor name index numArgs _) =
7373 let
7474 node =
7575 case opts of
76− Can.Normal -> Opt.Ctor name index numArgs
77− Can.Unbox -> Opt.Box name
78− Can.Enum -> Opt.Enum name index
76+ Can.Normal -> Opt.Ctor index numArgs
77+ Can.Unbox -> Opt.Box
78+ Can.Enum -> Opt.Enum index
7979 in
8080 Map.insert (Opt.Global home name) node nodes
8181