Skip to content

Commit 79b88cf

Browse files
committed
---
yaml --- r: 681 b: refs/heads/master c: c4c73e0 h: refs/heads/master i: 679: da14c95 v: v3
1 parent c78f7be commit 79b88cf

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 01a76e21a62041b50f746969e69c60e79e7e8b44
2+
refs/heads/master: c4c73e09f1a25c8a9d9c69a3243d9342037fed73

trunk/src/boot/fe/ast.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,6 +1749,8 @@ let sprintf_expr = sprintf_fmt fmt_expr;;
17491749
let sprintf_name = sprintf_fmt fmt_name;;
17501750
let sprintf_name_component = sprintf_fmt fmt_name_component;;
17511751
let sprintf_lval = sprintf_fmt fmt_lval;;
1752+
let sprintf_plval = sprintf_fmt fmt_plval;;
1753+
let sprintf_pexp = sprintf_fmt fmt_pexp;;
17521754
let sprintf_atom = sprintf_fmt fmt_atom;;
17531755
let sprintf_slot = sprintf_fmt fmt_slot;;
17541756
let sprintf_slot_key = sprintf_fmt fmt_slot_key;;

trunk/src/boot/me/resolve.ml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,49 @@ let type_resolving_visitor
483483
inner.Walk.visit_stmt_pre stmt
484484
in
485485

486+
let rebuilt_pexps = Hashtbl.create 0 in
487+
let get_rebuilt_pexp p =
488+
Hashtbl.find rebuilt_pexps p.id
489+
in
490+
491+
let visit_pexp_post p =
492+
let rebuild_plval pl =
493+
match pl with
494+
Ast.PLVAL_ident _ -> pl
495+
| Ast.PLVAL_app (id, tys) ->
496+
Ast.PLVAL_app (id, Array.map resolve_ty tys)
497+
| Ast.PLVAL_ext_name (pexp, nc) ->
498+
let pexp = get_rebuilt_pexp pexp in
499+
let nc =
500+
match nc with
501+
Ast.COMP_ident _
502+
| Ast.COMP_idx _ -> nc
503+
| Ast.COMP_app (id, tys) ->
504+
Ast.COMP_app (id, Array.map resolve_ty tys)
505+
in
506+
Ast.PLVAL_ext_name (pexp, nc)
507+
508+
| Ast.PLVAL_ext_pexp (a, b) ->
509+
Ast.PLVAL_ext_pexp (get_rebuilt_pexp a,
510+
get_rebuilt_pexp b)
511+
| Ast.PLVAL_ext_deref p ->
512+
Ast.PLVAL_ext_deref (get_rebuilt_pexp p)
513+
in
514+
let p =
515+
match p.node with
516+
Ast.PEXP_lval pl ->
517+
let pl' = rebuild_plval pl in
518+
iflog cx (fun _ -> log cx "rebuilt plval %a as %a (#%d)"
519+
Ast.sprintf_plval pl Ast.sprintf_plval pl'
520+
(int_of_node p.id));
521+
{ p with node = Ast.PEXP_lval pl' }
522+
523+
| _ -> p
524+
in
525+
htab_put rebuilt_pexps p.id p
526+
in
527+
528+
486529
let visit_lval_pre lv =
487530
let rec rebuild_lval' lv =
488531
match lv with
@@ -539,6 +582,7 @@ let type_resolving_visitor
539582
Walk.visit_obj_drop_pre = visit_obj_drop_pre;
540583
Walk.visit_stmt_pre = visit_stmt_pre;
541584
Walk.visit_lval_pre = visit_lval_pre;
585+
Walk.visit_pexp_post = visit_pexp_post;
542586
Walk.visit_crate_post = visit_crate_post }
543587
;;
544588

0 commit comments

Comments
 (0)