@@ -106,11 +106,11 @@ let mkuplus name arg =
106106 | _ ->
107107 mkexp(Pexp_apply (mkoperator (" ~" ^ name) 1 , [" " , arg]))
108108
109- let mkexp_cons consloc args loc =
110- Exp. mk ~loc (Pexp_construct (mkloc (Lident " :: " ) consloc , Some args))
109+ let mkexp_constructor constructor constructorloc args loc =
110+ Exp. mk ~loc (Pexp_construct (mkloc (Lident constructor) constructorloc , Some args))
111111
112- let mkpat_cons consloc args loc =
113- Pat. mk ~loc (Ppat_construct (mkloc (Lident " :: " ) consloc , Some args))
112+ let mkpat_constructor constructor constructorloc args loc =
113+ Pat. mk ~loc (Ppat_construct (mkloc (Lident constructor) constructorloc , Some args))
114114
115115let rec mktailexp nilloc = function
116116 [] ->
@@ -124,7 +124,7 @@ let rec mktailexp nilloc = function
124124 loc_ghost = true }
125125 in
126126 let arg = Exp. mk ~loc (Pexp_tuple [e1; exp_el]) in
127- mkexp_cons {loc with loc_ghost = true } arg loc
127+ mkexp_constructor " :: " {loc with loc_ghost = true } arg loc
128128
129129let rec mktailpat nilloc = function
130130 [] ->
@@ -138,7 +138,7 @@ let rec mktailpat nilloc = function
138138 loc_ghost = true }
139139 in
140140 let arg = Pat. mk ~loc (Ppat_tuple [p1; pat_pl]) in
141- mkpat_cons {loc with loc_ghost = true } arg loc
141+ mkpat_constructor " :: " {loc with loc_ghost = true } arg loc
142142
143143let mkstrexp e attrs =
144144 { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc }
@@ -307,7 +307,6 @@ let mkctf_attrs d attrs =
307307% token < char > CHAR
308308% token CLASS
309309% token COLON
310- % token COLONCOLON
311310% token COLONEQUAL
312311% token COLONGREATER
313312% token COMMA
@@ -340,6 +339,7 @@ let mkctf_attrs d attrs =
340339% token < string > INFIXOP2
341340% token < string > INFIXOP3
342341% token < string > INFIXOP4
342+ % token < string > INFIXCONSTRUCTOR
343343% token INHERIT
344344% token INITIALIZER
345345% token < int > INT
@@ -461,13 +461,13 @@ The precedences must be listed from low to high.
461461%nonassoc below_LBRACKETAT
462462%nonassoc LBRACKETAT
463463%nonassoc LBRACKETATAT
464- %right COLONCOLON /* expr (e :: e :: e ) */
464+ %right INFIXCONSTRUCTOR /* expr (e OP e OP e ) with OP a constructor */
465465%left INFIXOP2 PLUS PLUSDOT MINUS MINUSDOT PLUSEQ /* expr (e OP e OP e ) */
466466%left PERCENT INFIXOP3 STAR /* expr (e OP e OP e ) */
467467%right INFIXOP4 /* expr (e OP e OP e ) */
468468%nonassoc prec_unary_minus prec_unary_plus /* unary - */
469469%nonassoc prec_constant_constructor /* cf . simple_expr (C versus C x ) */
470- %nonassoc prec_constr_appl /* above AS BAR COLONCOLON COMMA */
470+ %nonassoc prec_constr_appl /* above AS BAR INFIXCONSTRUCTOR COMMA */
471471%nonassoc below_SHARP
472472%nonassoc SHARP /* simple_expr /toplevel_directive */
473473%nonassoc below_DOT
@@ -1116,10 +1116,10 @@ expr:
11161116 | FOR ext_attributes pattern EQUAL seq_expr direction_flag seq_expr DO
11171117 seq_expr DONE
11181118 { mkexp_attrs(Pexp_for ($ 3 , $ 5 , $ 7 , $ 6 , $ 9 )) $ 2 }
1119- | expr COLONCOLON expr
1120- { mkexp_cons (rhs_loc 2 ) (ghexp(Pexp_tuple [$ 1 ;$ 3 ])) (symbol_rloc() ) }
1121- | LPAREN COLONCOLON RPAREN LPAREN expr COMMA expr RPAREN
1122- { mkexp_cons (rhs_loc 2 ) (ghexp(Pexp_tuple [$ 5 ;$ 7 ])) (symbol_rloc() ) }
1119+ | expr INFIXCONSTRUCTOR expr
1120+ { mkexp_constructor $ 2 (rhs_loc 2 ) (ghexp(Pexp_tuple [$ 1 ;$ 3 ])) (symbol_rloc() ) }
1121+ | LPAREN INFIXCONSTRUCTOR RPAREN LPAREN expr COMMA expr RPAREN
1122+ { mkexp_constructor $ 2 (rhs_loc 2 ) (ghexp(Pexp_tuple [$ 5 ;$ 7 ])) (symbol_rloc() ) }
11231123 | expr INFIXOP0 expr
11241124 { mkinfix $ 1 $ 2 $ 3 }
11251125 | expr INFIXOP1 expr
@@ -1433,13 +1433,13 @@ pattern:
14331433 { mkpat(Ppat_construct (mkrhs $ 1 1 , Some $ 2 )) }
14341434 | name_tag pattern % prec prec_constr_appl
14351435 { mkpat(Ppat_variant ($ 1 , Some $ 2 )) }
1436- | pattern COLONCOLON pattern
1437- { mkpat_cons (rhs_loc 2 ) (ghpat(Ppat_tuple [$ 1 ;$ 3 ])) (symbol_rloc() ) }
1438- | pattern COLONCOLON error
1436+ | pattern INFIXCONSTRUCTOR pattern
1437+ { mkpat_constructor $ 2 (rhs_loc 2 ) (ghpat(Ppat_tuple [$ 1 ;$ 3 ])) (symbol_rloc() ) }
1438+ | pattern INFIXCONSTRUCTOR error
14391439 { expecting 3 " pattern" }
1440- | LPAREN COLONCOLON RPAREN LPAREN pattern COMMA pattern RPAREN
1441- { mkpat_cons (rhs_loc 2 ) (ghpat(Ppat_tuple [$ 5 ;$ 7 ])) (symbol_rloc() ) }
1442- | LPAREN COLONCOLON RPAREN LPAREN pattern COMMA pattern error
1440+ | LPAREN INFIXCONSTRUCTOR RPAREN LPAREN pattern COMMA pattern RPAREN
1441+ { mkpat_constructor $ 2 (rhs_loc 2 ) (ghpat(Ppat_tuple [$ 5 ;$ 7 ])) (symbol_rloc() ) }
1442+ | LPAREN INFIXCONSTRUCTOR RPAREN LPAREN pattern COMMA pattern error
14431443 { unclosed " (" 4 " )" 8 }
14441444 | pattern BAR pattern
14451445 { mkpat(Ppat_or ($ 1 , $ 3 )) }
@@ -1971,8 +1971,8 @@ constr_ident:
19711971 UIDENT { $1 }
19721972/* | LBRACKET RBRACKET { "[]" } */
19731973 | LPAREN RPAREN { "()" }
1974- | COLONCOLON { "::" }
1975- /* | LPAREN COLONCOLON RPAREN { "::" } */
1974+ | INFIXCONSTRUCTOR { $1 }
1975+ /* | LPAREN INFIXCONSTRUCTOR RPAREN { $1 } */
19761976 | FALSE { "false" }
19771977 | TRUE { "true" }
19781978;
0 commit comments