aboutsummaryrefslogtreecommitdiff
path: root/frontend/hashtable.icl
diff options
context:
space:
mode:
authorjohnvg2001-11-30 15:07:00 +0000
committerjohnvg2001-11-30 15:07:00 +0000
commitd0e49e5993aa362f2dab239dbfda4fbe77c6500f (patch)
tree9fc9e8b33d4bad2c6db49320655f5e01345913fa /frontend/hashtable.icl
parentstore predefined identifiers in CAF (diff)
store predefined identifiers in CAF
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@912 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'frontend/hashtable.icl')
-rw-r--r--frontend/hashtable.icl49
1 files changed, 23 insertions, 26 deletions
diff --git a/frontend/hashtable.icl b/frontend/hashtable.icl
index 0f8cd27..a63393b 100644
--- a/frontend/hashtable.icl
+++ b/frontend/hashtable.icl
@@ -80,29 +80,6 @@ where
char = name.[index]
= hash_value name index (val << 2 + toInt char)
-/*
-putIdentInHashTable :: !String !IdentClass !*HashTable -> (!Ident, !*HashTable)
-putIdentInHashTable name ident_class {hte_symbol_heap,hte_entries}
- # hash_val = hashValue name
- (entries,hte_entries) = replace hte_entries hash_val HTE_Empty
- (ident, hte_symbol_heap, entries) = insert name ident_class hte_symbol_heap entries
- hte_entries = update hte_entries hash_val entries
- = (ident, { hte_symbol_heap = hte_symbol_heap, hte_entries = hte_entries })
-where
- insert :: !String !IdentClass !*SymbolTable *HashTableEntry -> (!Ident, !*SymbolTable, !*HashTableEntry)
- insert name ident_class hte_symbol_heap HTE_Empty
- # (hte_symbol_ptr, hte_symbol_heap) = newPtr EmptySymbolTableEntry hte_symbol_heap
- = ({ id_name = name, id_info = hte_symbol_ptr}, hte_symbol_heap, HTE_Ident name hte_symbol_ptr ident_class HTE_Empty HTE_Empty)
- insert name ident_class hte_symbol_heap (HTE_Ident hte_name hte_symbol_ptr hte_class hte_left hte_right)
- # cmp = (name,ident_class) =< (hte_name,hte_class)
- | cmp == Equal
- = ({ id_name = hte_name, id_info = hte_symbol_ptr}, hte_symbol_heap, HTE_Ident hte_name hte_symbol_ptr hte_class hte_left hte_right)
- | cmp == Smaller
- #! (ident, hte_symbol_heap, hte_left) = insert name ident_class hte_symbol_heap hte_left
- = (ident, hte_symbol_heap, HTE_Ident hte_name hte_symbol_ptr hte_class hte_left hte_right)
- #! (ident, hte_symbol_heap, hte_right) = insert name ident_class hte_symbol_heap hte_right
- = (ident, hte_symbol_heap, HTE_Ident hte_name hte_symbol_ptr hte_class hte_left hte_right)
-*/
putIdentInHashTable :: !String !IdentClass !*HashTable -> (!BoxedIdent, !*HashTable)
putIdentInHashTable name ident_class {hte_symbol_heap,hte_entries,hte_mark}
# hash_val = hashValue name
@@ -115,14 +92,11 @@ where
insert name ident_class hte_mark0 hte_symbol_heap HTE_Empty
# (hte_symbol_ptr, hte_symbol_heap) = newPtr EmptySymbolTableEntry hte_symbol_heap
# ident = { id_name = name, id_info = hte_symbol_ptr}
-// = ({boxed_ident=ident}, hte_symbol_heap, HTE_Ident ident ident_class hte_mark0 HTE_Empty HTE_Empty)
# boxed_ident={boxed_ident=ident}
= (boxed_ident, hte_symbol_heap, HTE_Ident boxed_ident ident_class hte_mark0 HTE_Empty HTE_Empty)
-// insert name ident_class hte_mark0 hte_symbol_heap (HTE_Ident hte_ident=:{id_name,id_info} hte_class hte_mark hte_left hte_right)
insert name ident_class hte_mark0 hte_symbol_heap (HTE_Ident hte_ident=:{boxed_ident={id_name,id_info}} hte_class hte_mark hte_left hte_right)
# cmp = (name,ident_class) =< (id_name,hte_class)
| cmp == Equal
-// = ({boxed_ident=hte_ident}, hte_symbol_heap, HTE_Ident hte_ident hte_class (hte_mark bitand hte_mark0) hte_left hte_right)
= (hte_ident, hte_symbol_heap, HTE_Ident hte_ident hte_class (hte_mark bitand hte_mark0) hte_left hte_right)
| cmp == Smaller
#! (boxed_ident, hte_symbol_heap, hte_left) = insert name ident_class hte_mark0 hte_symbol_heap hte_left
@@ -130,6 +104,29 @@ where
#! (boxed_ident, hte_symbol_heap, hte_right) = insert name ident_class hte_mark0 hte_symbol_heap hte_right
= (boxed_ident, hte_symbol_heap, HTE_Ident hte_ident hte_class hte_mark hte_left hte_right)
+putPredefinedIdentInHashTable :: !Ident !IdentClass !*HashTable -> !*HashTable
+putPredefinedIdentInHashTable predefined_ident=:{id_name} ident_class {hte_symbol_heap,hte_entries,hte_mark}
+ # hash_val = hashValue id_name
+ (entries,hte_entries) = replace hte_entries hash_val HTE_Empty
+ (hte_symbol_heap, entries) = insert id_name ident_class hte_mark hte_symbol_heap entries
+ hte_entries = update hte_entries hash_val entries
+ = { hte_symbol_heap = hte_symbol_heap, hte_entries = hte_entries,hte_mark=hte_mark }
+where
+ insert :: !String !IdentClass !Int !*SymbolTable *HashTableEntry -> (!*SymbolTable, !*HashTableEntry)
+ insert name ident_class hte_mark0 hte_symbol_heap HTE_Empty
+ # hte_symbol_heap = writePtr predefined_ident.id_info EmptySymbolTableEntry hte_symbol_heap
+ # boxed_ident={boxed_ident=predefined_ident}
+ = (hte_symbol_heap, HTE_Ident boxed_ident ident_class hte_mark0 HTE_Empty HTE_Empty)
+ insert name ident_class hte_mark0 hte_symbol_heap (HTE_Ident hte_ident=:{boxed_ident={id_name,id_info}} hte_class hte_mark hte_left hte_right)
+ # cmp = (name,ident_class) =< (id_name,hte_class)
+ | cmp == Equal
+ = (hte_symbol_heap, HTE_Ident hte_ident hte_class (hte_mark bitand hte_mark0) hte_left hte_right)
+ | cmp == Smaller
+ #! (hte_symbol_heap, hte_left) = insert name ident_class hte_mark0 hte_symbol_heap hte_left
+ = (hte_symbol_heap, HTE_Ident hte_ident hte_class hte_mark hte_left hte_right)
+ #! (hte_symbol_heap, hte_right) = insert name ident_class hte_mark0 hte_symbol_heap hte_right
+ = (hte_symbol_heap, HTE_Ident hte_ident hte_class hte_mark hte_left hte_right)
+
remove_icl_symbols_from_hash_table :: !*HashTable -> *HashTable
remove_icl_symbols_from_hash_table hash_table=:{hte_entries}
# hte_entries=remove_icl_symbols_from_array 0 hte_entries