on master help sign in
javascript: fixed broken merge
commita4178c080a6c4469a79c6bfa3721c920f2c47e26 authorraichoo <raichoo@googlemail.com> dateThu 7 Feb 2013, 20:26 (14 years ago) parentd02610a
1 file changed+44−5
src/IRTS/CodegenJavaScript.hs+44−5
src/IRTS/CodegenJavaScript.hs+44−5
@@ -349,11 +349,50 @@ translateExpression (SError msg) =
349349translateExpression (SForeign _ _ "putStr" [(FString, var)]) =
350350 "__IDRRT__.print(" ++ translateVariableName var ++ ");"
351351
352−translateExpression (SForeign _ _ fun args) =
353− fun
354− ++ "("
355− ++ intercalate "," (map (translateVariableName . snd) args)
356− ++ ");"
352+translateExpression (SForeign _ _ fun args)
353+ | "." `isPrefixOf` fun, "[]=" `isSuffixOf` fun
354+ , (obj:idx:val:[]) <- args =
355+ concat [object obj, field, index idx, assign val]
356+
357+ | "." `isPrefixOf` fun, "[]" `isSuffixOf` fun
358+ , (obj:idx:[]) <- args =
359+ concat [object obj, field, index idx]
360+
361+ | "." `isPrefixOf` fun, "=" `isSuffixOf` fun
362+ , (obj:val:[]) <- args =
363+ concat [object obj, field, assign val]
364+
365+ | "." `isPrefixOf` fun
366+ , (obj:[]) <- args =
367+ object obj ++ field
368+
369+ | "." `isPrefixOf` fun
370+ , (obj:[(FUnit, _)]) <- args =
371+ concat [object obj, method, "()"]
372+
373+ | "." `isPrefixOf` fun
374+ , (obj:as) <- args =
375+ concat [object obj, method, arguments as]
376+
377+ | "[]=" == fun
378+ , (idx:val:[]) <- args =
379+ concat [array, index idx, assign val]
380+
381+ | "[]" == fun
382+ , (idx:[]) <- args =
383+ array ++ index idx
384+
385+ | otherwise = fun ++ arguments args
386+ where
387+ name = filter (`notElem` "[]=") fun
388+ method = name
389+ field = name
390+ array = name
391+ object o = translateVariableName (snd o)
392+ index i = "[" ++ translateVariableName (snd i) ++ "]"
393+ assign v = '=' : translateVariableName (snd v)
394+ arguments as =
395+ '(' : intercalate "," (map (translateVariableName . snd) as) ++ ")"
357396
358397translateExpression (SChkCase var cases) =
359398 "(function(e){\n"