From 61d8dc50f4eebae61963153a8d86da50bbb442a3 Mon Sep 17 00:00:00 2001 From: simonpj Date: Mon, 13 Jan 2003 14:12:31 +0000 Subject: [PATCH] [project @ 2003-01-13 14:12:31 by simonpj] Bale out earlier if main is not in scope (fixes several test failures) --- ghc/compiler/typecheck/TcRnDriver.lhs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ghc/compiler/typecheck/TcRnDriver.lhs b/ghc/compiler/typecheck/TcRnDriver.lhs index 2a0568a..8028df4 100644 --- a/ghc/compiler/typecheck/TcRnDriver.lhs +++ b/ghc/compiler/typecheck/TcRnDriver.lhs @@ -1078,14 +1078,16 @@ check_main ghci_mode tcg_env | mod_name /= mAIN_Name = return (tcg_env, emptyFVs) + -- Check that 'main' is in scope + -- It might be imported from another module! + -- + -- We use a guard for this (rather than letting lookupSrcName fail) + -- because it's not an error in ghci) | not (main_RDR_Unqual `elemRdrEnv` rdr_env) = do { complain_no_main; return (tcg_env, emptyFVs) } | otherwise - = do { -- Check that 'main' is in scope - -- It might be imported from another module! - main_name <- lookupSrcName main_RDR_Unqual ; - failIfErrsM ; + = do { main_name <- lookupSrcName main_RDR_Unqual ; tcg_env <- importSupportingDecls (unitFV runIOName) ; setGblEnv tcg_env $ do { @@ -1116,8 +1118,10 @@ check_main ghci_mode tcg_env rdr_env = tcg_rdr_env tcg_env complain_no_main | ghci_mode == Interactive = return () - | otherwise = addErr noMainMsg + | otherwise = failWithTc noMainMsg -- In interactive mode, don't worry about the absence of 'main' + -- In other modes, fail altogether, so that we don't go on + -- and complain a second time when processing the export list. mainCtxt = ptext SLIT("When checking the type of 'main'") noMainMsg = ptext SLIT("No 'main' defined in module Main") -- 1.7.10.4