diff options
author | johnvg | 2013-04-02 15:26:26 +0000 |
---|---|---|
committer | johnvg | 2013-04-02 15:26:26 +0000 |
commit | d4e397a35be100674c23b2c863210136d5b5d35c (patch) | |
tree | e314addf40d5e1b8ea31701a80dc2435d7ac2b90 /frontend/classify.icl | |
parent | in 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.icl | 21 |
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) |