diff options
Diffstat (limited to 'frontend/convertcases.icl')
-rw-r--r-- | frontend/convertcases.icl | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/frontend/convertcases.icl b/frontend/convertcases.icl index 9772601..3737a75 100644 --- a/frontend/convertcases.icl +++ b/frontend/convertcases.icl @@ -1333,9 +1333,14 @@ where instance copy AlgebraicPattern where - copy pattern=:{ap_vars,ap_expr} cp_info=:{cp_var_heap} - # (ap_expr, cp_info) = copy ap_expr { cp_info & cp_var_heap = foldSt (\{fv_info_ptr} -> writePtr fv_info_ptr VI_LocalVar) ap_vars cp_var_heap} + copy pattern=:{ap_vars,ap_expr} cp_info=:{cp_local_vars, cp_var_heap} + # (cp_local_vars, cp_var_heap) = foldSt bind_pattern_var ap_vars (cp_local_vars, cp_var_heap) + # (ap_expr, cp_info) = copy ap_expr { cp_info & cp_local_vars = cp_local_vars, cp_var_heap = cp_var_heap} = ({ pattern & ap_expr = ap_expr }, cp_info) + where + + bind_pattern_var pattern_var=:{fv_info_ptr} (local_vars, var_heap) + = ([pattern_var : local_vars], var_heap <:= (fv_info_ptr, VI_LocalVar)) instance copy BasicPattern where |