git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Use field names in binders
commit8a713131c69663b772d3769a7a6e53644c08f362 authorGary Burgess <gary.burgess@gmail.com> dateSat 24 Jan 2015, 02:09 (12 years ago) parentb11114e
1 file changed+7−7
src/Language/PureScript/CodeGen/JS.hs+7−7
src/Language/PureScript/CodeGen/JS.hs+7−7
@@ -274,8 +274,8 @@ binderToJs _ varName done (VarBinder _ ident) =
274274 return (JSVariableIntroduction (identToJs ident) (Just (JSVar varName)) : done)
275275binderToJs m varName done (ConstructorBinder (_, _, _, Just IsNewtype) _ _ [b]) =
276276 binderToJs m varName done b
277−binderToJs m varName done (ConstructorBinder (_, _, _, Just (IsConstructor ctorType _)) _ ctor bs) = do
278− js <- go 0 done bs
277+binderToJs m varName done (ConstructorBinder (_, _, _, Just (IsConstructor ctorType fields)) _ ctor bs) = do
278+ js <- go (zip fields bs) done
279279 return $ case ctorType of
280280 ProductType -> js
281281 SumType ->
@@ -283,13 +283,13 @@ binderToJs m varName done (ConstructorBinder (_, _, _, Just (IsConstructor ctorT
283283 (JSBlock js)
284284 Nothing]
285285 where
286− go :: (Functor m, Applicative m, Monad m) => Integer -> [JS] -> [Binder Ann] -> SupplyT m [JS]
287− go _ done' [] = return done'
288− go index done' (binder:bs') = do
286+ go :: (Functor m, Applicative m, Monad m) => [(Ident, Binder Ann)] -> [JS] -> SupplyT m [JS]
287+ go [] done' = return done'
288+ go ((field, binder) : remain) done' = do
289289 argVar <- freshName
290− done'' <- go (index + 1) done' bs'
290+ done'' <- go remain done'
291291 js <- binderToJs m argVar done'' binder
292− return (JSVariableIntroduction argVar (Just (JSAccessor ("value" ++ show index) (JSVar varName))) : js)
292+ return (JSVariableIntroduction argVar (Just (JSAccessor (identToJs field) (JSVar varName))) : js)
293293binderToJs m varName done binder@(ConstructorBinder _ _ ctor _) | isCons ctor = do
294294 let (headBinders, tailBinder) = uncons [] binder
295295 numberOfHeadBinders = fromIntegral $ length headBinders