@@ -210,7 +210,7 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
213− if isIndexer body'
213+ if isGet body'
214 then [Inline]
214 then [Inline]
216 (returnBlock body')
216 (returnBlock body')
@@ -231,9 +231,9 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
231 isAccessor :: Expr Ann -> Bool
231 isAccessor :: Expr Ann -> Bool
232 isAccessor Accessor {} = True
232 isAccessor Accessor {} = True
233 isAccessor _ = False
233 isAccessor _ = False
234− isIndexer :: Cpp -> Bool
234+ isGet :: Cpp -> Bool
235− isIndexer (CppIndexer (CppSymbol _) (CppVar _)) = True
235+ isGet (CppGet (CppSymbol _) (CppVar _)) = True
236− isIndexer _ = False
236+ isGet _ = False
237 classes =
237 classes =
239 (CppVar . fst <$> arg' : args')
239 (CppVar . fst <$> arg' : args')
@@ -441,13 +441,13 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
441 valueToCpp (Literal _ (ObjectLiteral ps)) =
441 valueToCpp (Literal _ (ObjectLiteral ps)) =
442 CppMapLiteral Record <$>
442 CppMapLiteral Record <$>
443 mapM (sndM valueToCpp) ((\(k, v) -> (CppSymbol k, v)) <$> sortBy (compare `on` fst) ps)
443 mapM (sndM valueToCpp) ((\(k, v) -> (CppSymbol k, v)) <$> sortBy (compare `on` fst) ps)
444− valueToCpp (Accessor _ prop val) = CppIndexer <$> pure (CppSymbol prop) <*> valueToCpp val
444+ valueToCpp (Accessor _ prop val) = CppGet <$> pure (CppSymbol prop) <*> valueToCpp val
445 -- TODO: use a more efficient way of copying/updating the map?
445 -- TODO: use a more efficient way of copying/updating the map?
446 valueToCpp (ObjectUpdate (_, _, Just ty, _) obj ps) = do
446 valueToCpp (ObjectUpdate (_, _, Just ty, _) obj ps) = do
447 obj' <- valueToCpp obj
447 obj' <- valueToCpp obj
448 updatedFields <- mapM (sndM valueToCpp) ps
448 updatedFields <- mapM (sndM valueToCpp) ps
449 let origKeys = (allKeys ty) \\ (fst <$> updatedFields)
449 let origKeys = (allKeys ty) \\ (fst <$> updatedFields)
450− origFields = (\key -> (key, CppIndexer (CppSymbol key) obj')) <$> origKeys
450+ origFields = (\key -> (key, CppGet (CppSymbol key) obj')) <$> origKeys
452 CppMapLiteral Record $
452 CppMapLiteral Record $
453 (\(k, v) -> (CppSymbol k, v)) <$> sortBy (compare `on` fst) (origFields ++ updatedFields)
453 (\(k, v) -> (CppSymbol k, v)) <$> sortBy (compare `on` fst) (origFields ++ updatedFields)
@@ -675,7 +675,7 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
675 CppVariableIntroduction
675 CppVariableIntroduction
676 (propVar, Nothing)
676 (propVar, Nothing)
678− (Just $ CppIndexer (CppSymbol prop) (CppVar varName)) :
678+ (Just $ CppGet (CppSymbol prop) (CppVar varName)) :
680 literalToBinderCpp varName done (ArrayLiteral bs) = do
680 literalToBinderCpp varName done (ArrayLiteral bs) = do
681 cpp <- go done 0 bs
681 cpp <- go done 0 bs
@@ -837,12 +837,10 @@ optIndexers :: [(Cpp, Cpp)] -> Cpp -> Cpp
837optIndexers classes = everywhereOnCpp dictIndexerToEnum
837optIndexers classes = everywhereOnCpp dictIndexerToEnum
839 dictIndexerToEnum :: Cpp -> Cpp
839 dictIndexerToEnum :: Cpp -> Cpp
840− dictIndexerToEnum (CppIndexer (CppSymbol prop) dict)
840+ dictIndexerToEnum (CppGet (CppSymbol prop) dict)
841 | Just cls <- lookup dict classes =
841 | Just cls <- lookup dict classes =
844− (CppIndexer (CppAccessor (CppVar . identToCpp $ Ident prop) cls) (CppCast (mapType 0) dict))
842+ let index = CppAccessor (CppVar . identToCpp $ Ident prop) cls
845− (CppVar "second")
843+ in CppGet index dict
846 dictIndexerToEnum cpp = cpp
844 dictIndexerToEnum cpp = cpp
848---------------------------------------------------------------------------------------------------
846---------------------------------------------------------------------------------------------------