Commit eb072789 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Fix Trac #3953: fail earlier when using a bogus quasiquoter

parent cfc8f7c2
......@@ -74,6 +74,7 @@ import BasicTypes
import Panic
import FastString
import Exception
import Control.Monad ( when )
import qualified Language.Haskell.TH as TH
-- THSyntax gives access to internal functions and data types
......@@ -655,15 +656,16 @@ runQuasiQuote :: Outputable hs_syn
-> RnM hs_syn
runQuasiQuote (HsQuasiQuote quoter q_span quote) quote_selector meta_ty meta_ops
= do { quoter' <- lookupOccRn quoter
-- If 'quoter' is not in scope, proceed no further
-- Otherwise lookupOcc adds an error messsage and returns
-- an "unubound name", which makes the subsequent attempt to
-- run the quote fail
--
-- We use lookupOcc rather than lookupGlobalOcc because in the
-- erroneous case of \x -> [x| ...|] we get a better error message
-- (stage restriction rather than out of scope).
; when (isUnboundName quoter') failM
-- If 'quoter' is not in scope, proceed no further
-- The error message was generated by lookupOccRn, but it then
-- succeeds with an "unbound name", which makes the subsequent
-- attempt to run the quote fail in a confusing way
-- Check that the quoter is not locally defined, otherwise the TH
-- machinery will not be able to run the quasiquote.
; this_mod <- getModule
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment