@@ -204,30 +204,50 @@ equal:
204204
205205const:
206206 // Rational literals are a special case of the division binop_expr.
207- | DASH ? NUMBER_INT { Constant. number (PConstNumberInt (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 ))), $ sloc }
208- | DASH ? NUMBER_FLOAT { Constant. number (PConstNumberFloat (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 ))), $ sloc }
209- | DASH ? INT8 { Constant. int8 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
210- | DASH ? INT16 { Constant. int16 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
211- | DASH ? INT32 { Constant. int32 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
212- | DASH ? INT64 { Constant. int64 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
213- | DASH ? UINT8 { Constant. uint8 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
214- | DASH ? UINT16 { Constant. uint16 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
215- | DASH ? UINT32 { Constant. uint32 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
216- | DASH ? UINT64 { Constant. uint64 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
217- | DASH ? FLOAT32 { Constant. float32 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
218- | DASH ? FLOAT64 { Constant. float64 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
219- | DASH ? WASMI32 { Constant. wasmi32 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
220- | DASH ? WASMI64 { Constant. wasmi64 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
221- | DASH ? WASMF32 { Constant. wasmf32 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
222- | DASH ? WASMF64 { Constant. wasmf64 (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
223- | DASH ? BIGINT { Constant. bigint (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
224- | DASH ? RATIONAL { Constant. rational (mkstr $ sloc (if Option. is_some $ 1 then " -" ^ $ 2 else $ 2 )), $ sloc }
225- | TRUE { Constant. bool true , $ loc }
226- | FALSE { Constant. bool false , $ loc }
227- | VOID { Constant. void, $ loc }
228- | STRING { Constant. string (mkstr $ loc $ 1 ), $ loc }
229- | BYTES { Constant. bytes (mkstr $ loc $ 1 ), $ loc }
230- | CHAR { Constant. char (mkstr $ loc $ 1 ), $ loc }
207+ | NUMBER_INT { Constant. number (PConstNumberInt (mkstr $ loc $ 1 )) }
208+ | NUMBER_FLOAT { Constant. number (PConstNumberFloat (mkstr $ loc $ 1 )) }
209+ | INT8 { Constant. int8 (mkstr $ loc $ 1 ) }
210+ | INT16 { Constant. int16 (mkstr $ loc $ 1 ) }
211+ | INT32 { Constant. int32 (mkstr $ loc $ 1 ) }
212+ | INT64 { Constant. int64 (mkstr $ loc $ 1 ) }
213+ | UINT8 { Constant. uint8 (mkstr $ loc $ 1 ) }
214+ | UINT16 { Constant. uint16 (mkstr $ loc $ 1 ) }
215+ | UINT32 { Constant. uint32 (mkstr $ loc $ 1 ) }
216+ | UINT64 { Constant. uint64 (mkstr $ loc $ 1 ) }
217+ | FLOAT32 { Constant. float32 (mkstr $ loc $ 1 ) }
218+ | FLOAT64 { Constant. float64 (mkstr $ loc $ 1 ) }
219+ | WASMI32 { Constant. wasmi32 (mkstr $ loc $ 1 ) }
220+ | WASMI64 { Constant. wasmi64 (mkstr $ loc $ 1 ) }
221+ | WASMF32 { Constant. wasmf32 (mkstr $ loc $ 1 ) }
222+ | WASMF64 { Constant. wasmf64 (mkstr $ loc $ 1 ) }
223+ | BIGINT { Constant. bigint (mkstr $ loc $ 1 ) }
224+ | RATIONAL { Constant. rational (mkstr $ loc $ 1 ) }
225+ // The minus sign is not an optional non- terminal or inlined to allow propagation
226+ // of correct locations, as $ sloc only applies to the current rule.
227+ | DASH NUMBER_INT { Constant. number (PConstNumberInt (mkstr $ loc (" -" ^ $ 2 ))) }
228+ | DASH NUMBER_FLOAT { Constant. number (PConstNumberFloat (mkstr $ loc (" -" ^ $ 2 ))) }
229+ | DASH INT8 { Constant. int8 (mkstr $ loc (" -" ^ $ 2 )) }
230+ | DASH INT16 { Constant. int16 (mkstr $ loc (" -" ^ $ 2 )) }
231+ | DASH INT32 { Constant. int32 (mkstr $ loc (" -" ^ $ 2 )) }
232+ | DASH INT64 { Constant. int64 (mkstr $ loc (" -" ^ $ 2 )) }
233+ | DASH UINT8 { Constant. uint8 (mkstr $ loc (" -" ^ $ 2 )) }
234+ | DASH UINT16 { Constant. uint16 (mkstr $ loc (" -" ^ $ 2 )) }
235+ | DASH UINT32 { Constant. uint32 (mkstr $ loc (" -" ^ $ 2 )) }
236+ | DASH UINT64 { Constant. uint64 (mkstr $ loc (" -" ^ $ 2 )) }
237+ | DASH FLOAT32 { Constant. float32 (mkstr $ loc (" -" ^ $ 2 )) }
238+ | DASH FLOAT64 { Constant. float64 (mkstr $ loc (" -" ^ $ 2 )) }
239+ | DASH WASMI32 { Constant. wasmi32 (mkstr $ loc (" -" ^ $ 2 )) }
240+ | DASH WASMI64 { Constant. wasmi64 (mkstr $ loc (" -" ^ $ 2 )) }
241+ | DASH WASMF32 { Constant. wasmf32 (mkstr $ loc (" -" ^ $ 2 )) }
242+ | DASH WASMF64 { Constant. wasmf64 (mkstr $ loc (" -" ^ $ 2 )) }
243+ | DASH BIGINT { Constant. bigint (mkstr $ loc (" -" ^ $ 2 )) }
244+ | DASH RATIONAL { Constant. rational (mkstr $ loc (" -" ^ $ 2 )) }
245+ | TRUE { Constant. bool true }
246+ | FALSE { Constant. bool false }
247+ | VOID { Constant. void }
248+ | STRING { Constant. string (mkstr $ loc $ 1 ) }
249+ | BYTES { Constant. bytes (mkstr $ loc $ 1 ) }
250+ | CHAR { Constant. char (mkstr $ loc $ 1 ) }
231251
232252expr:
233253 | stmt_expr { $ 1 }
@@ -257,9 +277,10 @@ ellipsis_prefix(X):
257277pattern:
258278 | pattern colon typ { Pattern. constraint_ ~loc: (to_loc $ loc) $ 1 $ 3 }
259279 | UNDERSCORE { Pattern. any ~loc: (to_loc $ loc) () }
260- | const { Pattern. constant ~loc: (to_loc (snd $ 1 )) (fst $ 1 ) }
280+ | const { Pattern. constant ~loc: (to_loc $ loc) $ 1 }
261281 // Allow rational numbers in patterns
262- | DASH ? NUMBER_INT SLASH DASH ? NUMBER_INT { Pattern. constant ~loc: (to_loc $ sloc) @@ Constant. number (Number. rational (if Option. is_some $ 1 then (mkstr (fst $ loc($ 1 ), snd $ loc($ 2 )) (" -" ^ $ 2 )) else mkstr $ loc($ 2 ) $ 2 ) (to_loc($ loc($ 3 ))) (if Option. is_some $ 4 then (mkstr (fst $ loc($ 4 ), snd $ loc($ 5 )) (" -" ^ $ 5 )) else mkstr $ loc($ 5 ) $ 5 )) }
282+ | NUMBER_INT SLASH DASH ? NUMBER_INT { Pattern. constant ~loc: (to_loc $ sloc) @@ Constant. number (Number. rational (mkstr $ loc($ 1 ) $ 1 ) (to_loc($ loc($ 2 ))) (if Option. is_some $ 3 then (mkstr (fst $ loc($ 3 ), snd $ loc($ 4 )) (" -" ^ $ 4 )) else mkstr $ loc($ 4 ) $ 4 )) }
283+ | DASH NUMBER_INT SLASH DASH ? NUMBER_INT { Pattern. constant ~loc: (to_loc $ sloc) @@ Constant. number (Number. rational (mkstr (fst $ loc($ 1 ), snd $ loc($ 2 )) (" -" ^ $ 2 )) (to_loc($ loc($ 3 ))) (if Option. is_some $ 4 then (mkstr (fst $ loc($ 4 ), snd $ loc($ 5 )) (" -" ^ $ 5 )) else mkstr $ loc($ 5 ) $ 5 )) }
263284 | LIDENT { Pattern. var ~loc: (to_loc $ loc) (mkstr $ loc $ 1 ) }
264285 | special_id { Pattern. var ~loc: (to_loc $ loc) $ 1 }
265286 | primitive_ { Pattern. var ~loc: (to_loc $ loc) (mkstr $ loc $ 1 ) }
@@ -503,7 +524,7 @@ id_expr:
503524 | qualified_lid % prec COLON { Expression. ident ~loc: (to_loc $ loc) ~core_loc: (to_loc $ loc) $ 1 }
504525
505526simple_expr:
506- | const { Expression. constant ~loc: (to_loc (snd $ 1 )) ~core_loc: (to_loc (snd $ 1 )) (fst $ 1 ) }
527+ | const { Expression. constant ~loc: (to_loc $ loc) ~core_loc: (to_loc $ loc) $ 1 }
507528 | lparen tuple_exprs rparen { Expression. tuple ~loc: (to_loc $ loc) ~core_loc: (to_loc $ loc) $ 2 }
508529 | id_expr { $ 1 }
509530
0 commit comments