-
+ C74450E18AB91F7C226108E76075162D2DD9B111B10D42AF58FBFE5C2F18C71667E42CD865138DAA7339BACF158411642D62E742B208AA5133316B879081BB90
bitcoin/src/shiva/scheme-private.h
(0 . 0)(1 . 211)
7531 /* scheme-private.h */
7532
7533 #ifndef _SCHEME_PRIVATE_H
7534 #define _SCHEME_PRIVATE_H
7535
7536 #include "scheme.h"
7537 /*------------------ Ugly internals -----------------------------------*/
7538 /*------------------ Of interest only to FFI users --------------------*/
7539
7540 #ifdef __cplusplus
7541 extern "C" {
7542 #endif
7543
7544 enum scheme_port_kind {
7545 port_free=0,
7546 port_file=1,
7547 port_string=2,
7548 port_srfi6=4,
7549 port_input=16,
7550 port_output=32,
7551 port_saw_EOF=64
7552 };
7553
7554 typedef struct port {
7555 unsigned char kind;
7556 union {
7557 struct {
7558 FILE *file;
7559 int interactive;
7560 int closeit;
7561 #if SHOW_ERROR_LINE
7562 int curr_line;
7563 char *filename;
7564 #endif
7565 } stdio;
7566 struct {
7567 char *start;
7568 char *past_the_end;
7569 char *curr;
7570 } string;
7571 } rep;
7572 } port;
7573
7574 /* cell structure */
7575 struct cell {
7576 unsigned int _flag;
7577 union {
7578 struct {
7579 char *_svalue;
7580 int _length;
7581 } _string;
7582 num _number;
7583 port *_port;
7584 foreign_func _ff;
7585 struct {
7586 struct cell *_car;
7587 struct cell *_cdr;
7588 } _cons;
7589 } _object;
7590 };
7591
7592 struct scheme {
7593 /* arrays for segments */
7594 func_alloc malloc;
7595 func_dealloc free;
7596
7597 /* return code */
7598 int retcode;
7599 int tracing;
7600
7601
7602 #define CELL_SEGSIZE 5000 /* # of cells in one segment */
7603 #define CELL_NSEGMENT 10 /* # of segments for cells */
7604 char *alloc_seg[CELL_NSEGMENT];
7605 pointer cell_seg[CELL_NSEGMENT];
7606 int last_cell_seg;
7607
7608 /* We use 4 registers. */
7609 pointer args; /* register for arguments of function */
7610 pointer envir; /* stack register for current environment */
7611 pointer code; /* register for current code */
7612 pointer dump; /* stack register for next evaluation */
7613
7614 int interactive_repl; /* are we in an interactive REPL? */
7615
7616 struct cell _sink;
7617 pointer sink; /* when mem. alloc. fails */
7618 struct cell _NIL;
7619 pointer NIL; /* special cell representing empty cell */
7620 struct cell _HASHT;
7621 pointer T; /* special cell representing #t */
7622 struct cell _HASHF;
7623 pointer F; /* special cell representing #f */
7624 struct cell _EOF_OBJ;
7625 pointer EOF_OBJ; /* special cell representing end-of-file object */
7626 pointer oblist; /* pointer to symbol table */
7627 pointer global_env; /* pointer to global environment */
7628 pointer c_nest; /* stack for nested calls from C */
7629
7630 /* global pointers to special symbols */
7631 pointer LAMBDA; /* pointer to syntax lambda */
7632 pointer QUOTE; /* pointer to syntax quote */
7633
7634 pointer QQUOTE; /* pointer to symbol quasiquote */
7635 pointer UNQUOTE; /* pointer to symbol unquote */
7636 pointer UNQUOTESP; /* pointer to symbol unquote-splicing */
7637 pointer FEED_TO; /* => */
7638 pointer COLON_HOOK; /* *colon-hook* */
7639 pointer ERROR_HOOK; /* *error-hook* */
7640 pointer SHARP_HOOK; /* *sharp-hook* */
7641 pointer COMPILE_HOOK; /* *compile-hook* */
7642
7643 pointer free_cell; /* pointer to top of free cells */
7644 long fcells; /* # of free cells */
7645
7646 pointer inport;
7647 pointer outport;
7648 pointer save_inport;
7649 pointer loadport;
7650
7651 #define MAXFIL 64
7652 port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */
7653 int nesting_stack[MAXFIL];
7654 int file_i;
7655 int nesting;
7656
7657 char gc_verbose; /* if gc_verbose is not zero, print gc status */
7658 char no_memory; /* Whether mem. alloc. has failed */
7659
7660 #define LINESIZE 1024
7661 char linebuff[LINESIZE];
7662 #define STRBUFFSIZE 256
7663 char strbuff[STRBUFFSIZE];
7664
7665 FILE *tmpfp;
7666 int tok;
7667 int print_flag;
7668 pointer value;
7669 int op;
7670
7671 void *ext_data; /* For the benefit of foreign functions */
7672 long gensym_cnt;
7673
7674 struct scheme_interface *vptr;
7675 void *dump_base; /* pointer to base of allocated dump stack */
7676 int dump_size; /* number of frames allocated for dump stack */
7677 };
7678
7679 /* operator code */
7680 enum scheme_opcodes {
7681 #define _OP_DEF(A,B,C,D,E,OP) OP,
7682 #include "opdefines.h"
7683 OP_MAXDEFINED
7684 };
7685
7686
7687 #define cons(sc,a,b) _cons(sc,a,b,0)
7688 #define immutable_cons(sc,a,b) _cons(sc,a,b,1)
7689
7690 int is_string(pointer p);
7691 char *string_value(pointer p);
7692 int is_number(pointer p);
7693 num nvalue(pointer p);
7694 long ivalue(pointer p);
7695 double rvalue(pointer p);
7696 int is_integer(pointer p);
7697 int is_real(pointer p);
7698 int is_character(pointer p);
7699 long charvalue(pointer p);
7700 int is_vector(pointer p);
7701
7702 int is_port(pointer p);
7703
7704 int is_pair(pointer p);
7705 pointer pair_car(pointer p);
7706 pointer pair_cdr(pointer p);
7707 pointer set_car(pointer p, pointer q);
7708 pointer set_cdr(pointer p, pointer q);
7709
7710 int is_symbol(pointer p);
7711 char *symname(pointer p);
7712 int hasprop(pointer p);
7713
7714 int is_syntax(pointer p);
7715 int is_proc(pointer p);
7716 int is_foreign(pointer p);
7717 char *syntaxname(pointer p);
7718 int is_closure(pointer p);
7719 #ifdef USE_MACRO
7720 int is_macro(pointer p);
7721 #endif
7722 pointer closure_code(pointer p);
7723 pointer closure_env(pointer p);
7724
7725 int is_continuation(pointer p);
7726 int is_promise(pointer p);
7727 int is_environment(pointer p);
7728 int is_immutable(pointer p);
7729 void setimmutable(pointer p);
7730
7731 #ifdef __cplusplus
7732 }
7733 #endif
7734
7735 #endif
7736
7737 /*
7738 Local variables:
7739 c-file-style: "k&r"
7740 End:
7741 */