Skip to content

Commit 6a52ad2

Browse files
committed
Fix build errors
1 parent 69d689d commit 6a52ad2

File tree

7 files changed

+52
-2
lines changed

7 files changed

+52
-2
lines changed

analysis/src/Utils.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ let identifyPexp pexp =
9595
| Pexp_record _ -> "Pexp_record"
9696
| Pexp_field _ -> "Pexp_field"
9797
| Pexp_setfield _ -> "Pexp_setfield"
98+
| Pexp_index _ -> "Pexp_index"
9899
| Pexp_array _ -> "Pexp_array"
99100
| Pexp_ifthenelse _ -> "Pexp_ifthenelse"
100101
| Pexp_sequence _ -> "Pexp_sequence"

compiler/frontend/bs_ast_mapper.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,9 @@ module E = struct
350350
field ~loc ~attrs (sub.expr sub e) (map_loc sub lid)
351351
| Pexp_setfield (e1, lid, e2) ->
352352
setfield ~loc ~attrs (sub.expr sub e1) (map_loc sub lid) (sub.expr sub e2)
353+
| Pexp_index (e1, e2, e3) ->
354+
index ~loc ~attrs (sub.expr sub e1) (sub.expr sub e2)
355+
(map_opt (sub.expr sub) e3)
353356
| Pexp_array el -> array ~loc ~attrs (List.map (sub.expr sub) el)
354357
| Pexp_ifthenelse (e1, e2, e3) ->
355358
ifthenelse ~loc ~attrs (sub.expr sub e1) (sub.expr sub e2)

compiler/ml/ast_mapper_to0.ml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,27 @@ module E = struct
439439
field ~loc ~attrs (sub.expr sub e) (map_loc sub lid)
440440
| Pexp_setfield (e1, lid, e2) ->
441441
setfield ~loc ~attrs (sub.expr sub e1) (map_loc sub lid) (sub.expr sub e2)
442+
| Pexp_index (e1, e2, e3) -> (
443+
(* Map back to Array.get/Array.set for parsetree0 compatibility *)
444+
let container = sub.expr sub e1 in
445+
let index = sub.expr sub e2 in
446+
match e3 with
447+
| None ->
448+
(* Read: Array.get(container, index) *)
449+
let array_get =
450+
ident ~loc
451+
(mknoloc (Longident.Ldot (Longident.Lident "Array", "get")))
452+
in
453+
apply ~loc ~attrs array_get [(Nolabel, container); (Nolabel, index)]
454+
| Some value ->
455+
(* Write: Array.set(container, index, value) *)
456+
let array_set =
457+
ident ~loc
458+
(mknoloc (Longident.Ldot (Longident.Lident "Array", "set")))
459+
in
460+
let value_expr = sub.expr sub value in
461+
apply ~loc ~attrs array_set
462+
[(Nolabel, container); (Nolabel, index); (Nolabel, value_expr)])
442463
| Pexp_array el -> array ~loc ~attrs (List.map (sub.expr sub) el)
443464
| Pexp_ifthenelse (e1, e2, e3) ->
444465
ifthenelse ~loc ~attrs (sub.expr sub e1) (sub.expr sub e2)

compiler/ml/depend.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ let rec add_expr bv exp =
248248
add_expr bv e1;
249249
add bv fld;
250250
add_expr bv e2
251+
| Pexp_index (e1, e2, e3) ->
252+
add_expr bv e1;
253+
add_expr bv e2;
254+
add_opt add_expr bv e3
251255
| Pexp_array el -> List.iter (add_expr bv) el
252256
| Pexp_ifthenelse (e1, e2, opte3) ->
253257
add_expr bv e1;

compiler/ml/printtyped.ml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,16 @@ and expression i ppf x =
329329
expression i ppf e1;
330330
longident i ppf li;
331331
expression i ppf e2
332+
| Texp_index (e1, e2, e3) -> (
333+
line i ppf "Texp_index\n";
334+
expression i ppf e1;
335+
line i ppf "index:\n";
336+
expression i ppf e2;
337+
match e3 with
338+
| None -> line i ppf "read access\n"
339+
| Some e ->
340+
line i ppf "write access:\n";
341+
expression i ppf e)
332342
| Texp_array l ->
333343
line i ppf "Texp_array\n";
334344
list i expression ppf l

compiler/ml/rec_check.ml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ let rec classify_expression : Typedtree.expression -> sd =
196196
classify_expression e
197197
| Texp_ident _ | Texp_for _ | Texp_constant _ | Texp_tuple _ | Texp_array _
198198
| Texp_construct _ | Texp_variant _ | Texp_record _ | Texp_setfield _
199-
| Texp_while _ | Texp_pack _ | Texp_function _ | Texp_extension_constructor _
200-
->
199+
| Texp_index _ | Texp_while _ | Texp_pack _ | Texp_function _
200+
| Texp_extension_constructor _ ->
201201
Static
202202
| Texp_apply {funct = {exp_desc = Texp_ident (_, _, vd)}} when is_ref vd ->
203203
Static
@@ -273,6 +273,11 @@ let rec expression : Env.env -> Typedtree.expression -> Use.t =
273273
(join (expression env ifso) (option expression env ifnot)))
274274
| Texp_setfield (e1, _, _, e2) ->
275275
Use.(join (inspect (expression env e1)) (inspect (expression env e2)))
276+
| Texp_index (e1, e2, e3) ->
277+
Use.(
278+
join
279+
(join (inspect (expression env e1)) (inspect (expression env e2)))
280+
(inspect (option expression env e3)))
276281
| Texp_sequence (e1, e2) ->
277282
Use.(join (discard (expression env e1)) (expression env e2))
278283
| Texp_while (e1, e2) ->

compiler/ml/typedtreeIter.ml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,12 @@ end = struct
261261
| Texp_setfield (exp1, _, _label, exp2) ->
262262
iter_expression exp1;
263263
iter_expression exp2
264+
| Texp_index (exp1, exp2, expo) -> (
265+
iter_expression exp1;
266+
iter_expression exp2;
267+
match expo with
268+
| None -> ()
269+
| Some exp -> iter_expression exp)
264270
| Texp_array list -> List.iter iter_expression list
265271
| Texp_ifthenelse (exp1, exp2, expo) -> (
266272
iter_expression exp1;

0 commit comments

Comments
 (0)