@@ -109,12 +109,18 @@ let check_plain_arg (_ : env) (arg : pexpr option loced) =
109109 arg
110110
111111(* -------------------------------------------------------------------- *)
112- let as_int_constant (e : pexpr ) : int =
112+ let as_int_constant (e : pexpr ) : int64 =
113113 match e.data with
114114 | PEInt (i , None) -> i
115115 | _ -> tyerror e.range " integer constant expected"
116116
117117(* -------------------------------------------------------------------- *)
118+ let as_nativeint_constant (e : pexpr ) : int =
119+ match e.data with
120+ | PEInt (i , None) -> Int64. to_int i
121+ | _ -> tyerror e.range " integer constant expected"
122+
123+ (* -------------------------------------------------------------------- *)
118124type sig_ = {
119125 s_name : string ;
120126 s_ntyparams : int ;
@@ -468,17 +474,17 @@ let rec tt_expr_ (env : env) (e : pexpr) : aargs option * aexpr =
468474 | PESlice (ev , (start , len , scale )) ->
469475 let ev = tt_expr env ev in
470476 let start = tt_expr env start in
471- let len = Option. default 1 (Option. map as_int_constant len) in
472- let scale = Option. default 1 (Option. map as_int_constant scale) in
477+ let len = Option. default 1 (Option. map as_nativeint_constant len) in
478+ let scale = Option. default 1 (Option. map as_nativeint_constant scale) in
473479 let node = ESlice (ev, (start, len, scale))
474480 and type_ = `W (len * scale) in
475481 (None , { node; type_; })
476482
477483 | PEAssign (ev , (start , len , scale ), v ) ->
478484 let ev = tt_expr env ev in
479485 let start = tt_expr env start in
480- let len = Option. default 1 (Option. map as_int_constant len) in
481- let scale = Option. default 1 (Option. map as_int_constant scale) in
486+ let len = Option. default 1 (Option. map as_nativeint_constant len) in
487+ let scale = Option. default 1 (Option. map as_nativeint_constant scale) in
482488 let v = tt_expr env ~check: (`W (len * scale)) v in
483489 let node = EAssign (ev, (start, len, scale), v) in
484490 (None , { node; type_ = ev.type_; })
@@ -526,7 +532,7 @@ let rec tt_expr_ (env : env) (e : pexpr) : aargs option * aexpr =
526532 let (`W w) = as_seq1 (tt_type_parameters env fn.range f ~expected: 1 w) in
527533 let args = List. map (check_plain_arg env) args in
528534 let e, n = as_seq2 (check_arguments_count e.range ~expected: 2 args) in
529- let n = as_int_constant n in
535+ let n = as_nativeint_constant n in
530536 let ne = tt_expr env ~check: (`W w) e in
531537 (None , { node = ERepeat (`W (w * n), (ne, n)); type_ = `W (w * n); })
532538
0 commit comments