@@ -22,6 +22,7 @@ module Language.PureScript.CodeGen.JS (
22 wrapExportsContainer
22 wrapExportsContainer
25+import Data.Char (isAlpha, isAlphaNum)
25import Data.Maybe (fromMaybe, mapMaybe)
26import Data.Maybe (fromMaybe, mapMaybe)
26import Data.Function (on)
27import Data.Function (on)
@@ -132,7 +133,8 @@ valueToJs opts m e (ObjectUpdate o ps) = extendObj (valueToJs opts m e o) (map (
132valueToJs _ m _ (Constructor name) = qualifiedToJS m (Ident . runProperName) name
133valueToJs _ m _ (Constructor name) = qualifiedToJS m (Ident . runProperName) name
133valueToJs opts m e (Case values binders) = bindersToJs opts m e binders (map (valueToJs opts m e) values)
134valueToJs opts m e (Case values binders) = bindersToJs opts m e binders (map (valueToJs opts m e) values)
134valueToJs opts m e (IfThenElse cond th el) = JSConditional (valueToJs opts m e cond) (valueToJs opts m e th) (valueToJs opts m e el)
135valueToJs opts m e (IfThenElse cond th el) = JSConditional (valueToJs opts m e cond) (valueToJs opts m e th) (valueToJs opts m e el)
135−valueToJs opts m e (Accessor prop val) = JSAccessor prop (valueToJs opts m e val)
136+valueToJs opts m e (Accessor prop val) | isIdent prop = JSAccessor prop (valueToJs opts m e val)
137+ | otherwise = JSIndexer (JSStringLiteral prop) (valueToJs opts m e val)
136valueToJs opts m e (App val arg) = JSApp (valueToJs opts m e val) [valueToJs opts m e arg]
138valueToJs opts m e (App val arg) = JSApp (valueToJs opts m e val) [valueToJs opts m e arg]
137valueToJs opts m e (Let ds val) = JSApp (JSFunction Nothing [] (JSBlock (concat (mapMaybe (flip (declToJs opts m) e) ds) ++ [JSReturn $ valueToJs opts m e val]))) []
139valueToJs opts m e (Let ds val) = JSApp (JSFunction Nothing [] (JSBlock (concat (mapMaybe (flip (declToJs opts m) e) ds) ++ [JSReturn $ valueToJs opts m e val]))) []
138valueToJs opts m e (Abs (Left arg) val) = JSFunction Nothing [identToJs arg] (JSBlock [JSReturn (valueToJs opts m (bindName m arg e) val)])
140valueToJs opts m e (Abs (Left arg) val) = JSFunction Nothing [identToJs arg] (JSBlock [JSReturn (valueToJs opts m (bindName m arg e) val)])
@@ -143,6 +145,10 @@ valueToJs opts m e (PositionedValue _ val) = valueToJs opts m e val
143valueToJs _ _ _ (TypeClassDictionary _ _) = error "Type class dictionary was not replaced"
145valueToJs _ _ _ (TypeClassDictionary _ _) = error "Type class dictionary was not replaced"
144valueToJs _ _ _ _ = error "Invalid argument to valueToJs"
146valueToJs _ _ _ _ = error "Invalid argument to valueToJs"
148+isIdent :: String -> Bool
149+isIdent (first : rest) | isAlpha first && all isAlphaNum rest = True
147-- Shallow copy an object.
153-- Shallow copy an object.