aboutsummaryrefslogtreecommitdiff
path: root/frontend/checkFunctionBodies.icl
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/checkFunctionBodies.icl')
-rw-r--r--frontend/checkFunctionBodies.icl32
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))