X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fparser%2FParserCore.y;h=dd438b141324d73334b131f522f51265301593df;hb=a465e8bda2a03163fa45976c531307faeea76490;hp=6a7fb1d8228ba239f9a170473b6cd641276133d3;hpb=5c15e80ba77d4e30a84578df95ad32e471b0ff8c;p=ghc-hetmet.git diff --git a/ghc/compiler/parser/ParserCore.y b/ghc/compiler/parser/ParserCore.y index 6a7fb1d..dd438b1 100644 --- a/ghc/compiler/parser/ParserCore.y +++ b/ghc/compiler/parser/ParserCore.y @@ -1,6 +1,8 @@ { module ParserCore ( parseCore ) where +import ForeignCall + import HsCore import RdrHsSyn import HsSyn @@ -199,8 +201,10 @@ exp :: { UfExpr RdrName } "InlineCall" -> UfNote UfInlineCall $3 "InlineMe" -> UfNote UfInlineMe $3 } --- | '%external' STRING aty { External $2 $3 } - + | '%external' STRING aty { UfFCall (ForeignCall.CCall + (CCallSpec (StaticTarget + (mkFastString $2)) + CCallConv (PlaySafe False))) $3 } alts1 :: { [UfAlt RdrName] } : alt { [$1] } | alt ';' alts1 { $1:$3 } @@ -264,6 +268,7 @@ convIntLit i (HsTyVar n) | n == intPrimRdrName = MachInt i | n == wordPrimRdrName = MachWord i | n == charPrimRdrName = MachChar (fromInteger i) + | n == addrPrimRdrName && i == 0 = MachNullAddr convIntLit i aty = pprPanic "Unknown integer literal type" (ppr aty $$ ppr intPrimRdrName) @@ -275,12 +280,13 @@ convRatLit i aty = pprPanic "Unknown rational literal type" (ppr aty $$ ppr intPrimRdrName) -wordPrimRdrName, intPrimRdrName, floatPrimRdrName, doublePrimRdrName :: RdrName +wordPrimRdrName, intPrimRdrName, floatPrimRdrName, doublePrimRdrName, addrPrimRdrName :: RdrName wordPrimRdrName = nameRdrName wordPrimTyConName intPrimRdrName = nameRdrName intPrimTyConName charPrimRdrName = nameRdrName charPrimTyConName floatPrimRdrName = nameRdrName floatPrimTyConName doublePrimRdrName = nameRdrName doublePrimTyConName +addrPrimRdrName = nameRdrName addrPrimTyConName happyError :: P a happyError s l = failP (show l ++ ": Parse error\n") (take 100 s) l