on master help sign in
javascript: check for keywords as identifiers
2407cbbraichoo
src/IRTS/CodegenJavaScript.hs+50−3
@@ -51,7 +51,7 @@ codegenJavaScript definitions filename outputType = do
51
51
52translateIdentifier :: String -> String
52translateIdentifier :: String -> String
53translateIdentifier =
53translateIdentifier =
54− concatMap replaceBadChars
54+ replaceReserved . concatMap replaceBadChars
55 where replaceBadChars :: Char -> String
55 where replaceBadChars :: Char -> String
56 replaceBadChars ' ' = "_"
56 replaceBadChars ' ' = "_"
57 replaceBadChars '_' = "__"
57 replaceBadChars '_' = "__"
@@ -84,6 +84,53 @@ translateIdentifier =
84 replaceBadChars c
84 replaceBadChars c
85 | isDigit c = "_" ++ [c] ++ "_"
85 | isDigit c = "_" ++ [c] ++ "_"
86 | otherwise = [c]
86 | otherwise = [c]
87+ replaceReserved s
88+ | s `elem` reserved = '_' : s
89+ | otherwise = s
90+ reserved = [ "break"
91+ , "case"
92+ , "catch"
93+ , "continue"
94+ , "debugger"
95+ , "default"
96+ , "delete"
97+ , "do"
98+ , "else"
99+ , "finally"
100+ , "for"
101+ , "function"
102+ , "if"
103+ , "in"
104+ , "instanceof"
105+ , "new"
106+ , "return"
107+ , "switch"
108+ , "this"
109+ , "throw"
110+ , "try"
111+ , "typeof"
112+ , "var"
113+ , "void"
114+ , "while"
115+ , "with"
116+
117+ , "class"
118+ , "enum"
119+ , "export"
120+ , "extends"
121+ , "import"
122+ , "super"
123+
124+ , "implements"
125+ , "interface"
126+ , "let"
127+ , "package"
128+ , "private"
129+ , "protected"
130+ , "public"
131+ , "static"
132+ , "yield"
133+ ]
87
134
88translateNamespace :: Name -> [String]
135translateNamespace :: Name -> [String]
89translateNamespace (UN _) = [idrNamespace]
136translateNamespace (UN _) = [idrNamespace]
@@ -112,8 +159,8 @@ translateConstant c =
112
159
113translateParameterlist =
160translateParameterlist =
114 map translateParameter
161 map translateParameter
115− where translateParameter (MN i name) = name ++ show i
162+ where translateParameter (MN i name) = translateIdentifier name ++ show i
116− translateParameter (UN name) = name
163+ translateParameter (UN name) = translateIdentifier name
117
164
118translateDeclaration :: ([String], SDecl) -> String
165translateDeclaration :: ([String], SDecl) -> String
119translateDeclaration (path, SFun name params stackSize body) =
166translateDeclaration (path, SFun name params stackSize body) =