@@ -113,7 +113,7 @@ compileJS (JSNew name args) =
113113 "new " ++ name ++ "(" ++ intercalate "," (map compileJS args) ++ ")"
114114
115115compileJS (JSError exc) =
116− "(function(){throw '" ++ exc ++ "';})()"
116+ "throw new Error(\"" ++ exc ++ "\")"
117117
118118compileJS (JSOp op lhs rhs) =
119119 compileJS lhs ++ " " ++ op ++ " " ++ compileJS rhs
@@ -238,6 +238,8 @@ jsLet name value body =
238238 )
239239 ) [value]
240240
241+jsError :: String -> JS
242+jsError err = JSApp (JSFunction [] (JSError err)) []
241243
242244jsSubst :: JS -> JS -> JS -> JS
243245jsSubst var new old
@@ -373,6 +375,7 @@ isJSConstant js
373375 | otherwise = False
374376
375377inlineJS :: JS -> JS
378+inlineJS (JSReturn (JSApp (JSFunction [] err@(JSError _)) [])) = err
376379inlineJS (JSReturn (JSApp (JSFunction ["cse"] body) [val@(JSVar _)])) =
377380 inlineJS $ jsSubst (JSIdent "cse") val body
378381
@@ -1208,7 +1211,7 @@ translateConstant PtrType = JSType JSPtrTy
12081211translateConstant Forgot = JSType JSForgotTy
12091212translateConstant (BI i) = jsBigInt $ JSString (show i)
12101213translateConstant c =
1211− JSError $ "Unimplemented Constant: " ++ show c
1214+ jsError $ "Unimplemented Constant: " ++ show c
12121215
12131216translateDeclaration :: (String, SDecl) -> [JS]
12141217translateDeclaration (path, SFun name params stackSize body)
@@ -1500,7 +1503,7 @@ translateExpression (SOp op vars)
15001503 invokeMeth obj meth args = jsMeth (JSVar obj) meth (map JSVar args)
15011504
15021505translateExpression (SError msg) =
1503− JSError msg
1506+ jsError msg
15041507
15051508translateExpression (SForeign _ _ "putStr" [(FString, var)]) =
15061509 jsCall (idrRTNamespace ++ "print") [JSVar var]
@@ -1554,14 +1557,14 @@ translateExpression (SProj var i) =
15541557translateExpression SNothing = JSNull
15551558
15561559translateExpression e =
1557− JSError $ "Not yet implemented: " ++ filter (/= '\'') (show e)
1560+ jsError $ "Not yet implemented: " ++ filter (/= '\'') (show e)
15581561
15591562data FFI = FFICode Char | FFIArg Int | FFIError String
15601563
15611564ffi :: String -> [String] -> JS
15621565ffi code args = let parsed = ffiParse code in
15631566 case ffiError parsed of
1564− Just err -> JSError err
1567+ Just err -> jsError err
15651568 Nothing -> JSRaw $ renderFFI parsed args
15661569 where
15671570 ffiParse :: String -> [FFI]