aboutsummaryrefslogtreecommitdiff
path: root/frontend/overloading.icl
diff options
context:
space:
mode:
authorjohnvg2008-04-09 11:19:40 +0000
committerjohnvg2008-04-09 11:19:40 +0000
commit192f5173c6b6fb55267947d6e91388589ab42214 (patch)
treeb5823e8ca65d85d836163fb19923f303165a0964 /frontend/overloading.icl
parentfix bug in codegeneration for a redirection of an evaluated array to (diff)
report an error if a type context is specified multiple times in a function type
(instead of abort) git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1699 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/overloading.icl')
-rw-r--r--frontend/overloading.icl13
1 files changed, 8 insertions, 5 deletions
diff --git a/frontend/overloading.icl b/frontend/overloading.icl
index 1250c5b..3cc68ee 100644
--- a/frontend/overloading.icl
+++ b/frontend/overloading.icl
@@ -1106,8 +1106,8 @@ where
# (fun_def, fun_defs) = fun_defs![fun_index]
(CheckedType st=:{st_context}, fun_env) = fun_env![fun_index]
{fun_body = TransformedBody {tb_args,tb_rhs},fun_info,fun_arity,fun_ident,fun_pos} = fun_def
- (rev_variables, var_heap) = foldSt determine_class_argument st_context ([], var_heap)
error = setErrorAdmin (newPosition fun_ident fun_pos) error
+ (rev_variables,var_heap,error) = foldSt determine_class_argument st_context ([],var_heap,error)
(type_code_info, symbol_heap, type_pattern_vars, var_heap, error)
= convertDynamicTypes fun_info.fi_dynamics (type_code_info, symbol_heap, type_pattern_vars, var_heap, error)
@@ -1134,7 +1134,7 @@ where
mark_type_codes _ info
= info
- determine_class_argument {tc_class, tc_var} (variables, var_heap)
+ determine_class_argument {tc_class, tc_var} (variables,var_heap,error)
# (var_info, var_heap) = readPtr tc_var var_heap
= case var_info of
VI_ForwardClassVar var_info_ptr
@@ -1142,14 +1142,17 @@ where
-> case var_info of
VI_Empty
# (new_info_ptr, var_heap) = newPtr VI_Empty var_heap
- -> ([var_info_ptr : variables], var_heap <:= (var_info_ptr, VI_ClassVar (build_var_name (toString tc_class)) new_info_ptr 0))
+ -> ([var_info_ptr : variables],var_heap <:= (var_info_ptr, VI_ClassVar (build_var_name (toString tc_class)) new_info_ptr 0),error)
+ VI_ClassVar _ _ _
+ # error = errorHeading "Overloading error" error
+ error = {error & ea_file = error.ea_file <<< " a type context occurs multiple times in the specified type\n" }
+ -> ([var_info_ptr : variables],var_heap,error)
_
-> abort ("determine_class_argument 1 (overloading.icl)") //<<- var_info)
VI_Empty
# (new_info_ptr, var_heap) = newPtr VI_Empty var_heap
- var_heap = var_heap
- -> ([tc_var : variables], var_heap <:= (tc_var, VI_ClassVar (build_var_name (toString tc_class)) new_info_ptr 0))
+ -> ([tc_var : variables],var_heap <:= (tc_var, VI_ClassVar (build_var_name (toString tc_class)) new_info_ptr 0),error)
_
-> abort ("determine_class_argument 2 (overloading.icl)") // <<- var_info)