cleaned up code a bit
This commit is contained in:
@ -235,7 +235,7 @@ struct stix_cmgr_t
|
||||
* MACROS THAT CHANGES THE BEHAVIORS OF THE C COMPILER/LINKER
|
||||
* =========================================================================*/
|
||||
|
||||
#if defined(_WIN32) || defined(__WATCOMC__)
|
||||
#if defined(_WIN32) || (defined(__WATCOMC__) && !defined(__WINDOWS_386__))
|
||||
# define STIX_IMPORT __declspec(dllimport)
|
||||
# define STIX_EXPORT __declspec(dllexport)
|
||||
# define STIX_PRIVATE
|
||||
@ -301,7 +301,10 @@ enum stix_trait_t
|
||||
{
|
||||
/* perform no garbage collection when the heap is full.
|
||||
* you still can use stix_gc() explicitly. */
|
||||
STIX_NOGC = (1 << 0)
|
||||
STIX_NOGC = (1 << 0),
|
||||
|
||||
/* no tail call optimization */
|
||||
STIX_NOTCO = (1 << 1),
|
||||
};
|
||||
typedef enum stix_trait_t stix_trait_t;
|
||||
|
||||
@ -604,39 +607,50 @@ struct stix_context_t
|
||||
{
|
||||
STIX_OBJ_HEADER;
|
||||
|
||||
stix_oop_t sender; /* message sending context - active context before new context activation*/
|
||||
stix_oop_t ip; /* instruction pointer */
|
||||
/* it points to the active context at the moment when
|
||||
* this context object has been activated. a new method context
|
||||
* is activated as a result of normal message sending and a block
|
||||
* context is activated when it is sent 'value'. it's set to
|
||||
* nil if a block context created haven't received 'value'. */
|
||||
stix_oop_t sender;
|
||||
|
||||
/* SmallInteger, instruction pointer */
|
||||
stix_oop_t ip;
|
||||
|
||||
/* SmallInteger, stack pointer */
|
||||
stix_oop_t sp; /* stack pointer */
|
||||
|
||||
/* SmallInteger. Number of temporaries.
|
||||
* For a block context, it's inclusive of the temporaries
|
||||
* defined its 'home'. */
|
||||
stix_oop_t ntmprs; /* SmallInteger. */
|
||||
stix_oop_method_t method; /* CompiledMethod */
|
||||
stix_oop_t receiver; /* receiver of the message. For a statement '#xxx do: #yyyy', #xxx is the receiver.*/
|
||||
stix_oop_t home; /* nil */
|
||||
stix_oop_context_t origin; /* nil */
|
||||
|
||||
/* CompiledMethod for a method context,
|
||||
* SmallInteger for a block context */
|
||||
stix_oop_t method_or_nargs;
|
||||
|
||||
/* it points to the receiver of the message for a method context.
|
||||
* a block context created but not activated has nil in this field.
|
||||
* if a block context is activated by 'value', it points to the
|
||||
* block context object used as a base for shallow-copy. */
|
||||
stix_oop_t receiver_or_source;
|
||||
|
||||
/* it is set to nil for a method context.
|
||||
* for a block context, it points to the active context at the
|
||||
* moment the block context was created. */
|
||||
stix_oop_t home;
|
||||
|
||||
/* when a method context is craeted, it is set to itself.
|
||||
* no change is made when the method context is activated.
|
||||
* when a block context is created, it is set to nil.
|
||||
* when the block context is shallow-copied for activation,
|
||||
* it is set to the origin of the active context at that moment */
|
||||
stix_oop_context_t origin;
|
||||
|
||||
/* variable indexed part */
|
||||
stix_oop_t slot[1]; /* stack */
|
||||
};
|
||||
|
||||
#define STIX_BLOCK_CONTEXT_NAMED_INSTVARS 8
|
||||
typedef struct stix_block_context_t stix_block_context_t;
|
||||
typedef struct stix_block_context_t* stix_oop_block_context_t;
|
||||
struct stix_block_context_t
|
||||
{
|
||||
STIX_OBJ_HEADER;
|
||||
|
||||
stix_oop_t caller;
|
||||
stix_oop_t ip; /* SmallInteger. instruction pointer */
|
||||
stix_oop_t sp; /* SmallInteger. stack pointer */
|
||||
stix_oop_t ntmprs; /* SmallInteger. total number of temporaries */
|
||||
stix_oop_t nargs; /* SmallInteger */
|
||||
stix_oop_t unused/*iip*/; /* SmallInteger. initial instruction pointer */
|
||||
stix_oop_t home; /* MethodContext or BlockContext */
|
||||
stix_oop_context_t origin; /* MethodContext */
|
||||
|
||||
/* variable indexed part */
|
||||
stix_oop_t slot[1]; /* stack */
|
||||
};
|
||||
|
||||
/**
|
||||
* The STIX_CLASSOF() macro return the class of an object including a numeric
|
||||
* object encoded into a pointer.
|
||||
@ -724,7 +738,7 @@ struct stix_t
|
||||
stix_oop_t _method_dictionary; /* MethodDictionary */
|
||||
stix_oop_t _method; /* CompiledMethod */
|
||||
stix_oop_t _association; /* Association */
|
||||
stix_oop_t _context; /* MethodContext */
|
||||
stix_oop_t _method_context; /* MethodContext */
|
||||
stix_oop_t _block_context; /* BlockContext */
|
||||
|
||||
stix_oop_t _true_class; /* True */
|
||||
@ -740,7 +754,9 @@ struct stix_t
|
||||
stix_oow_t tmp_count;
|
||||
|
||||
/* == EXECUTION REGISTERS == */
|
||||
stix_oop_context_t active_context; /* TODO: this could be either MethodContext or BlockContext. Some redefintion of stix_oop_context_t might be needed after having removed stix-oop_block-context. */
|
||||
stix_oop_context_t active_context;
|
||||
stix_oop_method_t active_method;
|
||||
stix_oop_byte_t active_code;
|
||||
stix_ooi_t sp;
|
||||
stix_ooi_t ip;
|
||||
/* == END EXECUTION REGISTERS == */
|
||||
|
Reference in New Issue
Block a user