*** empty log message ***
This commit is contained in:
parent
1a2a97f85d
commit
bd9d441a4c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: bootstrp.c,v 1.18 2005-07-04 16:37:03 bacon Exp $
|
* $Id: bootstrp.c,v 1.19 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/stx/bootstrp.h>
|
#include <xp/stx/bootstrp.h>
|
||||||
@ -277,7 +277,9 @@ int xp_stx_bootstrap (xp_stx_t* stx)
|
|||||||
stx->class_object = xp_stx_new_class (stx, XP_TEXT("Object"));
|
stx->class_object = xp_stx_new_class (stx, XP_TEXT("Object"));
|
||||||
stx->class_class = xp_stx_new_class (stx, XP_TEXT("Class"));
|
stx->class_class = xp_stx_new_class (stx, XP_TEXT("Class"));
|
||||||
stx->class_array = xp_stx_new_class (stx, XP_TEXT("Array"));
|
stx->class_array = xp_stx_new_class (stx, XP_TEXT("Array"));
|
||||||
|
stx->class_bytearray = xp_stx_new_class (stx, XP_TEXT("ByteArray"));
|
||||||
stx->class_string = xp_stx_new_class (stx, XP_TEXT("String"));
|
stx->class_string = xp_stx_new_class (stx, XP_TEXT("String"));
|
||||||
|
stx->class_dictionary = xp_stx_new_class (stx, XP_TEXT("Dictionary"));
|
||||||
|
|
||||||
__create_builtin_classes (stx);
|
__create_builtin_classes (stx);
|
||||||
|
|
||||||
@ -394,16 +396,16 @@ static void __create_bootstrapping_objects (xp_stx_t* stx)
|
|||||||
|
|
||||||
/* (Symlink class) setSpec: XP_STX_CLASS_SIZE */
|
/* (Symlink class) setSpec: XP_STX_CLASS_SIZE */
|
||||||
XP_STX_WORDAT(stx,class_SymlinkMeta,XP_STX_CLASS_SPEC) =
|
XP_STX_WORDAT(stx,class_SymlinkMeta,XP_STX_CLASS_SPEC) =
|
||||||
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << 2) | XP_STX_SPEC_NOT_INDEXABLE);
|
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << XP_STX_SPEC_INDEXABLE_BITS) | XP_STX_SPEC_NOT_INDEXABLE);
|
||||||
/* (Symbol class) setSpec: CLASS_SIZE */
|
/* (Symbol class) setSpec: CLASS_SIZE */
|
||||||
XP_STX_WORDAT(stx,class_SymbolMeta,XP_STX_CLASS_SPEC) =
|
XP_STX_WORDAT(stx,class_SymbolMeta,XP_STX_CLASS_SPEC) =
|
||||||
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << 2) | XP_STX_SPEC_NOT_INDEXABLE);
|
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << XP_STX_SPEC_INDEXABLE_BITS) | XP_STX_SPEC_NOT_INDEXABLE);
|
||||||
/* (Metaclass class) setSpec: CLASS_SIZE */
|
/* (Metaclass class) setSpec: CLASS_SIZE */
|
||||||
XP_STX_WORDAT(stx,class_MetaclassMeta,XP_STX_CLASS_SPEC) =
|
XP_STX_WORDAT(stx,class_MetaclassMeta,XP_STX_CLASS_SPEC) =
|
||||||
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << 2) | XP_STX_SPEC_NOT_INDEXABLE);
|
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << XP_STX_SPEC_INDEXABLE_BITS) | XP_STX_SPEC_NOT_INDEXABLE);
|
||||||
/* (Pairlink class) setSpec: CLASS_SIZE */
|
/* (Pairlink class) setSpec: CLASS_SIZE */
|
||||||
XP_STX_WORDAT(stx,class_PairlinkMeta,XP_STX_CLASS_SPEC) =
|
XP_STX_WORDAT(stx,class_PairlinkMeta,XP_STX_CLASS_SPEC) =
|
||||||
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << 2) | XP_STX_SPEC_NOT_INDEXABLE);
|
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << XP_STX_SPEC_INDEXABLE_BITS) | XP_STX_SPEC_NOT_INDEXABLE);
|
||||||
|
|
||||||
/* specs for class_metaclass, class_pairlink,
|
/* specs for class_metaclass, class_pairlink,
|
||||||
* class_symbol, class_symlink are set later in
|
* class_symbol, class_symlink are set later in
|
||||||
@ -480,7 +482,9 @@ static void __create_builtin_classes (xp_stx_t* stx)
|
|||||||
while (superclass != stx->nil) {
|
while (superclass != stx->nil) {
|
||||||
superclass_obj = (xp_stx_class_t*)
|
superclass_obj = (xp_stx_class_t*)
|
||||||
XP_STX_WORD_OBJECT(stx,superclass);
|
XP_STX_WORD_OBJECT(stx,superclass);
|
||||||
nfields += XP_STX_FROM_SMALLINT(superclass_obj->spec) >> 2;
|
nfields +=
|
||||||
|
XP_STX_FROM_SMALLINT(superclass_obj->spec) >>
|
||||||
|
XP_STX_SPEC_INDEXABLE_BITS;
|
||||||
superclass = superclass_obj->superclass;
|
superclass = superclass_obj->superclass;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,8 +500,8 @@ static void __create_builtin_classes (xp_stx_t* stx)
|
|||||||
(p->indexable == XP_STX_SPEC_NOT_INDEXABLE ||
|
(p->indexable == XP_STX_SPEC_NOT_INDEXABLE ||
|
||||||
p->indexable == XP_STX_SPEC_WORD_INDEXABLE)));
|
p->indexable == XP_STX_SPEC_WORD_INDEXABLE)));
|
||||||
|
|
||||||
class_obj->spec =
|
class_obj->spec = XP_STX_TO_SMALLINT(
|
||||||
XP_STX_TO_SMALLINT((nfields << 2) | p->indexable);
|
(nfields << XP_STX_SPEC_INDEXABLE_BITS) | p->indexable);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (p = class_info; p->name != XP_NULL; p++) {
|
for (p = class_info; p->name != XP_NULL; p++) {
|
||||||
@ -641,15 +645,12 @@ static void __set_metaclass_subclasses (
|
|||||||
static xp_word_t __make_classvar_dict (
|
static xp_word_t __make_classvar_dict (
|
||||||
xp_stx_t* stx, xp_word_t class, const xp_char_t* names)
|
xp_stx_t* stx, xp_word_t class, const xp_char_t* names)
|
||||||
{
|
{
|
||||||
xp_size_t n;
|
|
||||||
xp_word_t dict, symbol;
|
xp_word_t dict, symbol;
|
||||||
const xp_char_t* p = names;
|
const xp_char_t* p = names;
|
||||||
const xp_char_t* name;
|
const xp_char_t* name;
|
||||||
|
|
||||||
n = __count_names (names);
|
dict = xp_stx_instantiate (
|
||||||
dict = xp_stx_alloc_word_object (stx, n);
|
stx, stx->class_dictionary, __count_names(names));
|
||||||
XP_STX_CLASS(stx,dict) = /* TODO */
|
|
||||||
xp_stx_lookup_class (stx, XP_TEXT("Dictionary"));
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
while (*p == XP_CHAR(' ') ||
|
while (*p == XP_CHAR(' ') ||
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: class.c,v 1.16 2005-07-04 16:37:03 bacon Exp $
|
* $Id: class.c,v 1.17 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/stx/class.h>
|
#include <xp/stx/class.h>
|
||||||
@ -18,7 +18,7 @@ xp_word_t xp_stx_new_class (xp_stx_t* stx, const xp_char_t* name)
|
|||||||
/* the spec of the metaclass must be the spec of its
|
/* the spec of the metaclass must be the spec of its
|
||||||
* instance. so the XP_STX_CLASS_SIZE is set */
|
* instance. so the XP_STX_CLASS_SIZE is set */
|
||||||
XP_STX_WORDAT(stx,meta,XP_STX_METACLASS_SPEC) =
|
XP_STX_WORDAT(stx,meta,XP_STX_METACLASS_SPEC) =
|
||||||
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << 2) | XP_STX_SPEC_NOT_INDEXABLE);
|
XP_STX_TO_SMALLINT((XP_STX_CLASS_SIZE << XP_STX_SPEC_INDEXABLE_BITS) | XP_STX_SPEC_NOT_INDEXABLE);
|
||||||
|
|
||||||
/* the spec of the class is set later in __create_builtin_classes */
|
/* the spec of the class is set later in __create_builtin_classes */
|
||||||
class = xp_stx_alloc_word_object (stx, XP_STX_CLASS_SIZE);
|
class = xp_stx_alloc_word_object (stx, XP_STX_CLASS_SIZE);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: class.h,v 1.10 2005-07-04 16:37:03 bacon Exp $
|
* $Id: class.h,v 1.11 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_STX_CLASS_H_
|
#ifndef _XP_STX_CLASS_H_
|
||||||
@ -25,6 +25,8 @@
|
|||||||
#define XP_STX_METACLASS_SUBCLASSES 3
|
#define XP_STX_METACLASS_SUBCLASSES 3
|
||||||
#define XP_STX_METACLASS_INSTANCE_CLASS 4
|
#define XP_STX_METACLASS_INSTANCE_CLASS 4
|
||||||
|
|
||||||
|
#define XP_STX_SPEC_INDEXABLE_BITS 2
|
||||||
|
#define XP_STX_SPEC_INDEXABLE_MASK 3
|
||||||
#define XP_STX_SPEC_NOT_INDEXABLE 0
|
#define XP_STX_SPEC_NOT_INDEXABLE 0
|
||||||
#define XP_STX_SPEC_WORD_INDEXABLE 1
|
#define XP_STX_SPEC_WORD_INDEXABLE 1
|
||||||
#define XP_STX_SPEC_BYTE_INDEXABLE 2
|
#define XP_STX_SPEC_BYTE_INDEXABLE 2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: object.c,v 1.29 2005-07-04 16:37:03 bacon Exp $
|
* $Id: object.c,v 1.30 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/stx/object.h>
|
#include <xp/stx/object.h>
|
||||||
@ -159,7 +159,6 @@ xp_word_t xp_stx_hash_char_object (xp_stx_t* stx, xp_word_t idx)
|
|||||||
XP_STX_DATA(stx,idx), XP_STX_SIZE(stx,idx));
|
XP_STX_DATA(stx,idx), XP_STX_SIZE(stx,idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xp_word_t xp_stx_instantiate (
|
xp_word_t xp_stx_instantiate (
|
||||||
xp_stx_t* stx, xp_word_t class_index, xp_word_t size)
|
xp_stx_t* stx, xp_word_t class_index, xp_word_t size)
|
||||||
{
|
{
|
||||||
@ -176,8 +175,8 @@ xp_word_t xp_stx_instantiate (
|
|||||||
xp_assert (class_obj->header.class != stx->class_metaclass);
|
xp_assert (class_obj->header.class != stx->class_metaclass);
|
||||||
|
|
||||||
spec = XP_STX_FROM_SMALLINT(class_obj->spec);
|
spec = XP_STX_FROM_SMALLINT(class_obj->spec);
|
||||||
nfields = (spec >> 2);
|
nfields = (spec >> XP_STX_SPEC_INDEXABLE_BITS);
|
||||||
indexable = spec & 0x3;
|
indexable = spec & XP_STX_SPEC_INDEXABLE_MASK;
|
||||||
|
|
||||||
if (indexable == XP_STX_SPEC_BYTE_INDEXABLE) {
|
if (indexable == XP_STX_SPEC_BYTE_INDEXABLE) {
|
||||||
xp_assert (nfields == 0);
|
xp_assert (nfields == 0);
|
||||||
@ -193,7 +192,7 @@ xp_word_t xp_stx_instantiate (
|
|||||||
new = xp_stx_alloc_word_object (stx, nfields + size);
|
new = xp_stx_alloc_word_object (stx, nfields + size);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
xp_assert (indexable == XP_STX_SPEC_WORD_INDEXABLE);
|
xp_assert (indexable == XP_STX_SPEC_NOT_INDEXABLE);
|
||||||
xp_assert (size == 0);
|
xp_assert (size == 0);
|
||||||
new = xp_stx_alloc_word_object (stx, nfields + size);
|
new = xp_stx_alloc_word_object (stx, nfields + size);
|
||||||
}
|
}
|
||||||
@ -201,4 +200,3 @@ xp_word_t xp_stx_instantiate (
|
|||||||
XP_STX_CLASS(stx, new) = class_index;
|
XP_STX_CLASS(stx, new) = class_index;
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: object.h,v 1.19 2005-07-04 11:32:41 bacon Exp $
|
* $Id: object.h,v 1.20 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_STX_OBJECT_H_
|
#ifndef _XP_STX_OBJECT_H_
|
||||||
@ -27,8 +27,9 @@ 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_allocn_char_object (xp_stx_t* stx, ...);
|
||||||
|
|
||||||
xp_word_t xp_stx_hash_char_object (xp_stx_t* stx, xp_word_t idx);
|
xp_word_t xp_stx_hash_char_object (xp_stx_t* stx, xp_word_t idx);
|
||||||
int xp_stx_lookup_global (
|
|
||||||
xp_stx_t* stx, xp_word_t key, xp_word_t* value);
|
xp_word_t xp_stx_instantiate (
|
||||||
|
xp_stx_t* stx, xp_word_t class_index, xp_word_t size);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stx.c,v 1.30 2005-06-08 16:00:51 bacon Exp $
|
* $Id: stx.c,v 1.31 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/stx/stx.h>
|
#include <xp/stx/stx.h>
|
||||||
@ -34,7 +34,10 @@ xp_stx_t* xp_stx_open (xp_stx_t* stx, xp_word_t capacity)
|
|||||||
|
|
||||||
stx->class_object = XP_STX_NIL;
|
stx->class_object = XP_STX_NIL;
|
||||||
stx->class_class = XP_STX_NIL;
|
stx->class_class = XP_STX_NIL;
|
||||||
|
stx->class_bytearray = XP_STX_NIL;
|
||||||
stx->class_array = XP_STX_NIL;
|
stx->class_array = XP_STX_NIL;
|
||||||
|
stx->class_string = XP_STX_NIL;
|
||||||
|
stx->class_dictionary = XP_STX_NIL;
|
||||||
|
|
||||||
stx->__wantabort = xp_false;
|
stx->__wantabort = xp_false;
|
||||||
return stx;
|
return stx;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stx.h,v 1.30 2005-07-04 16:37:03 bacon Exp $
|
* $Id: stx.h,v 1.31 2005-07-05 04:29:31 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_STX_STX_H_
|
#ifndef _XP_STX_STX_H_
|
||||||
@ -76,7 +76,9 @@ struct xp_stx_t
|
|||||||
xp_word_t class_object;
|
xp_word_t class_object;
|
||||||
xp_word_t class_class;
|
xp_word_t class_class;
|
||||||
xp_word_t class_array;
|
xp_word_t class_array;
|
||||||
|
xp_word_t class_bytearray;
|
||||||
xp_word_t class_string;
|
xp_word_t class_string;
|
||||||
|
xp_word_t class_dictionary;
|
||||||
|
|
||||||
xp_bool_t __malloced;
|
xp_bool_t __malloced;
|
||||||
xp_bool_t __wantabort; /* TODO: make it a function pointer */
|
xp_bool_t __wantabort; /* TODO: make it a function pointer */
|
||||||
|
Loading…
Reference in New Issue
Block a user