X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fparser%2FParseUtil.lhs;h=2be5030193f98df784a99c894e0ed55b05e16341;hb=884ec3bb799d72dcca10c562277e7f31a0f1d283;hp=ce4f71bfcfb96d1a6df1324224fed7b65962202b;hpb=e73744d4771eba9a173fcf1347e7ee5e690a7fd9;p=ghc-hetmet.git diff --git a/ghc/compiler/parser/ParseUtil.lhs b/ghc/compiler/parser/ParseUtil.lhs index ce4f71b..2be5030 100644 --- a/ghc/compiler/parser/ParseUtil.lhs +++ b/ghc/compiler/parser/ParseUtil.lhs @@ -14,6 +14,10 @@ module ParseUtil ( , mkRecConstrOrUpdate -- HsExp -> [HsFieldUpdate] -> P HsExp , groupBindings + , checkAs + , checkHiding + , checkQualified + , checkPrec -- String -> P String , checkCallConv -- FAST_STRING -> P CallConv , checkContext -- HsType -> P HsContext @@ -33,10 +37,9 @@ module ParseUtil ( , funTyCon_RDR -- pseudo-keywords, in var and tyvar forms (all :: RdrName) - , as_var_RDR, hiding_var_RDR, qualified_var_RDR, forall_var_RDR + , forall_var_RDR , export_var_RDR, label_var_RDR, dynamic_var_RDR, unsafe_var_RDR - , as_tyvar_RDR, hiding_tyvar_RDR, qualified_tyvar_RDR , export_tyvar_RDR, label_tyvar_RDR, dynamic_tyvar_RDR , unsafe_tyvar_RDR @@ -69,6 +72,9 @@ parseError s = getSrcLocP `thenP` \ loc -> failMsgP (hcat [ppr loc, text ": ", text s]) +parseErrorOnInput :: P a +parseErrorOnInput buf PState{ loc = loc } = PFailed (srcParseErr buf loc) + srcParseErr :: StringBuffer -> SrcLoc -> Message srcParseErr s l = hcat [ppr l, ptext SLIT(": parse error on input "), @@ -77,6 +83,18 @@ srcParseErr s l cbot = panic "CCall:result_ty" ----------------------------------------------------------------------------- +-- Special Ids + +checkAs, checkQualified, checkHiding :: FAST_STRING -> P () + +checkAs s | s == SLIT("as") = returnP () + | otherwise = parseErrorOnInput +checkQualified s | s == SLIT("qualified") = returnP () + | otherwise = parseErrorOnInput +checkHiding s | s == SLIT("hiding") = returnP () + | otherwise = parseErrorOnInput + +----------------------------------------------------------------------------- -- splitForConApp -- When parsing data declarations, we sometimes inadvertently parse @@ -428,27 +446,18 @@ unitName = SLIT("()") funName = SLIT("(->)") listName = SLIT("[]") -asName = SLIT("as") -hidingName = SLIT("hiding") -qualifiedName = SLIT("qualified") forallName = SLIT("forall") exportName = SLIT("export") labelName = SLIT("label") dynamicName = SLIT("dynamic") unsafeName = SLIT("unsafe") -as_var_RDR = mkSrcUnqual varName asName -hiding_var_RDR = mkSrcUnqual varName hidingName -qualified_var_RDR = mkSrcUnqual varName qualifiedName forall_var_RDR = mkSrcUnqual varName forallName export_var_RDR = mkSrcUnqual varName exportName label_var_RDR = mkSrcUnqual varName labelName dynamic_var_RDR = mkSrcUnqual varName dynamicName unsafe_var_RDR = mkSrcUnqual varName unsafeName -as_tyvar_RDR = mkSrcUnqual tvName asName -hiding_tyvar_RDR = mkSrcUnqual tvName hidingName -qualified_tyvar_RDR = mkSrcUnqual tvName qualifiedName export_tyvar_RDR = mkSrcUnqual tvName exportName label_tyvar_RDR = mkSrcUnqual tvName labelName dynamic_tyvar_RDR = mkSrcUnqual tvName dynamicName