diff options
author | johnvg | 2008-10-28 12:09:23 +0000 |
---|---|---|
committer | johnvg | 2008-10-28 12:09:23 +0000 |
commit | b4fb1ba2f398f0b0de8475d7037531603a6de34b (patch) | |
tree | 6a8d09cd1cbfe02ff0c0940d98a19e56ce3368e3 /frontend | |
parent | fix conversion of nested guards that may fail, incorrect code was generated (diff) |
remove fields gen_cases and gen_star_cases because they are not
used and may cause the compiler to crash if generic definitions and
instances occur on a cycle of definition modules
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1702 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/check.icl | 34 | ||||
-rw-r--r-- | frontend/generics1.icl | 6 | ||||
-rw-r--r-- | frontend/syntax.dcl | 2 |
3 files changed, 1 insertions, 41 deletions
diff --git a/frontend/check.icl b/frontend/check.icl index b49df0e..be87fcd 100644 --- a/frontend/check.icl +++ b/frontend/check.icl @@ -61,9 +61,7 @@ where alloc_gen_info gen_def heaps=:{hp_generic_heap} # initial_info = { gen_classes = createArray 32 [] - , gen_cases = [] , gen_var_kinds = [] - , gen_star_case = {gi_module=NoIndex, gi_index=NoIndex} } # (gen_info_ptr, hp_generic_heap) = newPtr initial_info hp_generic_heap = ( {gen_def & gen_info_ptr = gen_info_ptr}, @@ -211,12 +209,6 @@ where , gc_type_cons = gc_type_cons } #! gen_case_defs = { gen_case_defs & [index] = case_def } - - #! (generic_def, generic_defs, modules) = get_generic_def generic_gi mod_index generic_defs modules - #! gindex = {gi_module=mod_index,gi_index=index} - #! heaps = add_case_to_generic generic_def gindex heaps - - #! (heaps, cs) = check_star_case gc_type_cons generic_def gindex heaps cs #! (cs=:{cs_x}) = popErrorAdmin cs #! cs = { cs & cs_x = {cs_x & x_needed_modules = cs_x.x_needed_modules bitor cNeedStdGeneric}} @@ -269,32 +261,6 @@ where _ -> //abort "--------------" ---> ("STE_Kind", ste.ste_kind) ( {gi_module=NoIndex,gi_index = NoIndex} , {cs & cs_error = checkError id_name "generic undefined" cs.cs_error}) - - get_generic_def :: !GlobalIndex !Int !u:{#GenericDef} !v:{#DclModule} -> (!GenericDef,!u:{#GenericDef},!v:{#DclModule}) - get_generic_def {gi_module, gi_index} mod_index generic_defs modules - | gi_module == mod_index - # (generic_def, generic_defs) = generic_defs![gi_index] - = (generic_def, generic_defs, modules) - # (dcl_mod, modules) = modules![gi_module] - = (dcl_mod.dcl_common.com_generic_defs.[gi_index], generic_defs, modules) - - add_case_to_generic :: !GenericDef !GlobalIndex !*Heaps -> *Heaps - add_case_to_generic {gen_info_ptr} index heaps=:{hp_generic_heap} - # (info=:{gen_cases}, hp_generic_heap) = readPtr gen_info_ptr hp_generic_heap - # info = { info & gen_cases = [index:gen_cases]} - = { heaps & hp_generic_heap = writePtr gen_info_ptr info hp_generic_heap} - - check_star_case :: !TypeCons !GenericDef !GlobalIndex !*Heaps !*CheckState -> (!*Heaps, !*CheckState) - check_star_case (TypeConsVar _) {gen_ident, gen_info_ptr} index heaps=:{hp_generic_heap} cs=:{cs_error} - # (info=:{gen_star_case}, hp_generic_heap) = readPtr gen_info_ptr hp_generic_heap - | gen_star_case.gi_module <> NoIndex - # cs_error = checkError gen_ident "general kind-* case is already defined" cs_error - = ({ heaps & hp_generic_heap = hp_generic_heap}, {cs & cs_error = cs_error}) - # info = { info & gen_star_case = index } - # hp_generic_heap = writePtr gen_info_ptr info hp_generic_heap - = ({ heaps & hp_generic_heap = hp_generic_heap}, {cs & cs_error = cs_error}) - check_star_case _ _ _ heaps cs - = (heaps, cs) checkTypeClasses :: !Index !(Optional (CopiedDefinitions, Int)) !*{#ClassDef} !*{#MemberDef} !*{#CheckedTypeDef} !*{#DclModule} !*Heaps !*CheckState -> (!*{#ClassDef}, !*{#MemberDef}, !*{#CheckedTypeDef}, !*{#DclModule}, !*Heaps, !*CheckState) diff --git a/frontend/generics1.icl b/frontend/generics1.icl index a44cfce..f14641b 100644 --- a/frontend/generics1.icl +++ b/frontend/generics1.icl @@ -224,11 +224,7 @@ where clear_generic_def _ generic_def=:{gen_ident,gen_info_ptr} heaps=:{hp_generic_heap} #! (gen_info, hp_generic_heap) = readPtr gen_info_ptr hp_generic_heap - #! gen_info = - { gen_info - & gen_cases = [] - , gen_classes = createArray 32 [] - } + #! gen_info = { gen_info & gen_classes = createArray 32 [] } #! hp_generic_heap = writePtr gen_info_ptr gen_info hp_generic_heap = (generic_def, {heaps & hp_generic_heap = hp_generic_heap}) diff --git a/frontend/syntax.dcl b/frontend/syntax.dcl index 61715b4..331ef76 100644 --- a/frontend/syntax.dcl +++ b/frontend/syntax.dcl @@ -391,9 +391,7 @@ cNameLocationDependent :== True :: GenericInfo = { gen_classes :: !GenericClassInfos - , gen_cases :: ![GlobalIndex] , gen_var_kinds :: ![TypeKind] // kinds of all st_vars of the gen_type - , gen_star_case :: !GlobalIndex // general case for kind-star types } :: GenericInfoPtr :== Ptr GenericInfo :: GenericHeap :== Heap GenericInfo |