X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fparser%2FParser.y.pp;h=7104a0dfb39460f6c62a28c0321ac18f1fd740d2;hb=23d68e078bc3476cc9cd57a4b51e2b55ea2d9df0;hp=cfaa8f88d3ee79ca86428b58b1b56a6a02cd18c8;hpb=87c0577a410487fb1255fa5015c6b4f8eaa66ca0;p=ghc-hetmet.git diff --git a/compiler/parser/Parser.y.pp b/compiler/parser/Parser.y.pp index cfaa8f8..7104a0d 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 } @@ -1966,7 +1977,7 @@ comb4 a b c d = combineSrcSpans (getLoc a) $ combineSrcSpans (getLoc b) $ -- strict constructor version: {-# INLINE sL #-} sL :: SrcSpan -> a -> Located a -sL span a = span `seq` L span a +sL span a = span `seq` a `seq` L span a -- Make a source location for the file. We're a bit lazy here and just -- make a point SrcSpan at line 1, column 0. Strictly speaking we should