summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJun FURUSE / 古瀬 淳 <jun.furuse@gmail.com>2001-12-05 15:31:04 +0000
committerJun FURUSE / 古瀬 淳 <jun.furuse@gmail.com>2001-12-05 15:31:04 +0000
commitce942e03773324680a90cc4f51219259238bdac9 (patch)
tree02b643d03b87e01a452a3db2ef041567bbc58a7d
parent51d67fcf5577fd3d00022007eefb5af760a02e09 (diff)
downloadocaml-ce942e03773324680a90cc4f51219259238bdac9.tar.gz
simplification of coerce and essai for dyn pattern
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/dynamics@4113 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--parsing/parser.mly20
1 files changed, 17 insertions, 3 deletions
diff --git a/parsing/parser.mly b/parsing/parser.mly
index 7716c1a7f7..e1b6156e68 100644
--- a/parsing/parser.mly
+++ b/parsing/parser.mly
@@ -840,9 +840,12 @@ expr:
/* DYN */
| DYNAMIC expr
{ mkexp(Pexp_dynamic($2)) }
+/* coerce is simple_expr */
+/* /DYN */
+/* GENERIC
| COERCE seq_expr WITH opt_bar coerce_cases %prec prec_match
{ mkexp(Pexp_coerce($2, List.rev $5)) }
-/* /DYN */
+/GENERIC */
;
simple_expr:
val_longident
@@ -907,6 +910,9 @@ simple_expr:
{ mkexp(Pexp_override []) }
| simple_expr SHARP label
{ mkexp(Pexp_send($1, $3)) }
+/* DYN */
+ | COERCE simple_expr { mkexp(Pexp_coerce($2)) }
+/* /DYN */
;
simple_labeled_expr_list:
labeled_simple_expr
@@ -951,7 +957,7 @@ let_binding:
| pattern EQUAL seq_expr %prec prec_let
{ ($1, $3) }
;
-/* DYN */
+/* GENERIC
coerce_cases:
pattern coerce_action { [$1, $2] }
| coerce_cases BAR pattern coerce_action { ($3, $4) :: $1 }
@@ -959,7 +965,7 @@ coerce_cases:
coerce_action:
EQUALGREATER seq_expr { $2 }
;
-/* /DYN */
+/GENERIC */
fun_binding:
EQUAL seq_expr %prec prec_let
{ $2 }
@@ -1059,6 +1065,10 @@ simple_pattern:
{ mkpat(Ppat_array(List.rev $2)) }
| LBRACKETBAR BARRBRACKET
{ mkpat(Ppat_array []) }
+/* GENERIC
+ | DYNAMIC LPAREN pattern COLON core_type RPAREN
+ { mkpat (Ppat_dynamic ($3, $5)) }
+/GENERIC */
| LBRACKETBAR pattern_semi_list opt_semi error
{ unclosed "[|" 1 "|]" 4 }
| LPAREN pattern RPAREN
@@ -1225,6 +1235,10 @@ simple_core_type2:
{ mktyp(Ptyp_any) }
| type_longident
{ mktyp(Ptyp_constr($1, [])) }
+/* DYN */
+ | DYNAMIC
+ { mktyp(Ptyp_constr(Lident "dyn", [])) }
+/* /DYN */
| simple_core_type2 type_longident %prec prec_constr_appl
{ mktyp(Ptyp_constr($2, [$1])) }
| LPAREN core_type_comma_list RPAREN type_longident %prec prec_constr_appl