clib: move REG to the stack frames
[nit.git] / clib / nit_common.h
index f489205..93a42c3 100644 (file)
 #include <stdio.h>
 #include <string.h>
 
-#ifdef WITH_LIBGC
-#include <gc/gc.h>
-#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,13 +122,19 @@ 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 */
+/* Stack frames.
+ * Are used to store local variables (REGS) of function and 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) */
+       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);