@@ -224,7 +224,7 @@ codegenJavaScript target definitions filename outputType = do
224224 ("#!/usr/bin/env node\n", "-node")
225225 JavaScript ->
226226 ("", "-browser")
227− path <- getDataDir
227+ path <- getDataDir
228228 idrRuntime <- readFile $ path ++ "/js/Runtime-common.js"
229229 tgtRuntime <- readFile $ concat [path, "/js/Runtime", runtime, ".js"]
230230 writeFile filename $ intercalate "\n" $ [ header
@@ -246,19 +246,22 @@ codegenJavaScript target definitions filename outputType = do
246246 mainLoop :: String
247247 mainLoop = compileJS $
248248 JSSeq [ JSAlloc "main" $ Just $ JSFunction [] (
249− jsTailcall $ jsCall "__IDR__runMain0" []
249+ jsTailcall $ jsCall mainFun []
250250 )
251251 , jsCall "main" []
252252 ]
253253
254+ mainFun :: String
255+ mainFun = idrNamespace ++ translateName (MN 0 "runMain")
256+
254257translateIdentifier :: String -> String
255258translateIdentifier =
256259 replaceReserved . concatMap replaceBadChars
257260 where replaceBadChars :: Char -> String
258261 replaceBadChars c
259− | ' ' <- c = "_"
260− | '_' <- c = "__"
261− | isDigit c = "_" ++ [c] ++ "_"
262+ | ' ' <- c = "_"
263+ | '_' <- c = "__"
264+ | isDigit c = '_' : show (ord c)
262265 | not (isLetter c && isAscii c) = '_' : show (ord c)
263266 | otherwise = [c]
264267 replaceReserved s
@@ -317,24 +320,24 @@ translateNamespace (SN name) = idrNamespace ++ translateSpecialName name
317320translateNamespace NErased = idrNamespace
318321
319322translateName :: Name -> String
320−translateName (UN name) = translateIdentifier name
321−translateName (NS name _) = translateName name
322−translateName (MN i name) = translateIdentifier name ++ show i
323−translateName (SN name) = translateSpecialName name
324−translateName NErased = ""
323+translateName (UN name) = 'u' : translateIdentifier name
324+translateName (NS name _) = 'n' : translateName name
325+translateName (MN i name) = 'm' : translateIdentifier name ++ show i
326+translateName (SN name) = 's' : translateSpecialName name
327+translateName NErased = "e"
325328
326329translateSpecialName :: SpecialName -> String
327330translateSpecialName name
328331 | WhereN i m n <- name =
329− "_where" ++ show i ++ "_" ++ translateName m ++ translateName n
332+ 'w' : translateName m ++ translateName n ++ show i
330333 | InstanceN n s <- name =
331− "_inst_" ++ translateName n ++ concatMap translateIdentifier s
334+ 'i' : translateName n ++ concatMap translateIdentifier s
332335 | ParentN n s <- name =
333− "_parent_" ++ translateName n ++ translateIdentifier s
336+ 'p' : translateName n ++ translateIdentifier s
334337 | MethodN n <- name =
335− "_meth_" ++ translateName n
338+ 'm' : translateName n
336339 | CaseN n <- name =
337− "_case_" ++ translateName n
340+ 'c' : translateName n
338341
339342translateConstant :: Const -> JS
340343translateConstant (I i) = JSNum (JSInt i)
@@ -441,7 +444,8 @@ translateDeclaration (path, SFun name params stackSize body)
441444 assignVar n s = JSAlloc (jsVar n) (Just $ JSRaw s)
442445
443446 assignAux :: (LVar, String) -> JS
444− assignAux (var, val) = JSAssign (JSRaw $ translateVariableName var) (JSRaw val)
447+ assignAux (var, val) =
448+ JSAssign (JSRaw $ translateVariableName var) (JSRaw val)
445449
446450 p :: [String]
447451 p = map translateName params