diff --git a/ghc/compiler/parser/hslexer.flex b/ghc/compiler/parser/hslexer.flex index a5adef34eadcd7e2987821711b6b6013e5d8876d..fc1b66b5ca7fd898bfbae43ef306c11f9df8c4d1 100644 --- a/ghc/compiler/parser/hslexer.flex +++ b/ghc/compiler/parser/hslexer.flex @@ -401,6 +401,7 @@ NL [\n\r] <GlaExt>"_casm_GC_" { RETURN(CASM_GC); } <GlaExt>"foreign" { RETURN(FOREIGN); } <GlaExt>"export" { RETURN(EXPORT); } +<GlaExt>"label" { RETURN(LABEL); } <GlaExt>"unsafe" { RETURN(UNSAFE); } <GlaExt>"_stdcall" { RETURN(STDCALL); } <GlaExt>"_ccall" { RETURN(C_CALL); } diff --git a/ghc/compiler/parser/hsparser.y b/ghc/compiler/parser/hsparser.y index 59d6f9d9ad64bd4868c7f8c3ff55210a2708cf1f..8a691fdcaf37e65d69af2c308ea92af6713c4bab 100644 --- a/ghc/compiler/parser/hsparser.y +++ b/ghc/compiler/parser/hsparser.y @@ -161,7 +161,7 @@ BOOLEAN pat_check=TRUE; %token SCC %token CCALL CCALL_GC CASM CASM_GC -%token EXPORT UNSAFE STDCALL C_CALL +%token EXPORT UNSAFE STDCALL C_CALL LABEL %token PASCAL FASTCALL FOREIGN DYNAMIC /********************************************************************** @@ -548,6 +548,8 @@ defaultd: defaultkey OPAREN types CPAREN { $$ = mkdbind($3,startlineno); foreignd: foreignkey IMPORT callconv ext_name unsafe_flag qvarid DCOLON sigtype { $$ = mkfobind($6,$8,$4,$5,$3,FOREIGN_IMPORT,startlineno); } | foreignkey EXPORT callconv ext_name qvarid DCOLON sigtype { $$ = mkfobind($5,$7,$4,0,$3,FOREIGN_EXPORT,startlineno); } ; + | foreignkey LABEL ext_name qvarid DCOLON sigtype { $$ = mkfobind($4,$6,$3,0,-1,FOREIGN_LABEL,startlineno); } + ; callconv: STDCALL { $$ = CALLCONV_STDCALL; } | C_CALL { $$ = CALLCONV_CCALL; } diff --git a/ghc/compiler/parser/utils.h b/ghc/compiler/parser/utils.h index 8124440038e4499aacfa983a262fd95196eee101..4ebf921a538e10f30829e5a8fbe538ea243a7861 100644 --- a/ghc/compiler/parser/utils.h +++ b/ghc/compiler/parser/utils.h @@ -122,6 +122,7 @@ void checkprec PROTO((tree, qid, BOOLEAN)); #define FOREIGN_IMPORT 0 #define FOREIGN_EXPORT 1 +#define FOREIGN_LABEL 2 BOOLEAN isconstr PROTO((char *)); void setstartlineno PROTO((void));