summaryrefslogtreecommitdiff
path: root/parsing
diff options
context:
space:
mode:
authorJérôme Vouillon <Jerome.Vouillon@pps.jussieu.fr>1997-03-07 22:26:29 +0000
committerJérôme Vouillon <Jerome.Vouillon@pps.jussieu.fr>1997-03-07 22:26:29 +0000
commit3a88e177ede85f96f73c085091beca30b54923eb (patch)
tree8305fee3aab4581dfac83a07bb964f28f1be6e9e /parsing
parent2a44439fcdc2fe3bfebf728c00eb647725d998ee (diff)
downloadocaml-3a88e177ede85f96f73c085091beca30b54923eb.tar.gz
L'alias (t as 'a) peut etre utilise avec tout type t (pas seulement
objet et type construit). git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1331 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'parsing')
-rw-r--r--parsing/parser.mly40
-rw-r--r--parsing/parsetree.mli7
2 files changed, 22 insertions, 25 deletions
diff --git a/parsing/parser.mly b/parsing/parser.mly
index 47ff7cbe2a..6973c3407a 100644
--- a/parsing/parser.mly
+++ b/parsing/parser.mly
@@ -885,6 +885,8 @@ core_type:
{ mktyp(Ptyp_arrow($1, $3)) }
| core_type_tuple
{ mktyp(Ptyp_tuple(List.rev $1)) }
+ | core_type AS type_parameter
+ { mktyp(Ptyp_alias($1, $3)) }
;
simple_core_type:
@@ -892,32 +894,26 @@ simple_core_type:
{ mktyp(Ptyp_var $2) }
| UNDERSCORE
{ mktyp(Ptyp_any) }
- | type_longident alias
- { mktyp(Ptyp_constr($1, [], $2)) }
- | simple_core_type type_longident alias %prec prec_constr_appl
- { mktyp(Ptyp_constr($2, [$1], $3)) }
- | LPAREN core_type_comma_list RPAREN type_longident alias
+ | type_longident
+ { mktyp(Ptyp_constr($1, [])) }
+ | simple_core_type type_longident %prec prec_constr_appl
+ { mktyp(Ptyp_constr($2, [$1])) }
+ | LPAREN core_type_comma_list RPAREN type_longident
%prec prec_constr_appl
- { mktyp(Ptyp_constr($4, List.rev $2, $5)) }
+ { mktyp(Ptyp_constr($4, List.rev $2)) }
| LPAREN core_type RPAREN
{ $2 }
- | LESS meth_list GREATER alias
- { mktyp(Ptyp_object($2, $4)) }
- | LESS GREATER alias
- { mktyp(Ptyp_object([], $3)) }
- | SHARP class_longident alias
- { mktyp(Ptyp_class($2, [], $3)) }
- | simple_core_type SHARP class_longident alias %prec prec_constr_appl
- { mktyp(Ptyp_class($3, [$1], $4)) }
- | LPAREN core_type_comma_list RPAREN SHARP class_longident alias
+ | LESS meth_list GREATER
+ { mktyp(Ptyp_object $2) }
+ | LESS GREATER
+ { mktyp(Ptyp_object []) }
+ | SHARP class_longident
+ { mktyp(Ptyp_class($2, [])) }
+ | simple_core_type SHARP class_longident %prec prec_constr_appl
+ { mktyp(Ptyp_class($3, [$1])) }
+ | LPAREN core_type_comma_list RPAREN SHARP class_longident
%prec prec_constr_appl
- { mktyp(Ptyp_class($5, List.rev $2, $6)) }
-;
-alias:
- AS type_parameter
- { Some $2 }
- | /* empty */
- {None}
+ { mktyp(Ptyp_class($5, List.rev $2)) }
;
core_type_tuple:
simple_core_type STAR simple_core_type
diff --git a/parsing/parsetree.mli b/parsing/parsetree.mli
index 96fd1d2c25..7b57b7cc23 100644
--- a/parsing/parsetree.mli
+++ b/parsing/parsetree.mli
@@ -26,9 +26,10 @@ and core_type_desc =
| Ptyp_var of string
| Ptyp_arrow of core_type * core_type
| Ptyp_tuple of core_type list
- | Ptyp_constr of Longident.t * core_type list * string option
- | Ptyp_object of core_field_type list * string option
- | Ptyp_class of Longident.t * core_type list * string option
+ | Ptyp_constr of Longident.t * core_type list
+ | Ptyp_object of core_field_type list
+ | Ptyp_class of Longident.t * core_type list
+ | Ptyp_alias of core_type * string
and core_field_type =
{ pfield_desc: core_field_desc;