From 75a738b4293262f5bc9ac228997c087b9d1eb72b Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Tue, 19 Jul 2005 15:52:19 +0000 Subject: [PATCH] *** empty log message *** --- ase/stx/bootstrp.c | 11 ++--------- ase/stx/class.c | 12 ++++-------- ase/stx/dict.c | 40 +++++++++++++++++----------------------- ase/stx/object.c | 13 +------------ ase/stx/object.h | 4 +--- ase/stx/symbol.c | 4 ++-- 6 files changed, 27 insertions(+), 57 deletions(-) diff --git a/ase/stx/bootstrp.c b/ase/stx/bootstrp.c index 84d34ba1..814d8313 100644 --- a/ase/stx/bootstrp.c +++ b/ase/stx/bootstrp.c @@ -1,5 +1,5 @@ /* - * $Id: bootstrp.c,v 1.27 2005-07-19 12:08:04 bacon Exp $ + * $Id: bootstrp.c,v 1.28 2005-07-19 15:52:19 bacon Exp $ */ #include @@ -401,10 +401,8 @@ static void __create_bootstrapping_objects (xp_stx_t* stx) /* TODO: symbol table and dictionary size */ stx->symbol_table = xp_stx_alloc_word_object ( stx, XP_NULL, 0, XP_NULL, 1000); -xp_printf (XP_TEXT("xxxxxxxxxxxxxxxxxx\n")); stx->smalltalk = xp_stx_alloc_word_object ( - stx, XP_NULL, 1, XP_NULL, 1024); -xp_printf (XP_TEXT("yyyyyyyyyyyyyyyyyyy\n")); + stx, XP_NULL, 1, XP_NULL, 512); /* set tally */ XP_STX_WORD_AT(stx,stx->smalltalk,0) = XP_STX_TO_SMALLINT(0); @@ -713,11 +711,6 @@ static xp_word_t __make_classvar_dict ( *p != XP_CHAR('\0')) p++; symbol = xp_stx_new_symbolx (stx, name, p - name); - -/* - xp_stx_hash_insert (stx, dict, - xp_stx_hash_object(stx, symbol), symbol, stx->nil); -*/ xp_stx_dict_put (stx, dict, symbol, stx->nil); } while (1); diff --git a/ase/stx/class.c b/ase/stx/class.c index e7d9ffb5..0e4410a1 100644 --- a/ase/stx/class.c +++ b/ase/stx/class.c @@ -1,5 +1,5 @@ /* - * $Id: class.c,v 1.22 2005-07-19 12:08:04 bacon Exp $ + * $Id: class.c,v 1.23 2005-07-19 15:52:19 bacon Exp $ */ #include @@ -28,13 +28,7 @@ xp_word_t xp_stx_new_class (xp_stx_t* stx, const xp_char_t* name) class_name = xp_stx_new_symbol (stx, name); XP_STX_WORD_AT(stx,class,XP_STX_CLASS_NAME) = class_name; -/* - xp_stx_hash_insert (stx, stx->smalltalk, - xp_stx_hash_object(stx, class_name), - class_name, class); -*/ xp_stx_dict_put (stx, stx->smalltalk, class_name, class); - return class; } @@ -43,7 +37,9 @@ xp_word_t xp_stx_lookup_class (xp_stx_t* stx, const xp_char_t* name) xp_word_t assoc, meta, value; assoc = xp_stx_dict_lookup (stx, stx->smalltalk, name); - if (assoc == stx->nil) return stx->nil; + if (assoc == stx->nil) { + return stx->nil; + } value = XP_STX_WORD_AT(stx,assoc,XP_STX_ASSOCIATION_VALUE); meta = XP_STX_CLASS(stx,value); diff --git a/ase/stx/dict.c b/ase/stx/dict.c index 032734a6..9aa4ca18 100644 --- a/ase/stx/dict.c +++ b/ase/stx/dict.c @@ -1,5 +1,5 @@ /* - * $Id: dict.c,v 1.3 2005-07-19 15:00:09 bacon Exp $ + * $Id: dict.c,v 1.4 2005-07-19 15:52:19 bacon Exp $ */ #include @@ -30,14 +30,14 @@ static xp_word_t __dict_find_slot ( xp_word_t size, hash, index, assoc, symbol; xp_stx_word_object_t* dict_obj; - xp_assert (XP_STX_IS_WORD_OBJECT(stx, dict)); + xp_assert (!XP_STX_IS_SMALLINT(dict) && + XP_STX_IS_WORD_OBJECT(stx, dict)); xp_assert (dict == stx->smalltalk || - XP_STX_CLASS(stx,dict) == stx->class_system_dictionary); - xp_assert (XP_STX_CLASS(stx,key) == stx->class_symbol); + xp_stx_classof(stx,dict) == stx->class_system_dictionary); + xp_assert (xp_stx_classof(stx,key) == stx->class_symbol); size = XP_STX_SIZE(stx,dict); hash = xp_stx_hash_object(stx, key); -xp_printf (XP_TEXT("find_slot %s %u\n"), XP_STX_DATA(stx,key), hash); /* consider tally, the only instance variable of a system dictionary */ index = hash % (size - 1) + 1; @@ -49,13 +49,15 @@ xp_printf (XP_TEXT("find_slot %s %u\n"), XP_STX_DATA(stx,key), hash); if (assoc == stx->nil) break; symbol = XP_STX_WORD_AT(stx,assoc,XP_STX_ASSOCIATION_KEY); - xp_assert (XP_STX_CLASS(stx,symbol) == stx->class_symbol); + xp_assert (xp_stx_classof(stx,symbol) == stx->class_symbol); /* * shallow comparison is enough for identity check * because only a symbol can be a key of a system dictionary */ - if (xp_stx_shallow_compare_object(stx, key, symbol) == 0) break; + if (xp_strxncmp( + XP_STX_DATA(stx,key), XP_STX_SIZE(stx,key), + XP_STX_DATA(stx,symbol), XP_STX_SIZE(stx,symbol)) == 0) break; /* consider tally here too */ index = index % (size - 1) + 1; @@ -74,7 +76,7 @@ static void __dict_grow (xp_stx_t* stx, xp_word_t dict) * during the bootstrapping. */ xp_assert (stx->class_system_dictionary != stx->nil); - xp_assert (XP_STX_CLASS(stx,dict) == stx->class_system_dictionary); + xp_assert (xp_stx_classof(stx,dict) == stx->class_system_dictionary); size = XP_STX_SIZE(stx,dict); new = xp_stx_instantiate (stx, @@ -90,7 +92,6 @@ static void __dict_grow (xp_stx_t* stx, xp_word_t dict) XP_STX_WORD_AT(stx,assoc,XP_STX_ASSOCIATION_VALUE)); } -xp_printf (XP_TEXT("dictionary grown. swapped the index\n")); XP_SWAP ((xp_uint_t)XP_STX_OBJECT(stx,dict), (xp_uint_t)XP_STX_OBJECT(stx,new)); } @@ -101,14 +102,13 @@ xp_word_t xp_stx_dict_lookup ( xp_word_t size, hash, index, assoc, symbol; xp_stx_word_object_t* dict_obj; - xp_assert (XP_STX_IS_WORD_OBJECT(stx, dict)); + xp_assert (!XP_STX_IS_SMALLINT(dict) && + XP_STX_IS_WORD_OBJECT(stx, dict)); xp_assert (dict == stx->smalltalk || - XP_STX_CLASS(stx,dict) == stx->class_system_dictionary); + xp_stx_classof(stx,dict) == stx->class_system_dictionary); size = XP_STX_SIZE(stx,dict); - /*hash = xp_stx_hash_object(stx, key);*/ hash = xp_stx_hash(key, xp_strlen(key) * xp_sizeof(xp_char_t)); -xp_printf (XP_TEXT("lookup hash %s %u\n"), key, hash); /* consider tally, the only instance variable of a system dictionary */ index = hash % (size - 1) + 1; @@ -116,24 +116,19 @@ xp_printf (XP_TEXT("lookup hash %s %u\n"), key, hash); dict_obj = XP_STX_WORD_OBJECT(stx,dict); while (1) { -xp_printf (XP_TEXT("dict_lookup: %d\n"), index); assoc = dict_obj->data[index]; if (assoc == stx->nil) break; symbol = XP_STX_WORD_AT(stx,assoc,XP_STX_ASSOCIATION_KEY); - xp_assert (XP_STX_CLASS(stx,symbol) == stx->class_symbol); - /* - * note that xp_strcmp should be compatible with - * character object comparison in xp_stx_shallow_compare_object. - * otherwise, you will be in trouble. - */ - if (xp_strcmp(key, XP_STX_DATA(stx,symbol)) == 0) break; + xp_assert (xp_stx_classof(stx,symbol) == stx->class_symbol); + + if (xp_strxcmp (XP_STX_DATA(stx,symbol), + XP_STX_SIZE(stx,symbol), key) == 0) break; /* consider tally here too */ index = index % (size - 1) + 1; } -xp_printf (XP_TEXT("dict_lookup: %s, %d, %d\n"), key, index, XP_STX_WORD_AT(stx,dict,index)); return XP_STX_WORD_AT(stx,dict,index); } @@ -168,7 +163,6 @@ xp_word_t xp_stx_dict_put ( } else XP_STX_WORD_AT(stx,assoc,XP_STX_ASSOCIATION_VALUE) = value; -xp_printf (XP_TEXT("dict_put %s %d\n"), XP_STX_DATA(stx,key),slot); return XP_STX_WORD_AT(stx,dict,slot); } diff --git a/ase/stx/object.c b/ase/stx/object.c index 15695290..c5420a7d 100644 --- a/ase/stx/object.c +++ b/ase/stx/object.c @@ -1,5 +1,5 @@ /* - * $Id: object.c,v 1.38 2005-07-19 12:08:04 bacon Exp $ + * $Id: object.c,v 1.39 2005-07-19 15:52:19 bacon Exp $ */ #include @@ -24,7 +24,6 @@ xp_word_t xp_stx_alloc_word_object ( * number of variable instance variables) * word_size */ n = nfields + variable_nfields; -xp_printf (XP_TEXT(">> %d\n"), n); idx = xp_stx_memory_alloc (&stx->memory, n * xp_sizeof(xp_word_t) + xp_sizeof(xp_stx_object_t)); if (idx >= stx->memory.capacity) return idx; /* failed TODO: return a difference value OINDEX_INVALID */ @@ -184,16 +183,6 @@ xp_word_t xp_stx_hash_object (xp_stx_t* stx, xp_word_t object) return hv; } -xp_bool_t xp_stx_shallow_compare_object ( - xp_stx_t* stx, xp_word_t a, xp_word_t b) -{ - if (XP_STX_TYPE(stx,a) != XP_STX_TYPE(stx,b)) return xp_false; - if (XP_STX_SIZE(stx,a) != XP_STX_SIZE(stx,b)) return xp_false; - if (XP_STX_CLASS(stx,a) != XP_STX_CLASS(stx,b)) return xp_false; - return xp_memcmp (XP_STX_DATA(stx,a), - XP_STX_DATA(stx,b), XP_STX_SIZE(stx,a)) == 0; -} - xp_word_t xp_stx_instantiate ( xp_stx_t* stx, xp_word_t class, const void* data, const void* variable_data, xp_word_t variable_nfields) diff --git a/ase/stx/object.h b/ase/stx/object.h index 8dda2049..e0df1b7c 100644 --- a/ase/stx/object.h +++ b/ase/stx/object.h @@ -1,5 +1,5 @@ /* - * $Id: object.h,v 1.27 2005-07-19 12:08:04 bacon Exp $ + * $Id: object.h,v 1.28 2005-07-19 15:52:19 bacon Exp $ */ #ifndef _XP_STX_OBJECT_H_ @@ -25,8 +25,6 @@ xp_word_t xp_stx_alloc_char_objectx ( xp_word_t xp_stx_allocn_char_object (xp_stx_t* stx, ...); xp_word_t xp_stx_hash_object (xp_stx_t* stx, xp_word_t object); -xp_bool_t xp_stx_shallow_compare_object ( - xp_stx_t* stx, xp_word_t a, xp_word_t b); xp_word_t xp_stx_instantiate ( xp_stx_t* stx, xp_word_t class_index, const void* data, diff --git a/ase/stx/symbol.c b/ase/stx/symbol.c index c68dc950..5d112d1b 100644 --- a/ase/stx/symbol.c +++ b/ase/stx/symbol.c @@ -1,5 +1,5 @@ /* - * $Id: symbol.c,v 1.17 2005-07-19 12:08:04 bacon Exp $ + * $Id: symbol.c,v 1.18 2005-07-19 15:52:19 bacon Exp $ */ #include @@ -41,7 +41,7 @@ xp_word_t xp_stx_new_symbolx ( else { do { x = XP_STX_WORD_AT(stx,link,XP_STX_SYMLINK_SYMBOL); - xp_assert (XP_STX_CLASS(stx,x) == stx->class_symbol); + xp_assert (xp_stx_classof(stx,x) == stx->class_symbol); if (xp_strxcmp ( XP_STX_DATA(stx,x),