/* * $Id: class.h,v 1.15 2005-10-02 15:45:09 bacon Exp $ */ #ifndef _XP_STX_CLASS_H_ #define _XP_STX_CLASS_H_ #include /* definitions for common objects */ #define XP_STX_CLASS_SIZE 8 #define XP_STX_CLASS_SPEC 0 #define XP_STX_CLASS_METHODS 1 #define XP_STX_CLASS_SUPERCLASS 2 #define XP_STX_CLASS_SUBCLASSES 3 #define XP_STX_CLASS_NAME 4 #define XP_STX_CLASS_VARIABLES 5 #define XP_STX_CLASS_CLASS_VARIABLES 6 #define XP_STX_CLASS_POOL_DICTIONARIES 7 #define XP_STX_METACLASS_SIZE 5 #define XP_STX_METACLASS_SPEC 0 #define XP_STX_METACLASS_METHODS 1 #define XP_STX_METACLASS_SUPERCLASS 2 #define XP_STX_METACLASS_SUBCLASSES 3 #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_WORD_INDEXABLE 1 #define XP_STX_SPEC_BYTE_INDEXABLE 2 #define XP_STX_SPEC_CHAR_INDEXABLE 3 struct xp_stx_class_t { xp_stx_objhdr_t header; xp_word_t spec; /* indexable: 2, nfields: the rest */ xp_word_t methods; xp_word_t superclass; xp_word_t subclasses; xp_word_t name; xp_word_t variables; xp_word_t class_variables; xp_word_t pool_dictonaries; }; struct xp_stx_metaclass_t { xp_stx_objhdr_t header; xp_word_t spec; xp_word_t methods; xp_word_t superclass; xp_word_t subclasses; xp_word_t instance_class; }; typedef struct xp_stx_class_t xp_stx_class_t; typedef struct xp_stx_metaclass_t xp_stx_metaclass_t; #ifdef __cplusplus extern "C" { #endif xp_word_t xp_stx_new_class (xp_stx_t* stx, const xp_char_t* name); xp_word_t xp_stx_lookup_class (xp_stx_t* stx, const xp_char_t* name); int xp_stx_get_instance_variable_index ( xp_stx_t* stx, xp_word_t class_index, const xp_char_t* name, xp_word_t* index); xp_word_t xp_stx_lookup_class_variable ( xp_stx_t* stx, xp_word_t class_index, const xp_char_t* name); xp_word_t xp_stx_lookup_method (xp_stx_t* stx, xp_word_t class_index, const xp_char_t* name, xp_bool_t from_super); #ifdef __cplusplus } #endif #endif