*** empty log message ***
This commit is contained in:
parent
70a5ead5cc
commit
1ce7078d50
@ -1,52 +1,62 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: context.c,v 1.4 2005-05-19 16:41:10 bacon Exp $
|
* $Id: context.c,v 1.5 2005-05-21 16:11:06 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/stx/context.h>
|
#include <xp/stx/context.h>
|
||||||
#include <xp/stx/object.h>
|
#include <xp/stx/object.h>
|
||||||
|
#include <xp/stx/misc.h>
|
||||||
#define XP_STX_CONTEXT_SIZE 4
|
|
||||||
#define XP_STX_CONTEXT_IP 0
|
|
||||||
#define XP_STX_CONTEXT_METHOD 1
|
|
||||||
#define XP_STX_CONTEXT_ARGUMENTS 2
|
|
||||||
#define XP_STX_CONTEXT_TEMPORARIES 3
|
|
||||||
|
|
||||||
xp_stx_word_t xp_stx_new_context (xp_stx_t* stx,
|
xp_stx_word_t xp_stx_new_context (xp_stx_t* stx,
|
||||||
xp_stx_word_t method, xp_stx_word_t args, xp_stx_word_t temp)
|
xp_stx_word_t method, xp_stx_word_t args, xp_stx_word_t temp)
|
||||||
{
|
{
|
||||||
xp_stx_word_t context;
|
xp_stx_word_t context;
|
||||||
|
xp_stx_context_t* obj;
|
||||||
|
|
||||||
context = xp_stx_alloc_object(stx,XP_STX_CONTEXT_SIZE);
|
context = xp_stx_alloc_object(stx,XP_STX_CONTEXT_SIZE);
|
||||||
|
/*
|
||||||
XP_STX_CLASS(stx,context) = stx->class_context;
|
XP_STX_CLASS(stx,context) = stx->class_context;
|
||||||
XP_STX_AT(stx,context,XP_STX_CONTEXT_IP) = XP_STX_TO_SMALLINT(0);
|
XP_STX_AT(stx,context,XP_STX_CONTEXT_IP) = XP_STX_TO_SMALLINT(0);
|
||||||
XP_STX_AT(stx,context,XP_STX_CONTEXT_METHOD) = method;
|
XP_STX_AT(stx,context,XP_STX_CONTEXT_METHOD) = method;
|
||||||
XP_STX_AT(stx,context,XP_STX_CONTEXT_ARGUMENTS) = args;
|
XP_STX_AT(stx,context,XP_STX_CONTEXT_ARGUMENTS) = args;
|
||||||
XP_STX_AT(stx,context,XP_STX_CONTEXT_TEMPORARIES) = temp;
|
XP_STX_AT(stx,context,XP_STX_CONTEXT_TEMPORARIES) = temp;
|
||||||
|
*/
|
||||||
|
|
||||||
|
obj = (xp_stx_context_t*)XP_STX_OBJECT(stx,context);
|
||||||
|
obj->header.class = stx->class_context;
|
||||||
|
obj->ip = XP_STX_TO_SMALLINT(0);
|
||||||
|
obj->method = method;
|
||||||
|
obj->arguments = args;
|
||||||
|
obj->temporaries = temp;
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
static xp_stx_byte_t __fetch_byte (xp_stx_t* stx, xp_stx_word_t context)
|
static xp_stx_byte_t __fetch_byte (
|
||||||
|
xp_stx_t* stx, xp_stx_context_t* context_obj)
|
||||||
{
|
{
|
||||||
xp_stx_word_t method, ip;
|
xp_stx_word_t ip, method;
|
||||||
|
|
||||||
ip = XP_STX_AT(stx,context,XP_STX_CONTEXT_IP);
|
xp_stx_assert (XP_STX_IS_SMALLINT(context_obj->ip));
|
||||||
method = XP_STX_AT(stx,context,XP_STX_CONTEXT_METHOD);
|
ip = XP_STX_FROM_SMALLINT(context_obj->ip);
|
||||||
|
method = context_obj->method;
|
||||||
|
|
||||||
/* increment instruction pointer */
|
/* increment instruction pointer */
|
||||||
XP_STX_AT(stx,context,XP_STX_CONTEXT_IP) =
|
context_obj->ip = XP_STX_TO_SMALLINT(ip + 1);
|
||||||
XP_STX_TO_SMALLINT((XP_STX_FROM_SMALLINT(ip) + 1));
|
|
||||||
|
|
||||||
return XP_STX_BYTEAT(stx,method,XP_STX_FROM_SMALLINT(ip));
|
xp_stx_assert (XP_STX_TYPE(stx,method) == XP_STX_BYTE_INDEXED);
|
||||||
|
return XP_STX_BYTEAT(stx,method,ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_stx_run_context (xp_stx_t* stx, xp_stx_word_t context)
|
int xp_stx_run_context (xp_stx_t* stx, xp_stx_word_t context)
|
||||||
{
|
{
|
||||||
xp_stx_byte_t byte, operand;
|
xp_stx_byte_t byte, operand;
|
||||||
|
xp_stx_context_t* context_obj;
|
||||||
|
|
||||||
|
context_obj = (xp_stx_context_t*)XP_STX_OBJECT(stx,context);
|
||||||
|
|
||||||
while (!stx->__wantabort) {
|
while (!stx->__wantabort) {
|
||||||
/* check_process_switch (); // hopefully */
|
/* check_process_switch (); // hopefully */
|
||||||
byte = __fetch_byte (stx, context);
|
byte = __fetch_byte (stx, context_obj);
|
||||||
|
|
||||||
#ifdef _DOS
|
#ifdef _DOS
|
||||||
printf (XP_TEXT("code: %x\n"), byte);
|
printf (XP_TEXT("code: %x\n"), byte);
|
||||||
@ -56,10 +66,10 @@ xp_printf (XP_TEXT("code: %x\n"), byte);
|
|||||||
|
|
||||||
switch (byte) {
|
switch (byte) {
|
||||||
case PUSH_OBJECT:
|
case PUSH_OBJECT:
|
||||||
operand = __fetch_byte (stx, context);
|
operand = __fetch_byte (stx, context_obj);
|
||||||
break;
|
break;
|
||||||
case SEND_UNARY_MESSAGE:
|
case SEND_UNARY_MESSAGE:
|
||||||
operand = __fetch_byte (stx, context);
|
operand = __fetch_byte (stx, context_obj);
|
||||||
break;
|
break;
|
||||||
case HALT:
|
case HALT:
|
||||||
goto exit_run_context;
|
goto exit_run_context;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: context.h,v 1.1 2005-05-15 18:37:00 bacon Exp $
|
* $Id: context.h,v 1.2 2005-05-21 16:11:06 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_STX_CONTEXT_H_
|
#ifndef _XP_STX_CONTEXT_H_
|
||||||
@ -11,6 +11,23 @@
|
|||||||
#define SEND_UNARY_MESSAGE 0xB0
|
#define SEND_UNARY_MESSAGE 0xB0
|
||||||
#define HALT 0xFF
|
#define HALT 0xFF
|
||||||
|
|
||||||
|
#define XP_STX_CONTEXT_SIZE 4
|
||||||
|
#define XP_STX_CONTEXT_IP 0
|
||||||
|
#define XP_STX_CONTEXT_METHOD 1
|
||||||
|
#define XP_STX_CONTEXT_ARGUMENTS 2
|
||||||
|
#define XP_STX_CONTEXT_TEMPORARIES 3
|
||||||
|
|
||||||
|
struct xp_stx_context_t
|
||||||
|
{
|
||||||
|
xp_stx_objhdr_t header;
|
||||||
|
xp_stx_word_t ip;
|
||||||
|
xp_stx_word_t method;
|
||||||
|
xp_stx_word_t arguments;
|
||||||
|
xp_stx_word_t temporaries;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct xp_stx_context_t xp_stx_context_t;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: hash.c,v 1.14 2005-05-19 16:41:10 bacon Exp $
|
* $Id: hash.c,v 1.15 2005-05-21 16:11:06 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/stx/hash.h>
|
#include <xp/stx/hash.h>
|
||||||
@ -13,7 +13,7 @@ xp_stx_word_t xp_stx_new_pairlink (
|
|||||||
|
|
||||||
x = xp_stx_alloc_object (stx, XP_STX_PAIRLINK_SIZE);
|
x = xp_stx_alloc_object (stx, XP_STX_PAIRLINK_SIZE);
|
||||||
XP_STX_CLASS(stx,x) = stx->class_pairlink;
|
XP_STX_CLASS(stx,x) = stx->class_pairlink;
|
||||||
/* XP_STX_AT(stx,x,XP_STX_PAIRLINK_LINK) = stx->nil; */
|
XP_STX_AT(stx,x,XP_STX_PAIRLINK_LINK) = stx->nil;
|
||||||
XP_STX_AT(stx,x,XP_STX_PAIRLINK_KEY) = key;
|
XP_STX_AT(stx,x,XP_STX_PAIRLINK_KEY) = key;
|
||||||
XP_STX_AT(stx,x,XP_STX_PAIRLINK_VALUE) = value;
|
XP_STX_AT(stx,x,XP_STX_PAIRLINK_VALUE) = value;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user