@@ -55,6 +55,7 @@ expression :: Expr -> State Int (Expression ())
55expression (A region expr) =
55expression (A region expr) =
56 case expr of
56 case expr of
57 Var (V.Raw x) -> return $ obj x
57 Var (V.Raw x) -> return $ obj x
58 Literal lit -> return $ literal lit
59 Literal lit -> return $ literal lit
60 Range lo hi ->
61 Range lo hi ->
@@ -215,19 +216,19 @@ definition (Definition pattern expr@(A region _) _) = do
215 decl x n = varDecl x (dotSep ["$","_" ++ show n])
216 decl x n = varDecl x (dotSep ["$","_" ++ show n])
216 setup vars
217 setup vars
217 | Help.isTuple name = assign "$" : vars
218 | Help.isTuple name = assign "$" : vars
218− | otherwise = assign "$raw" : safeAssign : vars
219+ | otherwise = assign "_raw" : safeAssign : vars
220− safeAssign = varDecl "$" (CondExpr () if' (obj "$raw") exception)
221+ safeAssign = varDecl "$" (CondExpr () if' (obj "_raw") exception)
221− if' = InfixExpr () OpStrictEq (obj "$raw.ctor") (string name)
222+ if' = InfixExpr () OpStrictEq (obj "_raw.ctor") (string name)
222 exception = obj "_E.Case" `call` [ref "$moduleName", string (renderPretty region)]
223 exception = obj "_E.Case" `call` [ref "$moduleName", string (renderPretty region)]
225 do defs' <- concat <$> mapM toDef vars
226 do defs' <- concat <$> mapM toDef vars
226− return (VarDeclStmt () [assign "$"] : defs')
227+ return (VarDeclStmt () [assign "_"] : defs')
228 vars = P.boundVarList pattern
229 vars = P.boundVarList pattern
229 mkVar = A region . rawVar
230 mkVar = A region . rawVar
230− toDef y = let expr = A region $ Case (mkVar "$") [(pattern, mkVar y)]
231+ toDef y = let expr = A region $ Case (mkVar "_") [(pattern, mkVar y)]
231 in definition $ Definition (P.Var y) expr Nothing
232 in definition $ Definition (P.Var y) expr Nothing
233match :: Region -> Case.Match -> State Int [Statement ()]
234match :: Region -> Case.Match -> State Int [Statement ()]
@@ -254,9 +255,11 @@ match region mtch =
254 return [ ExprStmt () (obj "_E.Case" `call` [ref "$moduleName", string (renderPretty region)]) ]
255 return [ ExprStmt () (obj "_E.Case" `call` [ref "$moduleName", string (renderPretty region)]) ]
256 Case.Break -> return [BreakStmt () Nothing]
257 Case.Break -> return [BreakStmt () Nothing]
257 Case.Other e ->
259 Case.Other e ->
258 do e' <- expression e
260 do e' <- expression e
259 return [ ret e' ]
261 return [ ret e' ]
260 Case.Seq ms -> concat <$> mapM (match region) (dropEnd [] ms)
263 Case.Seq ms -> concat <$> mapM (match region) (dropEnd [] ms)
262 dropEnd acc [] = acc
265 dropEnd acc [] = acc