on master help sign in
javascript: enhanced FFI (methods and mutations)
commit1a57a4a37e73962e40f633dad09045593fd7b60c authorraichoo <raichoo@googlemail.com> dateMon 21 Jan 2013, 00:09 (14 years ago) parent7d8b2c3
1 file changed+18−5
src/IRTS/CodegenJavaScript.hs+18−5
src/IRTS/CodegenJavaScript.hs+18−5
@@ -402,11 +402,24 @@ translateExpression _ (SError msg) =
402402translateExpression _ (SForeign _ _ "putStr" [(FString, var)]) =
403403 "__IDR__.print(" ++ translateVariableName var ++ ");"
404404
405−translateExpression _ (SForeign _ _ fun args) =
406− fun
407− ++ "("
408− ++ intercalate "," (map (translateVariableName . snd) args)
409− ++ ");"
405+translateExpression _ (SForeign _ _ fun args)
406+ | "." `isPrefixOf` fun
407+ , "=" `isSuffixOf` fun
408+ , (a:b:[]) <- args =
409+ translateVariableName (snd a) ++ fun ++ translateVariableName (snd b)
410+ | "." `isPrefixOf` fun
411+ , (a:[]) <- args = translateVariableName (snd a) ++ fun
412+ | "." `isPrefixOf` fun
413+ , (a:[(FUnit, _)]) <- args = translateVariableName (snd a) ++ fun ++ "()"
414+ | "." `isPrefixOf` fun
415+ , (a:as) <- args = translateVariableName (snd a) ++ fun
416+ ++ "("
417+ ++ intercalate "," (map (translateVariableName . snd) as)
418+ ++ ");"
419+ | otherwise = fun
420+ ++ "("
421+ ++ intercalate "," (map (translateVariableName . snd) args)
422+ ++ ");"
410423
411424translateExpression modname (SChkCase var cases) =
412425 "(function(e){\n"