aboutsummaryrefslogtreecommitdiff
path: root/frontend/type.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/type.icl')
-rw-r--r--frontend/type.icl21
1 files changed, 19 insertions, 2 deletions
diff --git a/frontend/type.icl b/frontend/type.icl
index 37dc4b6..afd8528 100644
--- a/frontend/type.icl
+++ b/frontend/type.icl
@@ -840,11 +840,13 @@ where
instance requirements Case
where
- requirements ti {case_expr,case_guards,case_default,case_info_ptr} reqs_ts
+// MW4 was: requirements ti {case_expr,case_guards,case_default,case_info_ptr} reqs_ts
+ requirements ti {case_expr,case_guards,case_default,case_info_ptr, case_default_pos} reqs_ts
# (expr_type, opt_expr_ptr, (reqs, ts)) = requirements ti case_expr reqs_ts
(fresh_v, ts) = freshAttributedVariable ts
(cons_types, reqs_ts) = requirements_of_guarded_expressions ti case_guards case_expr expr_type opt_expr_ptr fresh_v (reqs, ts)
- (reqs, ts) = requirements_of_default ti case_default fresh_v reqs_ts
+// MW4 was: (reqs, ts) = requirements_of_default ti case_default fresh_v reqs_ts
+ (reqs, ts) = requirements_of_default ti case_default case_default_pos fresh_v reqs_ts
ts_expr_heap = ts.ts_expr_heap <:= (case_info_ptr, EI_CaseType { ct_pattern_type = expr_type, ct_result_type = fresh_v, ct_cons_types = cons_types })
= (fresh_v, No, ({ reqs & req_case_and_let_exprs = [case_info_ptr : reqs.req_case_and_let_exprs]},
{ ts & ts_expr_heap = ts_expr_heap }))
@@ -977,6 +979,7 @@ where
// ..MW4
+/* MW4 was:
requirements_of_default ti (Yes expr) goal_type reqs_ts
# (res_type, opt_expr_ptr, (reqs, ts)) = requirements ti expr reqs_ts
ts_expr_heap = storeAttribute opt_expr_ptr res_type.at_attribute ts.ts_expr_heap
@@ -984,6 +987,20 @@ where
{ ts & ts_expr_heap = ts_expr_heap })
requirements_of_default ti No goal_type reqs_ts
= reqs_ts
+*/
+ requirements_of_default ti (Yes expr) case_default_pos goal_type reqs_ts
+ = possibly_accumulate_reqs_in_new_group
+ case_default_pos
+ (reqs_of_default ti expr goal_type)
+ reqs_ts
+ requirements_of_default ti No _ goal_type reqs_ts
+ = reqs_ts
+
+ reqs_of_default ti expr goal_type reqs_ts
+ # (res_type, opt_expr_ptr, (reqs, ts)) = requirements ti expr reqs_ts
+ ts_expr_heap = storeAttribute opt_expr_ptr res_type.at_attribute ts.ts_expr_heap
+ = ({ reqs & req_type_coercions = [ { tc_demanded = goal_type, tc_offered = res_type, tc_position = CP_Expression expr, tc_coercible = True } : reqs.req_type_coercions] },
+ { ts & ts_expr_heap = ts_expr_heap })
instance requirements Let
where