aboutsummaryrefslogtreecommitdiff
path: root/frontend/refmark.icl
diff options
context:
space:
mode:
authorjohnvg2009-07-29 11:55:41 +0000
committerjohnvg2009-07-29 11:55:41 +0000
commit4128e65a32511946bfb7e11b8f71cafb9635eb83 (patch)
treec50d0e0522f1ddf9e0aebf7cfb243e6a5b35a5c0 /frontend/refmark.icl
parentfix selective uses in refMarkOfVariable if used completely and by selector (diff)
mark pattern and rhs of case alternative with one fullRefMark instead of two
(for patterns with variables) git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1749 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/refmark.icl')
-rw-r--r--frontend/refmark.icl17
1 files changed, 6 insertions, 11 deletions
diff --git a/frontend/refmark.icl b/frontend/refmark.icl
index dd57d61..906c8e3 100644
--- a/frontend/refmark.icl
+++ b/frontend/refmark.icl
@@ -441,7 +441,7 @@ where
# rms_var_heap = rms_var_heap <:= (var_info_ptr, VI_Occurrence {var_occ & occ_bind = OB_LockedLet ob})
| do_seq_combine
# rms_var_heap = addSeqRefCounts ref_counts rms_var_heap
- = addSeqRefMarksOfLets let_vars ([fv : closed_lets], { rms & rms_var_heap = rms_var_heap })
+ = addSeqRefMarksOfLets let_vars ([fv : closed_lets], { rms & rms_var_heap = rms_var_heap })
# rms_var_heap = addParRefCounts ref_counts rms_var_heap
= addParRefMarksOfLets let_vars ([fv : closed_lets], { rms & rms_var_heap = rms_var_heap })
add_let_variable do_seq_combine var_info_ptr var_occ=:{occ_bind = ob =: OB_OpenLet fv No} (closed_lets, rms=:{rms_var_heap,rms_let_vars})
@@ -451,7 +451,6 @@ where
= closed_lets_and_rms
refMarkOfAlgebraicOrOverloadedListCase free_vars sel def case_expr alternatives case_explicit case_default rms=:{rms_var_heap}
-// # (case_expr_res, rms_var_heap) = partialRefMark free_vars case_expr rms_var_heap
# (def, all_closed_let_vars, rms) = refMarkOfDefault case_explicit free_vars sel def case_expr case_default [] { rms & rms_var_heap = rms_var_heap }
(pattern_depth, all_closed_let_vars, rms) = foldSt (ref_mark_of_algebraic_pattern free_vars sel def case_expr) alternatives (0, all_closed_let_vars, rms)
(let_vars_in_default, rms_var_heap) = addRefMarkOfDefault pattern_depth free_vars def rms.rms_var_heap
@@ -488,14 +487,11 @@ refMarkOfAlternative free_vars [] sel def case_expr alt_expr all_closed_let_vars
refMarkOfAlternative free_vars pattern_vars sel def case_expr alt_expr all_closed_let_vars rms=:{rms_var_heap,rms_let_vars}
# rms_var_heap = saveOccurrences [pattern_vars : free_vars] rms_var_heap
- (closed_let_vars_in_alt, alt_rms) = fullRefMark [pattern_vars : free_vars] sel def alt_expr rms_var_heap
- rms_var_heap = saveOccurrences free_vars alt_rms.rms_var_heap
- (closed_let_vars_in_expr, case_rms) = fullRefMark free_vars sel def case_expr rms_var_heap
- rms_var_heap = parCombine free_vars case_rms.rms_var_heap
- rms_var_heap = openLetVars closed_let_vars_in_alt rms_var_heap
- rms_var_heap = openLetVars closed_let_vars_in_expr rms_var_heap
- = ([ closed_let_vars_in_alt , closed_let_vars_in_expr : all_closed_let_vars ],
- { case_rms & rms_var_heap = rms_var_heap, rms_let_vars = case_rms.rms_let_vars ++ alt_rms.rms_let_vars ++ rms_let_vars })
+ (closed_let_vars_in_alt_and_expr, alt_and_case_rms)
+ = fullRefMark [pattern_vars : free_vars] sel def [alt_expr,case_expr] rms_var_heap
+ rms_var_heap = openLetVars closed_let_vars_in_alt_and_expr alt_and_case_rms.rms_var_heap
+ = ([ closed_let_vars_in_alt_and_expr : all_closed_let_vars ],
+ { alt_and_case_rms & rms_var_heap = rms_var_heap, rms_let_vars = alt_and_case_rms.rms_let_vars ++ rms_let_vars })
addSeqRefMarksOfLets let_vars closed_vars_and_rms
= foldSt ref_mark_of_let let_vars closed_vars_and_rms
@@ -517,7 +513,6 @@ where
-> (closed_let_vars, rms)
// ===> ("addSeqRefMarksOfLets (OB_LockedLet)", fv_ident)
-
addRefMarkOfDefault :: !Int ![[FreeVar]] !(Optional [CountedFreeVar]) !*VarHeap -> *(![FreeVar], !*VarHeap)
addRefMarkOfDefault pattern_depth free_vars (Yes occurrences) var_heap
# var_heap = saveOccurrences free_vars var_heap