*** empty log message ***

This commit is contained in:
hyung-hwan 2005-07-19 15:52:19 +00:00
parent 01a16f87ac
commit 75a738b429
6 changed files with 27 additions and 57 deletions

View File

@ -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 <xp/stx/bootstrp.h>
@ -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);

View File

@ -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 <xp/stx/class.h>
@ -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);

View File

@ -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 <xp/stx/dict.h>
@ -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);
}

View File

@ -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 <xp/stx/object.h>
@ -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)

View File

@ -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,

View File

@ -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 <xp/stx/symbol.h>
@ -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),