@@ -200,7 +200,7 @@ cgDef (SFun name argNames _ expr) = do
200 case r of
200 case r of
201 Nothing -> terminate $ Unreachable []
201 Nothing -> terminate $ Unreachable []
202 Just r' -> terminate $ Ret (Just r') [])
202 Just r' -> terminate $ Ret (Just r') [])
203− (CGR arch (Name . show $ name))
203+ (CGR arch (show name))
204 (CGS 0 nextGlobal (Name "begin") [] (map (Just . LocalReference . Name . show) argNames) S.empty)
204 (CGS 0 nextGlobal (Name "begin") [] (map (Just . LocalReference . Name . show) argNames) S.empty)
205 entryTerm = case bbs of
205 entryTerm = case bbs of
206 [] -> Do $ Ret Nothing []
206 [] -> Do $ Ret Nothing []
@@ -235,10 +235,13 @@ data CGS = CGS { nextName :: Word
237data CGR = CGR { target :: String
237data CGR = CGR { target :: String
238− , funcName :: Name }
238+ , funcName :: String }
240type Codegen = RWS CGR CGW CGS
240type Codegen = RWS CGR CGW CGS
242+getFuncName :: Codegen String
243+getFuncName = asks funcName
242getGlobalUnName :: Codegen Name
245getGlobalUnName :: Codegen Name
243getGlobalUnName = do
246getGlobalUnName = do
244 i <- gets nextGlobalName
247 i <- gets nextGlobalName
@@ -532,7 +535,8 @@ cgChainCase caseValPtr defExp alts = do
532 newBlock elseName
535 newBlock elseName
533 return result
536 return result
534 modify $ \s -> s { lexenv = initEnv }
537 modify $ \s -> s { lexenv = initEnv }
538+ fname <- getFuncName
535− defaultVal <- cgExpr (fromMaybe (SError "Inexhaustive case failure") defExp)
539+ defaultVal <- cgExpr (fromMaybe (SError $ "Inexhaustive case failure in " ++ fname) defExp)
536 defaultBlock <- gets currentBlockName
540 defaultBlock <- gets currentBlockName
537 defaultEnv <- gets lexenv
541 defaultEnv <- gets lexenv
538 defResult <- case defaultVal of
542 defResult <- case defaultVal of
@@ -560,7 +564,8 @@ finishCase initEnv exitBlockName results = do
560cgDefaultAlt :: Name -> Name -> Maybe SExp -> Codegen (Maybe (Operand, Name, Env))
564cgDefaultAlt :: Name -> Name -> Maybe SExp -> Codegen (Maybe (Operand, Name, Env))
561cgDefaultAlt exitName name exp = do
565cgDefaultAlt exitName name exp = do
562 newBlock name
566 newBlock name
567+ fname <- getFuncName
563− val <- cgExpr (fromMaybe (SError "Inexhaustive case failure") exp)
568+ val <- cgExpr (fromMaybe (SError $ "Inexhaustive case failure in " ++ fname) exp)
564 env <- gets lexenv
569 env <- gets lexenv
565 block <- gets currentBlockName
570 block <- gets currentBlockName
566 case val of
571 case val of