aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorjohnvg2008-10-28 12:09:23 +0000
committerjohnvg2008-10-28 12:09:23 +0000
commitb4fb1ba2f398f0b0de8475d7037531603a6de34b (patch)
tree6a8d09cd1cbfe02ff0c0940d98a19e56ce3368e3 /frontend
parentfix 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.icl34
-rw-r--r--frontend/generics1.icl6
-rw-r--r--frontend/syntax.dcl2
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