aboutsummaryrefslogtreecommitdiff
path: root/frontend/classify.icl
diff options
context:
space:
mode:
authorjohnvg2013-04-02 15:26:26 +0000
committerjohnvg2013-04-02 15:26:26 +0000
commitd4e397a35be100674c23b2c863210136d5b5d35c (patch)
treee314addf40d5e1b8ea31701a80dc2435d7ac2b90 /frontend/classify.icl
parentin function adjust_type_code, add alternative for TCE_Selector, (diff)
add type constraints in constructors and function arguments with universal quantifier (from iTask branch)
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@2218 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/classify.icl')
-rw-r--r--frontend/classify.icl21
1 files changed, 20 insertions, 1 deletions
diff --git a/frontend/classify.icl b/frontend/classify.icl
index 0e5725f..15b67e5 100644
--- a/frontend/classify.icl
+++ b/frontend/classify.icl
@@ -483,6 +483,16 @@ instance consumerRequirements Expression where
= (CPassive, False, ai)
consumerRequirements (FailExpr _) _ ai
= (CPassive, False, ai)
+ consumerRequirements (DictionariesFunction dictionaries expr expr_type) common_defs ai
+ # (new_next_var,new_next_var_of_fun,ai_var_heap) = init_variables dictionaries ai.ai_next_var ai.ai_next_var_of_fun ai.ai_var_heap
+ # ai = {ai & ai_next_var=new_next_var,ai_next_var_of_fun=new_next_var_of_fun,ai_var_heap=ai_var_heap}
+ = consumerRequirements expr common_defs ai
+ where
+ init_variables [({fv_info_ptr},_):dictionaries] ai_next_var ai_next_var_of_fun ai_var_heap
+ # ai_var_heap = writePtr fv_info_ptr (VI_AccVar ai_next_var ai_next_var_of_fun) ai_var_heap
+ = init_variables dictionaries (inc ai_next_var) (inc ai_next_var_of_fun) ai_var_heap
+ init_variables [] ai_next_var ai_next_var_of_fun ai_var_heap
+ = (ai_next_var,ai_next_var_of_fun,ai_var_heap)
consumerRequirements expr _ ai
= abort ("consumerRequirements [Expression]" ---> expr)
@@ -685,7 +695,7 @@ instance consumerRequirements Case where
_ -> False
inspect_patterns :: !{#CommonDefs} !Bool !CasePatterns ![(Int,Bool)] -> (!Bool,!Bool)
- inspect_patterns common_defs has_default (AlgebraicPatterns {gi_index,gi_module} algebraic_patterns) constructors_and_unsafe_bits
+ inspect_patterns common_defs has_default (AlgebraicPatterns {gi_index,gi_module} _) constructors_and_unsafe_bits
# type_def = common_defs.[gi_module].com_type_defs.[gi_index]
defined_symbols = case type_def.td_rhs of
AlgType defined_symbols -> defined_symbols
@@ -1473,6 +1483,13 @@ count_locals EE n
count_locals (FailExpr _) n = n
count_locals (NoBind _) n
= n
+count_locals (DictionariesFunction dictionaries expr expr_type) n
+ = count_locals expr (foldSt count_local_dictionary dictionaries n)
+ where
+ count_local_dictionary ({fv_count},_) n
+ | fv_count > 0
+ = n+1
+ = n
count_optional_locals (Yes e) n
= count_locals e n
@@ -1781,6 +1798,8 @@ instance producerRequirements Expression where
= (True,prs)
producerRequirements (FailExpr _) prs
= (True,prs)
+ producerRequirements (DictionariesFunction dictionaries expr expr_type) prs
+ = producerRequirements expr prs
producerRequirements expr prs
= abort ("producerRequirements " ---> expr)