@@ -349,11 +349,50 @@ translateExpression (SError msg) =
349translateExpression (SForeign _ _ "putStr" [(FString, var)]) =
349translateExpression (SForeign _ _ "putStr" [(FString, var)]) =
350 "__IDRRT__.print(" ++ translateVariableName var ++ ");"
350 "__IDRRT__.print(" ++ translateVariableName var ++ ");"
352−translateExpression (SForeign _ _ fun args) =
352+translateExpression (SForeign _ _ fun args)
353− fun
353+ | "." `isPrefixOf` fun, "[]=" `isSuffixOf` fun
354− ++ "("
354+ , (obj:idx:val:[]) <- args =
355+ concat [object obj, field, index idx, assign val]
357+ | "." `isPrefixOf` fun, "[]" `isSuffixOf` fun
358+ , (obj:idx:[]) <- args =
359+ concat [object obj, field, index idx]
361+ | "." `isPrefixOf` fun, "=" `isSuffixOf` fun
362+ , (obj:val:[]) <- args =
363+ concat [object obj, field, assign val]
365+ | "." `isPrefixOf` fun
366+ , (obj:[]) <- args =
369+ | "." `isPrefixOf` fun
370+ , (obj:[(FUnit, _)]) <- args =
371+ concat [object obj, method, "()"]
373+ | "." `isPrefixOf` fun
374+ , (obj:as) <- args =
375+ concat [object obj, method, arguments as]
378+ , (idx:val:[]) <- args =
379+ concat [array, index idx, assign val]
382+ , (idx:[]) <- args =
385+ | otherwise = fun ++ arguments args
387+ name = filter (`notElem` "[]=") fun
391+ object o = translateVariableName (snd o)
392+ index i = "[" ++ translateVariableName (snd i) ++ "]"
393+ assign v = '=' : translateVariableName (snd v)
355− ++ intercalate "," (map (translateVariableName . snd) args)
395+ '(' : intercalate "," (map (translateVariableName . snd) as) ++ ")"
358translateExpression (SChkCase var cases) =
397translateExpression (SChkCase var cases) =
359 "(function(e){\n"
398 "(function(e){\n"