From: simonpj Date: Mon, 13 Jan 2003 14:12:31 +0000 (+0000) Subject: [project @ 2003-01-13 14:12:31 by simonpj] X-Git-Tag: Approx_11550_changesets_converted~1261 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=61d8dc50f4eebae61963153a8d86da50bbb442a3;p=ghc-hetmet.git [project @ 2003-01-13 14:12:31 by simonpj] Bale out earlier if main is not in scope (fixes several test failures) --- 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")