diff options
Diffstat (limited to 'frontend/checkFunctionBodies.icl')
-rw-r--r-- | frontend/checkFunctionBodies.icl | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/frontend/checkFunctionBodies.icl b/frontend/checkFunctionBodies.icl index d7a7144..2b729d6 100644 --- a/frontend/checkFunctionBodies.icl +++ b/frontend/checkFunctionBodies.icl @@ -1009,22 +1009,26 @@ where cons_optional No variables = variables -checkExpression free_vars (PE_Selection is_unique expr [PS_Array index_expr]) e_input e_state e_info cs +checkExpression free_vars (PE_Selection selector_kind 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 NormalSelector 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 NormalSelector 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 + # (select_fun, selector_kind) + = case selector_kind of + ParsedNormalSelector + -> (PD_ArraySelectFun, NormalSelector) + ParsedUniqueSelector _ + -> (PD_UnqArraySelectFun, NormalSelectorUniqueElementResult) + # (glob_select_symb, cs) = getPredefinedGlobalSymbol select_fun 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 selector_kind expr [selector], free_vars, e_state, e_info, cs) +checkExpression free_vars (PE_Selection selector_kind 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 - | is_unique - # (tuple_type, cs) = getPredefinedGlobalSymbol (GetTupleTypeIndex 2) PD_PredefinedModule STE_Type 2 cs - = (Selection (UniqueSelector tuple_type False) expr selectors, free_vars, e_state, e_info, cs) - = (Selection NormalSelector expr selectors, free_vars, e_state, e_info, cs) + = case selector_kind of + ParsedNormalSelector + -> (Selection NormalSelector expr selectors, free_vars, e_state, e_info, cs) + ParsedUniqueSelector unique_element + # (tuple_type, cs) = getPredefinedGlobalSymbol (GetTupleTypeIndex 2) PD_PredefinedModule STE_Type 2 cs + -> (Selection (UniqueSelector tuple_type) expr selectors, free_vars, e_state, e_info, cs) checkExpression free_vars (PE_Update expr1 selectors expr2) e_input e_state e_info cs # (expr1, free_vars, e_state, e_info, cs) = checkExpression free_vars expr1 e_input e_state e_info cs (selectors, free_vars, e_state, e_info, cs) = checkSelectors cEndWithUpdate free_vars selectors e_input e_state e_info cs @@ -2191,7 +2195,7 @@ buildSelections e_input {ap_opt_var, ap_array_var, ap_selections} -> (unq_select_symb, NormalSelector, cs) _ # (select_symb, cs) = getPredefinedGlobalSymbol PD_ArraySelectFun PD_StdArray STE_Member 2 cs (tuple_type, cs) = getPredefinedGlobalSymbol (GetTupleTypeIndex 2) PD_PredefinedModule STE_Type 2 cs - -> (select_symb, UniqueSelector tuple_type False, cs) + -> (select_symb, UniqueSelector tuple_type, cs) e_state = { e_state & es_var_heap = es_var_heap, es_expr_heap = es_expr_heap } (index_exprs, (free_vars, e_state, e_info, cs)) |