@@ -20,6 +20,7 @@ import System.Directory
21idrNamespace :: String
21idrNamespace :: String
22idrNamespace = "__IDR__"
22idrNamespace = "__IDR__"
23+idrRTNamespace = "__IDRRT__"
24data JSTarget = Node | JavaScript deriving Eq
25data JSTarget = Node | JavaScript deriving Eq
@@ -129,16 +130,16 @@ translateName (MN i name) = translateIdentifier name ++ show i
130translateConstant :: Const -> String
131translateConstant :: Const -> String
131translateConstant (I i) = show i
132translateConstant (I i) = show i
132−translateConstant (BI i) = "__IDRRT__bigInt('" ++ show i ++ "')"
133+translateConstant (BI i) = idrRTNamespace ++ "bigInt('" ++ show i ++ "')"
133translateConstant (Fl f) = show f
134translateConstant (Fl f) = show f
134translateConstant (Ch c) = show c
135translateConstant (Ch c) = show c
135translateConstant (Str s) = show s
136translateConstant (Str s) = show s
136−translateConstant (AType (ATInt ITNative)) = "__IDRRT__Int"
137+translateConstant (AType (ATInt ITNative)) = idrRTNamespace ++ "Int"
137−translateConstant StrType = "__IDRRT__String"
138+translateConstant StrType = idrRTNamespace ++ "String"
138−translateConstant (AType (ATInt ITBig)) = "__IDRRT__Integer"
139+translateConstant (AType (ATInt ITBig)) = idrRTNamespace ++ "Integer"
139−translateConstant (AType ATFloat) = "__IDRRT__Float"
140+translateConstant (AType ATFloat) = idrRTNamespace ++ "Float"
140−translateConstant PtrType = "__IDRRT__Ptr"
141+translateConstant PtrType = idrRTNamespace ++ "Ptr"
141−translateConstant Forgot = "__IDRRT__Forgot"
142+translateConstant Forgot = idrRTNamespace ++ "Forgot"
142translateConstant c =
143translateConstant c =
143 "(function(){throw 'Unimplemented Const: " ++ show c ++ "';})()"
144 "(function(){throw 'Unimplemented Const: " ++ show c ++ "';})()"
@@ -195,7 +196,7 @@ translateExpression (SApp False name vars) =
195 createTailcall $ translateFunctionCall name vars
196 createTailcall $ translateFunctionCall name vars
197translateExpression (SApp True name vars) =
198translateExpression (SApp True name vars) =
198− "new __IDRRT__Tailcall("
199+ "new " ++ idrRTNamespace ++ "Tailcall("
199 ++ "function(){\n"
200 ++ "function(){\n"
200 ++ "return " ++ translateFunctionCall name vars
201 ++ "return " ++ translateFunctionCall name vars
201 ++ ";\n})"
202 ++ ";\n})"
@@ -290,13 +291,13 @@ translateExpression (SOp op vars)
290 | (LIntStr ITNative) <- op
291 | (LIntStr ITNative) <- op
291 , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ")"
292 , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ")"
292 | (LSExt ITNative ITBig) <- op
293 | (LSExt ITNative ITBig) <- op
293− , (arg:_) <- vars = "__IDRRT__bigInt(" ++ translateVariableName arg ++ ")"
294+ , (arg:_) <- vars = idrRTNamespace ++ "bigInt(" ++ translateVariableName arg ++ ")"
294 | (LTrunc ITBig ITNative) <- op
295 | (LTrunc ITBig ITNative) <- op
295 , (arg:_) <- vars = translateVariableName arg ++ ".valueOf()"
296 , (arg:_) <- vars = translateVariableName arg ++ ".valueOf()"
296 | (LIntStr ITBig) <- op
297 | (LIntStr ITBig) <- op
297 , (arg:_) <- vars = translateVariableName arg ++ ".toString()"
298 , (arg:_) <- vars = translateVariableName arg ++ ".toString()"
298 | (LStrInt ITBig) <- op
299 | (LStrInt ITBig) <- op
299− , (arg:_) <- vars = "__IDRRT__bigInt(" ++ translateVariableName arg ++ ")"
300+ , (arg:_) <- vars = idrRTNamespace ++ "bigInt(" ++ translateVariableName arg ++ ")"
300 | LFloatStr <- op
301 | LFloatStr <- op
301 , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ")"
302 , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ")"
302 | LStrFloat <- op
303 | LStrFloat <- op
@@ -359,7 +360,7 @@ translateExpression (SError msg) =
359 "(function(){throw \'" ++ msg ++ "\';})()"
360 "(function(){throw \'" ++ msg ++ "\';})()"
361translateExpression (SForeign _ _ "putStr" [(FString, var)]) =
362translateExpression (SForeign _ _ "putStr" [(FString, var)]) =
362− "__IDRRT__print(" ++ translateVariableName var ++ ")"
363+ idrRTNamespace ++ "print(" ++ translateVariableName var ++ ")"
364translateExpression (SForeign _ _ fun args)
365translateExpression (SForeign _ _ fun args)
365 | "[]=" `isSuffixOf` fun
366 | "[]=" `isSuffixOf` fun
@@ -415,8 +416,8 @@ translateExpression (SForeign _ _ fun args)
415 '(' : intercalate "," (map generateWrapper as) ++ ")"
416 '(' : intercalate "," (map generateWrapper as) ++ ")"
417 generateWrapper (ffunc, name)
418 generateWrapper (ffunc, name)
418− | FFunction <- ffunc = "__IDRRT__ffiWrap(" ++ translateVariableName name ++ ")"
419+ | FFunction <- ffunc = idrRTNamespace ++ "ffiWrap(" ++ translateVariableName name ++ ")"
419− | FFunctionIO <- ffunc = "__IDRRT__ffiWrap(" ++ translateVariableName name ++ ")"
420+ | FFunctionIO <- ffunc = idrRTNamespace ++ "ffiWrap(" ++ translateVariableName name ++ ")"
421 generateWrapper (_, name) =
422 generateWrapper (_, name) =
422 translateVariableName name
423 translateVariableName name
@@ -436,7 +437,7 @@ translateExpression (SCase var cases) =
438translateExpression (SCon i name vars) =
439translateExpression (SCon i name vars) =
439− concat [ "new __IDRRT__Con("
440+ concat [ "new " ++ idrRTNamespace ++ "Con("
442 , intercalate "," $ map translateVariableName vars
443 , intercalate "," $ map translateVariableName vars
@@ -472,7 +473,7 @@ translateCase var (SConstCase ty e)
472 matchHelper tyName = translateTypeMatch var tyName e
473 matchHelper tyName = translateTypeMatch var tyName e
474translateCase var (SConstCase cst@(BI _) e) =
475translateCase var (SConstCase cst@(BI _) e) =
475− let cond = "__IDRRT__bigInt(" ++ var ++ ").equals(" ++ translateConstant cst ++ ")" in
476+ let cond = idrRTNamespace ++ "bigInt(" ++ var ++ ").equals(" ++ translateConstant cst ++ ")" in
476 createIfBlock cond (translateExpression e)
477 createIfBlock cond (translateExpression e)
478translateCase var (SConstCase cst e) =
479translateCase var (SConstCase cst e) =
@@ -480,7 +481,7 @@ translateCase var (SConstCase cst e) =
480 createIfBlock cond (translateExpression e)
481 createIfBlock cond (translateExpression e)
482translateCase var (SConCase a i name vars e) =
483translateCase var (SConCase a i name vars e) =
483− let isCon = var ++ " instanceof __IDRRT__Con"
484+ let isCon = var ++ " instanceof " ++ idrRTNamespace ++ "Con"
484 isI = show i ++ " == " ++ var ++ ".i"
485 isI = show i ++ " == " ++ var ++ ".i"
485 params = intercalate "," $ map (("__var_" ++) . show) [a..(a+length vars)]
486 params = intercalate "," $ map (("__var_" ++) . show) [a..(a+length vars)]
486 args = ".apply(this," ++ var ++ ".vars)"
487 args = ".apply(this," ++ var ++ ".vars)"
@@ -495,7 +496,7 @@ translateTypeMatch :: String -> String -> SExp -> String
495translateTypeMatch var ty exp =
496translateTypeMatch var ty exp =
496 let e = translateExpression exp in
497 let e = translateExpression exp in
497 createIfBlock (var
498 createIfBlock (var
498− ++ " instanceof __IDRRT__Type && "
499+ ++ " instanceof " ++ idrRTNamespace ++ "Type && "
499 ++ var ++ ".type == '"++ ty ++"'") e
500 ++ var ++ ".type == '"++ ty ++"'") e
@@ -505,7 +506,7 @@ createIfBlock cond e =
505 ++ ";\n}"
506 ++ ";\n}"
507createTailcall call =
508createTailcall call =
508− "__IDRRT__tailcall(function(){return " ++ call ++ "})"
509+ idrRTNamespace ++ "tailcall(function(){return " ++ call ++ "})"
510translateFunctionCall name vars =
511translateFunctionCall name vars =
511 concat (translateNamespace name)
512 concat (translateNamespace name)