added code to handle block context
This commit is contained in:
		@ -596,25 +596,28 @@ struct stix_method_t
 | 
			
		||||
#define STIX_METHOD_PREAMBLE_RETURN_INSTVAR  2
 | 
			
		||||
#define STIX_METHOD_PREAMBLE_PRIMITIVE       3
 | 
			
		||||
 | 
			
		||||
#define STIX_CONTEXT_NAMED_INSTVARS 6
 | 
			
		||||
#define STIX_CONTEXT_NAMED_INSTVARS 8
 | 
			
		||||
typedef struct stix_context_t stix_context_t;
 | 
			
		||||
typedef struct stix_context_t* stix_oop_context_t;
 | 
			
		||||
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 */
 | 
			
		||||
	stix_oop_t        sp;     /* stack pointer */
 | 
			
		||||
	stix_oop_method_t method; /* CompiledMethod */
 | 
			
		||||
	stix_oop_t        unused; 
 | 
			
		||||
	stix_oop_t        receiver; /* receiver of the message. For a statement '#xxx do: #yyyy', #xxx is the receiver.*/
 | 
			
		||||
	stix_oop_t         sender; /* message sending context - active context before new context activation*/
 | 
			
		||||
	stix_oop_t         ip;     /* instruction pointer */
 | 
			
		||||
	stix_oop_t         sp;     /* stack pointer */
 | 
			
		||||
 | 
			
		||||
	stix_oop_method_t  method; /* CompiledMethod */
 | 
			
		||||
	stix_oop_t         unused; 
 | 
			
		||||
	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_t         origin; /* nil */
 | 
			
		||||
 | 
			
		||||
	/* variable indexed part */
 | 
			
		||||
	stix_oop_t        slot[1]; /* stack contents */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define STIX_BLOCK_CONTEXT_NAMED_INSTVARS 6
 | 
			
		||||
#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
 | 
			
		||||
@ -622,11 +625,13 @@ 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         nargs;   /* SmallInteger */
 | 
			
		||||
	stix_oop_t         iip;     /* SmallInteger. initial instruction pointer */
 | 
			
		||||
	stix_oop_context_t home; 
 | 
			
		||||
	stix_oop_t         ip;           /* SmallInteger. instruction pointer */
 | 
			
		||||
	stix_oop_t         sp;           /* SmallInteger. stack pointer */
 | 
			
		||||
	stix_oop_t         nargs;        /* SmallInteger */
 | 
			
		||||
	stix_oop_t         ntmprs;       /* SmallInteger. total number of temporaries */
 | 
			
		||||
	stix_oop_t         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 */
 | 
			
		||||
@ -734,6 +739,9 @@ struct stix_t
 | 
			
		||||
 | 
			
		||||
	/* == 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_ooi_t sp;
 | 
			
		||||
	stix_ooi_t ip;
 | 
			
		||||
 | 
			
		||||
	stix_ooi_t* active_context_sp;
 | 
			
		||||
	/* stix_oop_context_t home_context; */
 | 
			
		||||
	/* == END EXECUTION REGISTERS == */
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user