add picrin/setup.h and picrin/state.h
This commit is contained in:
parent
4a3104187e
commit
d30cdf7409
|
@ -32,98 +32,13 @@ extern "C" {
|
|||
#include <limits.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "picrin/config.h"
|
||||
|
||||
#include "picrin/compat.h"
|
||||
#include "picrin/khash.h"
|
||||
#include "picrin/setup.h"
|
||||
|
||||
typedef struct pic_state pic_state;
|
||||
|
||||
typedef void *(*pic_allocf)(void *, void *, size_t);
|
||||
|
||||
#include "picrin/type.h"
|
||||
#include "picrin/irep.h"
|
||||
#include "picrin/file.h"
|
||||
#include "picrin/read.h"
|
||||
#include "picrin/gc.h"
|
||||
|
||||
KHASH_DECLARE(s, struct pic_string *, pic_sym *)
|
||||
|
||||
typedef struct pic_checkpoint {
|
||||
PIC_OBJECT_HEADER
|
||||
struct pic_proc *in;
|
||||
struct pic_proc *out;
|
||||
int depth;
|
||||
struct pic_checkpoint *prev;
|
||||
} pic_checkpoint;
|
||||
|
||||
typedef struct {
|
||||
int argc, retc;
|
||||
pic_code *ip;
|
||||
pic_value *fp;
|
||||
struct pic_irep *irep;
|
||||
struct pic_context *cxt;
|
||||
int regc;
|
||||
pic_value *regs;
|
||||
struct pic_context *up;
|
||||
} pic_callinfo;
|
||||
|
||||
struct pic_state {
|
||||
pic_allocf allocf;
|
||||
void *userdata;
|
||||
|
||||
pic_checkpoint *cp;
|
||||
struct pic_cont *cc;
|
||||
int ccnt;
|
||||
|
||||
pic_value *sp;
|
||||
pic_value *stbase, *stend;
|
||||
|
||||
pic_callinfo *ci;
|
||||
pic_callinfo *cibase, *ciend;
|
||||
|
||||
struct pic_proc **xp;
|
||||
struct pic_proc **xpbase, **xpend;
|
||||
|
||||
pic_code *ip;
|
||||
|
||||
pic_value ptable; /* list of ephemerons */
|
||||
|
||||
struct pic_lib *lib, *prev_lib;
|
||||
|
||||
pic_sym *sDEFINE, *sDEFINE_MACRO, *sLAMBDA, *sIF, *sBEGIN, *sSETBANG;
|
||||
pic_sym *sQUOTE, *sQUASIQUOTE, *sUNQUOTE, *sUNQUOTE_SPLICING;
|
||||
pic_sym *sSYNTAX_QUOTE, *sSYNTAX_QUASIQUOTE;
|
||||
pic_sym *sSYNTAX_UNQUOTE, *sSYNTAX_UNQUOTE_SPLICING;
|
||||
pic_sym *sDEFINE_LIBRARY, *sIMPORT, *sEXPORT, *sCOND_EXPAND;
|
||||
pic_sym *sCONS, *sCAR, *sCDR, *sNILP, *sSYMBOLP, *sPAIRP;
|
||||
pic_sym *sADD, *sSUB, *sMUL, *sDIV, *sEQ, *sLT, *sLE, *sGT, *sGE, *sNOT;
|
||||
|
||||
struct pic_lib *PICRIN_BASE;
|
||||
struct pic_lib *PICRIN_USER;
|
||||
|
||||
pic_value features;
|
||||
|
||||
khash_t(s) oblist; /* string to symbol */
|
||||
int ucnt;
|
||||
struct pic_weak *globals;
|
||||
struct pic_weak *macros;
|
||||
pic_value libs;
|
||||
struct pic_list ireps; /* chain */
|
||||
|
||||
pic_reader reader;
|
||||
xFILE files[XOPEN_MAX];
|
||||
pic_code iseq[2]; /* for pic_apply_trampoline */
|
||||
|
||||
bool gc_enable;
|
||||
struct pic_heap *heap;
|
||||
struct pic_object **arena;
|
||||
size_t arena_size, arena_idx;
|
||||
|
||||
pic_value err;
|
||||
|
||||
char *native_stack_start;
|
||||
};
|
||||
typedef void *(*pic_allocf)(void *, void *, size_t);
|
||||
|
||||
pic_state *pic_open(pic_allocf, void *);
|
||||
void pic_close(pic_state *);
|
||||
|
@ -262,6 +177,10 @@ struct pic_string *pic_str_sub(pic_state *, struct pic_string *, int, int);
|
|||
int pic_str_cmp(pic_state *, struct pic_string *, struct pic_string *);
|
||||
int pic_str_hash(pic_state *, struct pic_string *);
|
||||
|
||||
/* extra stuff */
|
||||
|
||||
#include "picrin/state.h"
|
||||
|
||||
#include "picrin/blob.h"
|
||||
#include "picrin/cont.h"
|
||||
#include "picrin/data.h"
|
||||
|
@ -278,8 +197,6 @@ int pic_str_hash(pic_state *, struct pic_string *);
|
|||
#include "picrin/vector.h"
|
||||
#include "picrin/weak.h"
|
||||
|
||||
/* extra stuff */
|
||||
|
||||
void *pic_default_allocf(void *, void *, size_t);
|
||||
|
||||
struct pic_object *pic_obj_alloc(pic_state *, size_t, enum pic_tt);
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
/**
|
||||
* See Copyright Notice in picrin.h
|
||||
*/
|
||||
|
||||
#include "picrin/config.h"
|
||||
|
||||
#ifndef PIC_DIRECT_THREADED_VM
|
||||
# if (defined(__GNUC__) || defined(__clang__)) && __STRICT_ANSI__ != 1
|
||||
# define PIC_DIRECT_THREADED_VM 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if PIC_NAN_BOXING && PIC_WORD_BOXING
|
||||
# error cannot enable both PIC_NAN_BOXING and PIC_WORD_BOXING simultaneously
|
||||
#endif
|
||||
|
||||
#ifndef PIC_WORD_BOXING
|
||||
# define PIC_WORD_BOXING 0
|
||||
#endif
|
||||
|
||||
#if ! PIC_WORD_BOXING
|
||||
# ifndef PIC_NAN_BOXING
|
||||
# if __x86_64__ && (defined(__GNUC__) || defined(__clang__)) && __STRICT_ANSI__ != 1
|
||||
# define PIC_NAN_BOXING 1
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef PIC_ENABLE_LIBC
|
||||
# define PIC_ENABLE_LIBC 1
|
||||
#endif
|
||||
|
||||
#ifndef PIC_ENABLE_STDIO
|
||||
# define PIC_ENABLE_STDIO 1
|
||||
#endif
|
||||
|
||||
#ifndef PIC_JMPBUF
|
||||
# include <setjmp.h>
|
||||
# define PIC_JMPBUF jmp_buf
|
||||
#endif
|
||||
|
||||
#ifndef PIC_SETJMP
|
||||
# include <setjmp.h>
|
||||
# define PIC_SETJMP(pic, buf) setjmp(buf)
|
||||
#endif
|
||||
|
||||
#ifndef PIC_LONGJMP
|
||||
# include <setjmp.h>
|
||||
# define PIC_LONGJMP(pic, buf, val) longjmp((buf), (val))
|
||||
#endif
|
||||
|
||||
#ifndef PIC_ABORT
|
||||
# define PIC_ABORT(pic) abort()
|
||||
#endif
|
||||
|
||||
#ifndef PIC_ARENA_SIZE
|
||||
# define PIC_ARENA_SIZE (8 * 1024)
|
||||
#endif
|
||||
|
||||
#ifndef PIC_HEAP_PAGE_SIZE
|
||||
# define PIC_HEAP_PAGE_SIZE (4 * 1024 * 1024)
|
||||
#endif
|
||||
|
||||
#ifndef PIC_PAGE_REQUEST_THRESHOLD
|
||||
# define PIC_PAGE_REQUEST_THRESHOLD(total) ((total) * 77 / 100)
|
||||
#endif
|
||||
|
||||
#ifndef PIC_STACK_SIZE
|
||||
# define PIC_STACK_SIZE 2048
|
||||
#endif
|
||||
|
||||
#ifndef PIC_RESCUE_SIZE
|
||||
# define PIC_RESCUE_SIZE 30
|
||||
#endif
|
||||
|
||||
#ifndef PIC_SYM_POOL_SIZE
|
||||
# define PIC_SYM_POOL_SIZE (2 * 1024)
|
||||
#endif
|
||||
|
||||
#ifndef PIC_IREP_SIZE
|
||||
# define PIC_IREP_SIZE 8
|
||||
#endif
|
||||
|
||||
#ifndef PIC_POOL_SIZE
|
||||
# define PIC_POOL_SIZE 8
|
||||
#endif
|
||||
|
||||
#ifndef PIC_SYMS_SIZE
|
||||
# define PIC_SYMS_SIZE 32
|
||||
#endif
|
||||
|
||||
#ifndef PIC_ISEQ_SIZE
|
||||
# define PIC_ISEQ_SIZE 1024
|
||||
#endif
|
||||
|
||||
#if DEBUG
|
||||
# include <stdio.h>
|
||||
# define GC_STRESS 0
|
||||
# define VM_DEBUG 1
|
||||
# define GC_DEBUG 0
|
||||
# define GC_DEBUG_DETAIL 0
|
||||
#endif
|
||||
|
||||
#include "picrin/compat.h"
|
|
@ -0,0 +1,101 @@
|
|||
/**
|
||||
* See Copyright Notice in picrin.h
|
||||
*/
|
||||
|
||||
#ifndef PICRIN_STATE_H
|
||||
#define PICRIN_STATE_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "picrin/khash.h"
|
||||
|
||||
#include "picrin/irep.h"
|
||||
#include "picrin/file.h"
|
||||
#include "picrin/read.h"
|
||||
#include "picrin/gc.h"
|
||||
|
||||
KHASH_DECLARE(s, struct pic_string *, pic_sym *)
|
||||
|
||||
typedef struct pic_checkpoint {
|
||||
PIC_OBJECT_HEADER
|
||||
struct pic_proc *in;
|
||||
struct pic_proc *out;
|
||||
int depth;
|
||||
struct pic_checkpoint *prev;
|
||||
} pic_checkpoint;
|
||||
|
||||
typedef struct {
|
||||
int argc, retc;
|
||||
pic_code *ip;
|
||||
pic_value *fp;
|
||||
struct pic_irep *irep;
|
||||
struct pic_context *cxt;
|
||||
int regc;
|
||||
pic_value *regs;
|
||||
struct pic_context *up;
|
||||
} pic_callinfo;
|
||||
|
||||
struct pic_state {
|
||||
pic_allocf allocf;
|
||||
void *userdata;
|
||||
|
||||
pic_checkpoint *cp;
|
||||
struct pic_cont *cc;
|
||||
int ccnt;
|
||||
|
||||
pic_value *sp;
|
||||
pic_value *stbase, *stend;
|
||||
|
||||
pic_callinfo *ci;
|
||||
pic_callinfo *cibase, *ciend;
|
||||
|
||||
struct pic_proc **xp;
|
||||
struct pic_proc **xpbase, **xpend;
|
||||
|
||||
pic_code *ip;
|
||||
|
||||
pic_value ptable; /* list of ephemerons */
|
||||
|
||||
struct pic_lib *lib, *prev_lib;
|
||||
|
||||
pic_sym *sDEFINE, *sDEFINE_MACRO, *sLAMBDA, *sIF, *sBEGIN, *sSETBANG;
|
||||
pic_sym *sQUOTE, *sQUASIQUOTE, *sUNQUOTE, *sUNQUOTE_SPLICING;
|
||||
pic_sym *sSYNTAX_QUOTE, *sSYNTAX_QUASIQUOTE;
|
||||
pic_sym *sSYNTAX_UNQUOTE, *sSYNTAX_UNQUOTE_SPLICING;
|
||||
pic_sym *sDEFINE_LIBRARY, *sIMPORT, *sEXPORT, *sCOND_EXPAND;
|
||||
pic_sym *sCONS, *sCAR, *sCDR, *sNILP, *sSYMBOLP, *sPAIRP;
|
||||
pic_sym *sADD, *sSUB, *sMUL, *sDIV, *sEQ, *sLT, *sLE, *sGT, *sGE, *sNOT;
|
||||
|
||||
struct pic_lib *PICRIN_BASE;
|
||||
struct pic_lib *PICRIN_USER;
|
||||
|
||||
pic_value features;
|
||||
|
||||
khash_t(s) oblist; /* string to symbol */
|
||||
int ucnt;
|
||||
struct pic_weak *globals;
|
||||
struct pic_weak *macros;
|
||||
pic_value libs;
|
||||
struct pic_list ireps; /* chain */
|
||||
|
||||
pic_reader reader;
|
||||
xFILE files[XOPEN_MAX];
|
||||
pic_code iseq[2]; /* for pic_apply_trampoline */
|
||||
|
||||
bool gc_enable;
|
||||
struct pic_heap *heap;
|
||||
struct pic_object **arena;
|
||||
size_t arena_size, arena_idx;
|
||||
|
||||
pic_value err;
|
||||
|
||||
char *native_stack_start;
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -197,6 +197,7 @@ struct pic_proc;
|
|||
struct pic_port;
|
||||
struct pic_error;
|
||||
struct pic_env;
|
||||
struct pic_lib;
|
||||
|
||||
/* set aliases to basic types */
|
||||
typedef struct pic_symbol pic_sym;
|
||||
|
|
Loading…
Reference in New Issue