diff options
author | sjakie | 1999-11-16 16:24:26 +0000 |
---|---|---|
committer | sjakie | 1999-11-16 16:24:26 +0000 |
commit | d5a33b7794fc822c9c1769c63360ec51d6d82417 (patch) | |
tree | fb82c5351c24cc1ed026680a023e4890b345ee9f | |
parent | allow operator names like .* (diff) |
bug fix: single unique selections of arrays adjusted
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@54 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r-- | frontend/check.icl | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/frontend/check.icl b/frontend/check.icl index 114f539..a0ca8dc 100644 --- a/frontend/check.icl +++ b/frontend/check.icl @@ -1377,7 +1377,15 @@ where (pattern_expr, binds, expr_heap) = bind_pattern_variables variables (Var bound_var) expr_heap = (pattern_expr, [{bind_src = this_pattern_expr, bind_dst = free_var} : binds], expr_heap) - +checkExpression free_vars (PE_Selection is_unique expr [PS_Array index_expr]) e_input e_state e_info cs + # (expr, free_vars, e_state, e_info, cs) = checkExpression free_vars expr e_input e_state e_info cs + | is_unique + # (glob_select_symb, cs) = getPredefinedGlobalSymbol PD_UnqArraySelectFun PD_StdArray STE_Member 2 cs + (selector, free_vars, e_state, e_info, cs) = checkArraySelection glob_select_symb free_vars index_expr e_input e_state e_info cs + = (Selection No expr [selector], free_vars, e_state, e_info, cs) + # (glob_select_symb, cs) = getPredefinedGlobalSymbol PD_ArraySelectFun PD_StdArray STE_Member 2 cs + (selector, free_vars, e_state, e_info, cs) = checkArraySelection glob_select_symb free_vars index_expr e_input e_state e_info cs + = (Selection No expr [selector], free_vars, e_state, e_info, cs) checkExpression free_vars (PE_Selection is_unique expr selectors) e_input e_state e_info cs # (selectors, free_vars, e_state, e_info, cs) = checkSelectors cEndWithSelection free_vars selectors e_input e_state e_info cs (expr, free_vars, e_state, e_info, cs) = checkExpression free_vars expr e_input e_state e_info cs @@ -1531,6 +1539,8 @@ checkExpression free_vars (PE_Ident id) e_input e_state e_info cs checkExpression free_vars expr e_input e_state e_info cs = abort "checkExpression (check.icl, line 1433)" <<- expr +:: LastSelection = LS_Update | LS_Selction | LS_UniqueSelection + checkSelectors end_with_update free_vars [ selector : selectors ] e_input e_state e_info cs | isEmpty selectors # (selector, free_vars, e_state, e_info, cs) = check_selector end_with_update free_vars selector e_input e_state e_info cs @@ -1588,16 +1598,17 @@ where = determine_selector mod_index type_mod_index type_index selectors selector_defs modules = determine_selector mod_index type_mod_index type_index selectors selector_defs modules - check_selector end_with_update free_vars (PS_Array index_expr) e_input=:{ei_mod_index} e_state e_info cs - # (index_expr, free_vars, e_state, e_info, cs) = checkExpression free_vars index_expr e_input e_state e_info cs - (glob_select_symb, cs) = get_select_or_update end_with_update cs - (new_info_ptr, es_expression_heap) = newPtr EI_Empty e_state.es_expression_heap - = (ArraySelection glob_select_symb new_info_ptr index_expr, free_vars, { e_state & es_expression_heap = es_expression_heap }, e_info, cs) - - get_select_or_update end_with_update cs + check_selector end_with_update free_vars (PS_Array index_expr) e_input e_state e_info cs | end_with_update - = getPredefinedGlobalSymbol PD_ArrayUpdateFun PD_StdArray STE_Member 3 cs - = getPredefinedGlobalSymbol PD_ArraySelectFun PD_StdArray STE_Member 2 cs + # (glob_select_symb, cs) = getPredefinedGlobalSymbol PD_ArrayUpdateFun PD_StdArray STE_Member 3 cs + = checkArraySelection glob_select_symb free_vars index_expr e_input e_state e_info cs + # (glob_select_symb, cs) = getPredefinedGlobalSymbol PD_ArraySelectFun PD_StdArray STE_Member 2 cs + = checkArraySelection glob_select_symb free_vars index_expr e_input e_state e_info cs + +checkArraySelection glob_select_symb free_vars index_expr e_input e_state e_info cs + # (index_expr, free_vars, e_state, e_info, cs) = checkExpression free_vars index_expr e_input e_state e_info cs + (new_info_ptr, es_expression_heap) = newPtr EI_Empty e_state.es_expression_heap + = (ArraySelection glob_select_symb new_info_ptr index_expr, free_vars, { e_state & es_expression_heap = es_expression_heap }, e_info, cs) buildLetExpression :: !(Env Expression FreeVar) !Bool !Expression !*ExpressionHeap -> (!Expression, !*ExpressionHeap) buildLetExpression [] is_strict expr expr_heap |