summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsof <unknown>1998-11-08 17:06:13 +0000
committersof <unknown>1998-11-08 17:06:13 +0000
commit838fb9e23a510f80c1f71abecb6fa29b09f5a39f (patch)
tree6fdda1af49c3711862c6bfbc1c086228dc5834d8
parentafd0d0bc193b96da3d68d137733f3c6e4b8d56d6 (diff)
downloadhaskell-838fb9e23a510f80c1f71abecb6fa29b09f5a39f.tar.gz
[project @ 1998-11-08 17:06:13 by sof]
front end support for 'foreign label's
-rw-r--r--ghc/compiler/parser/hslexer.flex1
-rw-r--r--ghc/compiler/parser/hsparser.y4
-rw-r--r--ghc/compiler/parser/utils.h1
3 files changed, 5 insertions, 1 deletions
diff --git a/ghc/compiler/parser/hslexer.flex b/ghc/compiler/parser/hslexer.flex
index a5adef34ea..fc1b66b5ca 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 59d6f9d9ad..8a691fdcaf 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 8124440038..4ebf921a53 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));