diff options
author | Jérôme Vouillon <Jerome.Vouillon@pps.jussieu.fr> | 1997-03-07 22:26:29 +0000 |
---|---|---|
committer | Jérôme Vouillon <Jerome.Vouillon@pps.jussieu.fr> | 1997-03-07 22:26:29 +0000 |
commit | 3a88e177ede85f96f73c085091beca30b54923eb (patch) | |
tree | 8305fee3aab4581dfac83a07bb964f28f1be6e9e /parsing | |
parent | 2a44439fcdc2fe3bfebf728c00eb647725d998ee (diff) | |
download | ocaml-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.mly | 40 | ||||
-rw-r--r-- | parsing/parsetree.mli | 7 |
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; |