X-Git-Url: http://nitlanguage.org diff --git a/clib/nit_common.h b/clib/nit_common.h index 2d4f9df..08fb294 100644 --- a/clib/nit_common.h +++ b/clib/nit_common.h @@ -18,14 +18,6 @@ #include #include -#ifdef WITH_LIBGC -#include -#define malloc(x) GC_MALLOC((x)) -#define calloc(x,y) GC_MALLOC((x)*(y)) -#endif - - - /* *** Types *** */ typedef signed long int bigint; /* standard int value, must be larger that any poiner */ typedef bigint (*fun_t) (bigint); /* generic function pointer */ @@ -116,7 +108,11 @@ extern bigint object_id_counter; #define VAL_ISA(e, c, i) (VAL2VFT((e))[(c)].cid == (cid_t)(i)) -void * alloc(size_t); +/* GC and memory management */ +void *alloc(size_t); /* allocate memory to store an object with an object header */ +void *raw_alloc(size_t); /* allocate raw memory to store a raw stram of byte */ +void register_static_object(val_t*); /* mark that something is a global or once object */ + extern val_t G_args; extern val_t G_stdin; extern val_t G_stdout; @@ -126,18 +122,30 @@ extern val_t G_sys; extern int glob_argc; extern char ** glob_argv; -struct trace_t { - struct trace_t *prev; /* previous stack frame */ - const char *file; /* source filename */ - int line; /* line number */ - const char *meth; /* method name */ - int REG_size; - val_t **REG_pointer; +/* Stack frames. + * Are used to: + * - store local variables (REGS) of functions + * - store context for closure + * - provide information for stack dump + */ +struct stack_frame_t { + struct stack_frame_t *prev; /* previous stack frame */ + const char *file; /* source filename (.nit) */ + int line; /* line number (in the source) */ + const char *meth; /* human function name (usually the method name) */ + struct stack_frame_t *closure_ctx; /* closure context (for functions that have closure parameters) */ + fun_t *closure_funs; /* closure functions (for functions that have closure parameters) */ + int has_broke; /* has an escape occured? 0 if false, label_idx (>0) if true */ + int REG_size; /* number of local variables */ + val_t REG[1]; /* local variables (flexible array) */ }; -extern struct trace_t *tracehead; +extern struct stack_frame_t *stack_frame_head; + + typedef enum {true = (1==1),false = (0==1)} bool; void nit_exit(int); +void nit_abort(const char*, const char*, const char*, int); #define CALL(r,c) ((VAL2VFT(r)[c].f)) #define ATTR(r,c) (*(val_t*)(VAL2OBJ(r)+c)) @@ -145,9 +153,5 @@ void nit_exit(int); void prepare_signals(void); extern classtable_t TAG2VFT[4]; - -/* This structure is used to store closure. - * Specific closure use a specific fun parameter. - */ -struct WBT_ {fun_t fun; val_t *has_broke; val_t broke_value; val_t *variable; struct WBT_ **closurevariable;}; +val_t NEW_NativeArray(size_t length, size_t size); #endif