X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcSplice.lhs;h=bc10f3e56ea65aa1d82e85d267f1112ebaf58fca;hb=1723d79af0638a1e96e2ae9e41208f7b86872bbc;hp=b675cf9033f6dcb5c182b1abd45a94bcb0715305;hpb=cdce647711c0f46f5799b24de087622cb77e647f;p=ghc-hetmet.git diff --git a/compiler/typecheck/TcSplice.lhs b/compiler/typecheck/TcSplice.lhs index b675cf9..bc10f3e 100644 --- a/compiler/typecheck/TcSplice.lhs +++ b/compiler/typecheck/TcSplice.lhs @@ -394,17 +394,17 @@ runMeta convert expr -- exception-cacthing thing so that if there are any lurking -- exceptions in the data structure returned by hval, we'll -- encounter them inside the try - either_tval <- tryAllM $ do - { th_syn <- TH.runQ (unsafeCoerce# hval) - ; case convert (getLoc expr) th_syn of - Left err -> do { addErrTc err; return Nothing } - Right hs_syn -> return (Just hs_syn) } - - ; case either_tval of - Right (Just v) -> return v - Right Nothing -> failM -- Error already in Tc monad - Left exn -> failWithTc (mk_msg "run" exn) -- Exception - }}} + either_th_syn <- tryAllM $ tryM $ TH.runQ $ unsafeCoerce# hval + ; case either_th_syn of + Left exn -> failWithTc (mk_msg "run" exn) + Right (Left exn) -> failM -- Error already in Tc monad + Right (Right th_syn) -> do + { either_hs_syn <- tryAllM $ return $! convert (getLoc expr) th_syn + ; case either_hs_syn of + Left exn -> failWithTc (mk_msg "interpret result of" exn) + Right (Left err) -> do { addErrTc err; failM } + Right (Right hs_syn) -> return hs_syn + }}}} where mk_msg s exn = vcat [text "Exception when trying to" <+> text s <+> text "compile-time code:", nest 2 (text (Panic.showException exn)), @@ -501,8 +501,7 @@ lookupThName th_name@(TH.Name occ flavour) Nothing | not (isSrcRdrName rdr_name) -- Exact, Orig -> lookupImportedName rdr_name | otherwise -- Unqual, Qual - -> do { - mb_name <- lookupSrcOcc_maybe rdr_name + -> do { mb_name <- lookupSrcOcc_maybe rdr_name ; case mb_name of Just name -> return name Nothing -> failWithTc (notInScope th_name) }