gbx_exec.h
#ifndef __GBX_EXEC_H
#define __GBX_EXEC_H
#include "gb_alloc.h"
#include "gb_error.h"
#include "gbx_class.h"
#include "gbx_value.h"
#include "gb_pcode.h"
#include "gbx_stack.h"
#include "gbx_string.h"
#include "gbx_object.h"
#include "gbx_variant.h"
#include "gbx_array.h"
typedef
void (*EXEC_FUNC)();
typedef
struct {
CLASS *class;
void *object;
long index;
CLASS_DESC_METHOD *desc;
int nparam;
int nparvar;
bool drop;
bool native;
bool use_stack;
bool property;
}
EXEC_FUNCTION;
typedef
struct {
void (*main)();
int (*loop)();
void (*wait)();
int (*message)();
void (*beep)();
void (*watch)();
void (*post)();
void (*quit)();
void (*error)();
}
EXEC_HOOK;
#ifndef __GBX_EXEC_C
EXTERN STACK_CONTEXT EXEC_current;
EXTERN PCODE EXEC_code;
EXTERN VALUE *SP;
EXTERN VALUE TEMP;
EXTERN VALUE RET;
EXTERN EXEC_FUNCTION EXEC;
EXTERN bool EXEC_debug;
EXTERN bool EXEC_arch;
EXTERN bool EXEC_fifo;
EXTERN EXEC_HOOK EXEC_Hook;
EXTERN bool EXEC_enum_stop;
EXTERN void *EXEC_enum_data;
EXTERN bool EXEC_big_endian;
#endif
#define BP EXEC_current.bp
#define CP EXEC_current.cp
#define OP EXEC_current.op
#define EP EXEC_current.ep
#define FP EXEC_current.fp
#define PC EXEC_current.pc
#define EC EXEC_current.ec
#define ET EXEC_current.et
#define RP (&RET)
#define HOOK(func) (!EXEC_Hook.func) ? 0 : (*EXEC_Hook.func)
#define HOOK_DEFAULT(func, def) (*((!EXEC_Hook.func) ? def : EXEC_Hook.func))
#define GET_NPARAM(var) short var = *PC & 0x3F
#define GET_PARAM(var, nparam) VALUE *var = &SP[-nparam]
#define RELEASE_STRING(_value)
#define PUSH() (BORROW(SP), SP++)
#define POP() (SP--, RELEASE(SP))
PUBLIC void EXEC_init(void);
PUBLIC void EXEC_enter(void);
PUBLIC void EXEC_leave(bool);
PUBLIC void EXEC_loop(void);
PUBLIC void EXEC_object(VALUE *SP, CLASS **class, OBJECT **object, boolean *defined);
PUBLIC void *EXEC_auto_create(CLASS *class);
PUBLIC bool EXEC_call_native(void (*exec)(), void *object, TYPE type, VALUE *param);
PUBLIC void EXEC_native();
PUBLIC void EXEC_function_real(bool keep_ret_value);
#define EXEC_function() EXEC_function_real(FALSE)
#define EXEC_function_keep() EXEC_function_real(TRUE)
PUBLIC void EXEC_public(CLASS *class, void *object, const char *name, int nparam);
PUBLIC boolean EXEC_spec(int spec, CLASS *class, void *object, int nparam, boolean drop);
#define EXEC_special(_spec, _class, _object, _nparam, _drop) EXEC_spec(_spec, _class, _object, _nparam, _drop)
PUBLIC void EXEC_special_inheritance(int special, CLASS *class, OBJECT *object, int nparam, boolean drop);
PUBLIC void EXEC_nop(void);
PUBLIC void EXEC_ILLEGAL(void);
PUBLIC void EXEC_push_unknown(void);
PUBLIC void EXEC_push_array(void);
PUBLIC void EXEC_push_special(void);
PUBLIC void EXEC_pop_unknown(void);
PUBLIC void EXEC_pop_array(void);
PUBLIC void EXEC_enum_first(PCODE code);
PUBLIC bool EXEC_enum_next(PCODE code);
PUBLIC void EXEC_new(void);
PUBLIC void EXEC_class(void);
PUBLIC void BORROW(VALUE *val);
PUBLIC void UNBORROW(VALUE *val);
PUBLIC void RELEASE(VALUE *val);
PUBLIC void EXEC_release_return_value(void);
PUBLIC void EXEC_quit(void);
#endif