X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fparser%2FParser.y.pp;h=167c8b6118e2c238163ebad8962c2ed78901eb42;hb=bf61a20559071d042ebeabb3c65383d1c90dd35c;hp=cfaa8f88d3ee79ca86428b58b1b56a6a02cd18c8;hpb=87c0577a410487fb1255fa5015c6b4f8eaa66ca0;p=ghc-hetmet.git diff --git a/compiler/parser/Parser.y.pp b/compiler/parser/Parser.y.pp index cfaa8f8..167c8b6 100644 --- a/compiler/parser/Parser.y.pp +++ b/compiler/parser/Parser.y.pp @@ -27,6 +27,7 @@ import HscTypes ( IsBootInterface, DeprecTxt ) import Lexer import RdrName import TysWiredIn ( unitTyCon, unitDataCon, tupleTyCon, tupleCon, nilDataCon, + unboxedSingletonTyCon, unboxedSingletonDataCon, listTyCon_RDR, parrTyCon_RDR, consDataCon_RDR ) import Type ( funTyCon ) import ForeignCall ( Safety(..), CExportSpec(..), CLabelString, @@ -336,6 +337,7 @@ TH_ID_SPLICE { L _ (ITidEscape _) } -- $x '$(' { L _ ITparenEscape } -- $( exp ) TH_VAR_QUOTE { L _ ITvarQuote } -- 'x TH_TY_QUOTE { L _ ITtyQuote } -- ''T +TH_QUASIQUOTE { L _ (ITquasiQuote _) } %monad { P } { >>= } { return } %lexer { lexer } { L _ ITeof } @@ -1220,7 +1222,7 @@ decl :: { Located (OrdList (LHsDecl RdrName)) } PatBind (LL $ BangPat pat) (unLoc $3) placeHolderType placeHolderNames)) } } | infixexp opt_sig rhs {% do { r <- checkValDef $1 $2 $3; - return (LL $ unitOL (LL $ ValD r)) } } + return $! (LL $! (unitOL $! (LL $ ValD r))) } } | docdecl { LL $ unitOL $1 } rhs :: { Located (GRHSs RdrName) } @@ -1367,6 +1369,11 @@ aexp2 :: { LHsExpr RdrName } (getTH_ID_SPLICE $1)))) } -- $x | '$(' exp ')' { LL $ HsSpliceE (mkHsSplice $2) } -- $( exp ) + | TH_QUASIQUOTE { let { loc = getLoc $1 + ; ITquasiQuote (quoter, quote, quoteSpan) = unLoc $1 + ; quoterId = mkUnqual varName quoter + } + in sL loc $ HsQuasiQuoteE (mkHsQuasiQuote quoterId quoteSpan quote) } | TH_VAR_QUOTE qvar { LL $ HsBracket (VarBr (unLoc $2)) } | TH_VAR_QUOTE qcon { LL $ HsBracket (VarBr (unLoc $2)) } | TH_TY_QUOTE tyvar { LL $ HsBracket (VarBr (unLoc $2)) } @@ -1655,6 +1662,8 @@ con :: { Located RdrName } sysdcon :: { Located DataCon } -- Wired in data constructors : '(' ')' { LL unitDataCon } | '(' commas ')' { LL $ tupleCon Boxed $2 } + | '(#' '#)' { LL $ unboxedSingletonDataCon } + | '(#' commas '#)' { LL $ tupleCon Unboxed $2 } | '[' ']' { LL nilDataCon } conop :: { Located RdrName } @@ -1672,6 +1681,8 @@ gtycon :: { Located RdrName } -- A "general" qualified tycon : oqtycon { $1 } | '(' ')' { LL $ getRdrName unitTyCon } | '(' commas ')' { LL $ getRdrName (tupleTyCon Boxed $2) } + | '(#' '#)' { LL $ getRdrName unboxedSingletonTyCon } + | '(#' commas '#)' { LL $ getRdrName (tupleTyCon Unboxed $2) } | '(' '->' ')' { LL $ getRdrName funTyCon } | '[' ']' { LL $ listTyCon_RDR } | '[:' ':]' { LL $ parrTyCon_RDR }