Commit 9ba922ee authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Allow the old [$foo| ... |] syntax for quasi-quotes

This is just a backward-compatibility thing, to be removed
eventually.
parent 14c80817
......@@ -308,6 +308,10 @@ $tab+ { warn Opt_WarnTabs (text "Warning: Tab character") }
\$ @varid / { ifExtension thEnabled } { skip_one_varid ITidEscape }
"$(" / { ifExtension thEnabled } { token ITparenEscape }
-- For backward compatibility, accept the old dollar syntax
"[$" @varid "|" / { ifExtension qqEnabled }
{ lex_quasiquote_tok }
"[" @varid "|" / { ifExtension qqEnabled }
{ lex_quasiquote_tok }
}
......
......@@ -664,7 +664,17 @@ runQuasiQuote :: Outputable hs_syn
-> MetaOps th_syn hs_syn
-> RnM hs_syn
runQuasiQuote (HsQuasiQuote quoter q_span quote) quote_selector meta_ty meta_ops
= do { quoter' <- lookupOccRn quoter
= do { -- Drop the leading "$" from the quoter name, if present
-- This is old-style syntax, now deprecated
-- NB: when removing this backward-compat, remove
-- the matching code in Lexer.x (around line 310)
let occ_str = occNameString (rdrNameOcc quoter)
; quoter <- ASSERT( not (null occ_str) ) -- Lexer ensures this
if head occ_str /= '$' then return quoter
else do { addWarn (deprecatedDollar quoter)
; return (mkRdrUnqual (mkVarOcc (tail occ_str))) }
; quoter' <- lookupOccRn quoter
-- 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).
......@@ -709,6 +719,12 @@ quoteStageError :: Name -> SDoc
quoteStageError quoter
= sep [ptext (sLit "GHC stage restriction:") <+> ppr quoter,
nest 2 (ptext (sLit "is used in a quasiquote, and must be imported, not defined locally"))]
deprecatedDollar :: RdrName -> SDoc
deprecatedDollar quoter
= hang (ptext (sLit "Deprecated syntax:"))
2 (ptext (sLit "quasiquotes no longer need a dollar sign:")
<+> ppr quoter)
\end{code}
......
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