aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/checkFunctionBodies.icl73
1 files changed, 25 insertions, 48 deletions
diff --git a/frontend/checkFunctionBodies.icl b/frontend/checkFunctionBodies.icl
index c5e3e82..e03f965 100644
--- a/frontend/checkFunctionBodies.icl
+++ b/frontend/checkFunctionBodies.icl
@@ -74,7 +74,8 @@ make_unboxed_list type_symbol expr_heap cs
# (stdStrictLists_index,cons_u_index,decons_u_index,nil_u_index,decons_u_ident,cs) = get_unboxed_list_indices_and_decons_u_ident cs
# unboxed_list=UnboxedList type_symbol stdStrictLists_index decons_u_index nil_u_index
# (new_info_ptr,expr_heap) = newPtr EI_Empty expr_heap
- # decons_expr = App {app_symb={symb_ident=decons_u_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_u_index,glob_module=stdStrictLists_index}},app_args=[],app_info_ptr=new_info_ptr}
+ app_symb = {symb_ident=decons_u_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_u_index,glob_module=stdStrictLists_index}}
+ # decons_expr = App {app_symb=app_symb,app_args=[],app_info_ptr=new_info_ptr}
= (unboxed_list,decons_expr,expr_heap,cs)
get_unboxed_tail_strict_list_indices_and_decons_uts_ident :: *CheckState -> (!Index,!Index,!Index,!Index,!Ident,!*CheckState);
@@ -91,7 +92,8 @@ make_unboxed_tail_strict_list type_symbol expr_heap cs
# (stdStrictLists_index,cons_uts_index,decons_uts_index,nil_uts_index,decons_uts_ident,cs) = get_unboxed_tail_strict_list_indices_and_decons_uts_ident cs
# unboxed_list=UnboxedTailStrictList type_symbol stdStrictLists_index decons_uts_index nil_uts_index
# (new_info_ptr,expr_heap) = newPtr EI_Empty expr_heap
- # decons_expr = App {app_symb={symb_ident=decons_uts_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_uts_index,glob_module=stdStrictLists_index}},app_args=[],app_info_ptr=new_info_ptr}
+ app_symb = {symb_ident=decons_uts_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_uts_index,glob_module=stdStrictLists_index}}
+ # decons_expr = App {app_symb=app_symb,app_args=[],app_info_ptr=new_info_ptr}
= (unboxed_list,decons_expr,expr_heap,cs)
get_overloaded_list_indices_and_decons_ident :: *CheckState -> (!Index,!Index,!Index,!Index,!Ident,!*CheckState);
@@ -108,7 +110,8 @@ make_overloaded_list type_symbol expr_heap cs
# (stdStrictLists_index,cons_index,decons_index,nil_index,decons_ident,cs) = get_overloaded_list_indices_and_decons_ident cs
# overloaded_list=OverloadedList type_symbol stdStrictLists_index decons_index nil_index
# (new_info_ptr,expr_heap) = newPtr EI_Empty expr_heap
- # decons_expr = App {app_symb={symb_ident=decons_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_index,glob_module=stdStrictLists_index}},app_args=[],app_info_ptr=new_info_ptr}
+ app_symb = {symb_ident=decons_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_index,glob_module=stdStrictLists_index}}
+ # decons_expr = App {app_symb=app_symb,app_args=[],app_info_ptr=new_info_ptr}
= (overloaded_list,decons_expr,expr_heap,cs)
make_case_guards cons_symbol type_symbol alg_patterns expr_heap cs
@@ -195,7 +198,7 @@ where
es_var_heap es_expr_heap dynamics_in_rhs cs
= ([{ ca_rhs = rhs_expr, ca_position = position } : rhs_exprs], free_vars,
{ e_state & es_var_heap = es_var_heap, es_expr_heap = es_expr_heap,
- es_dynamics = dynamics_in_patterns ++ es_dynamics }, e_info, cs)
+ es_dynamics = dynamics_in_patterns ++ es_dynamics }, e_info, cs)
check_function_bodies free_vars fun_args [] e_input e_state e_info cs
= ([], free_vars, e_state, e_info, cs)
@@ -624,7 +627,7 @@ checkExpression free_vars (PE_Let strict let_locals expr) e_input=:{ei_expr_leve
= checkLhssOfLocalDefs ei_expr_level ei_mod_index let_locals ei_local_functions_index_offset e_state e_info cs
e_input = { e_input & ei_expr_level = ei_expr_level }
(let_expr, free_vars, e_state, e_info, cs) = checkExpression free_vars expr e_input e_state e_info cs
- (expr, free_vars, e_state=:{es_dynamics,es_expr_heap,es_var_heap}, e_info, cs)
+ (expr, free_vars, e_state, e_info, cs)
= addArraySelections array_patterns let_expr free_vars e_input e_state e_info cs
(expr, free_vars, e_state, e_info, cs) = checkRhssAndTransformLocalDefs free_vars loc_defs expr e_input e_state e_info cs
(es_fun_defs, e_info, heaps, cs)
@@ -1149,42 +1152,19 @@ checkExpression free_vars (PE_QualifiedIdent module_id ident_name) e_input e_sta
checkExpression free_vars (PE_Generic id=:{id_name,id_info} kind) e_input e_state e_info cs=:{cs_symbol_table}
# (entry, cs_symbol_table) = readPtr id_info cs_symbol_table
= check_generic_expr free_vars entry id kind e_input e_state e_info {cs & cs_symbol_table = cs_symbol_table}
- where
+ where
check_generic_expr :: ![FreeVar] !SymbolTableEntry !Ident !TypeKind !ExpressionInput !*ExpressionState !*ExpressionInfo !*CheckState
-> (!Expression, ![FreeVar], !*ExpressionState, !*ExpressionInfo, !*CheckState)
- check_generic_expr
- free_vars entry=:{ste_kind=STE_Generic,ste_index} id kind
- e_input=:{ei_mod_index} e_state
- e_info=:{ef_generic_defs} cs
-
- #! (ef_generic_defs, e_state) = add_kind ste_index kind ef_generic_defs e_state
- #! e_info = { e_info & ef_generic_defs = ef_generic_defs }
- = check_it free_vars ei_mod_index ste_index id kind e_input e_state e_info cs
- check_generic_expr
- free_vars entry=:{ste_kind=STE_Imported STE_Generic mod_index, ste_index} id kind
- e_input e_state
- e_info=:{ef_modules} cs
-
- #! (dcl_module, ef_modules) = ef_modules ! [mod_index]
- #! (dcl_common, dcl_module) = dcl_module ! dcl_common
- #! (com_generic_defs, dcl_common) = dcl_common ! com_generic_defs
-
- #! (com_generic_defs, e_state) = add_kind ste_index kind com_generic_defs e_state
-
- #! dcl_common = {dcl_common & com_generic_defs = com_generic_defs}
- #! dcl_module = {dcl_module & dcl_common = dcl_common}
- #! ef_modules = {ef_modules & [mod_index] = dcl_module}
-
- #! e_info = { e_info & ef_modules = ef_modules }
-
- = check_it free_vars mod_index ste_index id kind e_input e_state e_info cs
- check_generic_expr free_vars entry=:{ste_kind=STE_Empty} id kind e_input e_state e_info cs=:{cs_error}
+ check_generic_expr free_vars entry=:{ste_kind=STE_Generic,ste_index} id kind e_input=:{ei_mod_index} e_state e_info cs
+ = check_it free_vars ei_mod_index ste_index id kind e_input e_state e_info cs
+ check_generic_expr free_vars entry=:{ste_kind=STE_Imported STE_Generic mod_index, ste_index} id kind e_input e_state e_info cs
+ = check_it free_vars mod_index ste_index id kind e_input e_state e_info cs
+ check_generic_expr free_vars entry=:{ste_kind=STE_Empty} id kind e_input e_state e_info cs=:{cs_error}
= (EE, free_vars, e_state, e_info, { cs & cs_error = checkError id "undefined generic" cs_error })
- check_generic_expr free_vars entry id kind e_input e_state e_info cs=:{cs_error}
+ check_generic_expr free_vars entry id kind e_input e_state e_info cs=:{cs_error}
= (EE, free_vars, e_state, e_info, { cs & cs_error = checkError id "not a generic" cs_error })
- check_it free_vars mod_index gen_index id kind e_input e_state=:{es_expr_heap} e_info cs
-
+ check_it free_vars mod_index gen_index id kind e_input e_state=:{es_expr_heap} e_info cs
# (generic_info_expr, es_expr_heap, cs) = build_generic_info es_expr_heap cs
#! (app_args, es_expr_heap, cs) = SwitchGenericInfo
([generic_info_expr], es_expr_heap, cs)
@@ -1202,7 +1182,7 @@ checkExpression free_vars (PE_Generic id=:{id_name,id_info} kind) e_input e_stat
#! pds_ident = predefined_idents.[PD_NoGenericInfo]
#! ({pds_module, pds_def}, cs_predef_symbols) = cs_predef_symbols ! [PD_NoGenericInfo]
#! (new_info_ptr, es_expr_heap) = newPtr EI_Empty es_expr_heap
- #! app =
+ #! app =
{ app_symb =
{ symb_ident = pds_ident
, symb_kind = SK_Constructor {glob_module=pds_module, glob_object=pds_def}
@@ -1215,12 +1195,6 @@ checkExpression free_vars (PE_Generic id=:{id_name,id_info} kind) e_input e_stat
add_kind :: !Index !TypeKind !u:{#GenericDef} !*ExpressionState
-> (!u:{#GenericDef}, !*ExpressionState)
add_kind generic_index kind generic_defs e_state=:{es_generic_heap}
-/*
- #! ({gen_info_ptr}, generic_defs) = generic_defs ! [generic_index]
- #! (gen_info, es_generic_heap) = readPtr gen_info_ptr es_generic_heap
- #! gen_kinds = eqMerge [(kind,NoIndex)] gen_info.gen_kinds
- #! es_generic_heap = writePtr gen_info_ptr {gen_info&gen_kinds=gen_kinds} es_generic_heap
-*/
= (generic_defs, {e_state & es_generic_heap = es_generic_heap})
checkExpression free_vars (PE_TypeSignature array_kind expr) e_input e_state e_info cs
@@ -1330,7 +1304,7 @@ where
= (Constant symbol arity priority, free_vars, e_state, e_info, cs)
= case symb_kind of
SK_Constructor _
- # app_expr = App { app_symb = symbol , app_args = [], app_info_ptr = nilPtr }
+ # app_expr = App {app_symb = symbol, app_args = [], app_info_ptr = nilPtr}
-> (app_expr, free_vars, e_state, e_info, cs)
SK_NewTypeConstructor _
# cs = { cs & cs_error = checkError id "argument missing (for newtype constructor)" cs.cs_error}
@@ -1498,7 +1472,7 @@ checkQualifiedIdentExpression free_vars module_id ident_name is_expr_list e_inpu
# (app_expr, e_state) = build_application_or_constant_for_function symbol fun_arity fun_priority e_state
-> (app_expr, free_vars, e_state, e_info, cs)
_
- -> (EE, free_vars, e_state, e_info, { cs & cs_error = checkError (module_id.id_name+++"@"+++ident_name) "not imported" cs.cs_error })
+ -> (EE, free_vars, e_state, e_info, { cs & cs_error = checkError ("'"+++module_id.id_name+++"'."+++ident_name) "not imported" cs.cs_error })
where
build_application_or_constant_for_function symbol arity priority e_state
| is_expr_list
@@ -2196,17 +2170,20 @@ add_decons_call_for_overloaded_lists glob_module ds_index src_expr expr_heap cs
| pd_cons_index==PD_UnboxedConsSymbol
# (stdStrictLists_index,_,decons_u_index,_,decons_u_ident,cs) = get_unboxed_list_indices_and_decons_u_ident cs
# (new_info_ptr,expr_heap) = newPtr EI_Empty expr_heap
- # decons_u_expr = App {app_symb={symb_ident=decons_u_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_u_index,glob_module=stdStrictLists_index}},app_args=[src_expr],app_info_ptr=new_info_ptr}
+ app_symb = {symb_ident=decons_u_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_u_index,glob_module=stdStrictLists_index}}
+ # decons_u_expr = App {app_symb=app_symb,app_args=[src_expr],app_info_ptr=new_info_ptr}
= (decons_u_expr,expr_heap,cs)
| pd_cons_index==PD_UnboxedTailStrictConsSymbol
# (stdStrictLists_index,_,decons_uts_index,_,decons_uts_ident,cs) = get_unboxed_tail_strict_list_indices_and_decons_uts_ident cs
# (new_info_ptr,expr_heap) = newPtr EI_Empty expr_heap
- # decons_uts_expr = App {app_symb={symb_ident=decons_uts_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_uts_index,glob_module=stdStrictLists_index}},app_args=[src_expr],app_info_ptr=new_info_ptr}
+ app_symb = {symb_ident=decons_uts_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_uts_index,glob_module=stdStrictLists_index}}
+ # decons_uts_expr = App {app_symb=app_symb,app_args=[src_expr],app_info_ptr=new_info_ptr}
= (decons_uts_expr,expr_heap,cs)
| pd_cons_index==PD_OverloadedConsSymbol
# (stdStrictLists_index,_,decons_index,_,decons_ident,cs) = get_overloaded_list_indices_and_decons_ident cs
# (new_info_ptr,expr_heap) = newPtr EI_Empty expr_heap
- # decons_expr = App {app_symb={symb_ident=decons_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_index,glob_module=stdStrictLists_index}},app_args=[src_expr],app_info_ptr=new_info_ptr}
+ app_symb = {symb_ident=decons_ident,symb_kind=SK_OverloadedFunction {glob_object=decons_index,glob_module=stdStrictLists_index}}
+ # decons_expr = App {app_symb=app_symb,app_args=[src_expr],app_info_ptr=new_info_ptr}
= (decons_expr,expr_heap,cs)
= (src_expr,expr_heap,cs)
= (src_expr,expr_heap,cs)