/*输入的参数当前栈的相对起始位置,以及当前的层数,和位置*/ static void local_declare_parse(int offset,int layer,int * pos) { static int a=0; a++; int index =offset;/*索引,最开始在偏移量处*/ TokenInfo t_k; token_Get(pos,&t_k);/*先跳过本层的左括号*/ do { /*因为需要更多的信息,所以我们有两个变量控制*/ /*步进关系*/ int test_pos=(*pos); token_Get(&test_pos,&t_k);/*开始读取*/ switch(t_k.type) { /*遇到变量的声明式*/ case TOKEN_TYPE_VAR_DEF: { (*pos)=test_pos; var_define(pos,&index,offset,layer); } break; /*遇到左括号说明遇见了嵌套结构*/ case TOKEN_TYPE_LEFT_BRACE: /*回退一格,递归调用本函数*/ local_declare_parse(index,layer+1,pos); break; /*for语句较为特殊,因为其初始化表达式可能有定义式*/ case TOKEN_TYPE_FOR: token_Get(&test_pos,&t_k);/*跳过左小括号*/ token_Get(&test_pos,&t_k);/*判定for语句的初始化表达式是否有定义式*/ (*pos)=test_pos; if(t_k.type==TOKEN_TYPE_VAR_DEF) { /*for语句初始化表达式所定义的变量属于内层变量*/ /*所以它针对的起始偏移量要发生改变*/ var_define(pos,&index,offset+index,layer+1); } break; /*遇到右括号则终结*/ case TOKEN_TYPE_RIGHT_BRACE: (*pos)=test_pos; return; break; /*我们只检测声明式,所以遇见了其他的几号就跳过改句*/ default: (*pos)=test_pos; break; } } while(t_k.type!=TOKEN_TYPE_EOF); }
void init_event(void) { mt_event_timer = MM_REGTYPE("event_timer", sizeof(event_timer_t), clear_event_timer, mark_event_timer, 0); MM_ROOT(timers); /* set up event queue */ MM_ROOT(head); head = tail = new_cons(NIL, NIL); /* EVENTS FUNCTION */ at_handle = var_define("handle"); dx_define("set-event-handler", xseteventhandler); dx_define("process-pending-events", xprocess_pending_events); dx_define("sendevent", xsendevent); dx_define("testevent", xtestevent); dx_define("checkevent", xcheckevent); dx_define("waitevent", xwaitevent); dx_define("eventinfo", xeventinfo); /* TIMER FUNCTIONS */ dx_define("create-timer", xcreate_timer); dx_define("create-timer-absolute", xcreate_timer_absolute); dx_define("kill-timer", xkill_timer); dx_define("sleep", xsleep); }
void init_oostruct(void) { mt_object = MM_REGTYPE("object", SIZEOF_OBJECT, clear_object, mark_object, finalize_object); mt_object2 = MM_REGTYPE("object2", SIZEOF_OBJECT2, clear_object, mark_object, finalize_object); mt_method_hash = MM_REGTYPE("method-hash", 0, clear_method_hash, mark_method_hash, 0); pre_init_oostruct(); MM_ROOT(unreachables); class_class->backptr = new_at(class_class, class_class); class_define("Class", class_class); /* * mm_alloc object_class to avoid hickup in mark_class */ object_class = new_builtin_class(NIL); object_class->dispose = (dispose_func_t *)oostruct_dispose; object_class->listeval = oostruct_listeval; object_class->compare = oostruct_compare; object_class->hash = oostruct_hash; object_class->getslot = oostruct_getslot; object_class->setslot = oostruct_setslot; class_define("object", object_class); dx_define("allslots", xallslots); dx_define("slots",xslots); dx_define("super",xsuper); dx_define("subclasses",xsubclasses); dx_define("methods",xmethods); dx_define("classname",xclassname); dy_define("classof", yclassof); dx_define("isa",xisa); dx_define("emptyp",xemptyp); dx_define("make-class",xmake_class); dx_define("builtin-class-p",xbuiltin_class_p); dy_define("new",ynew); dx_define("new-empty",xnew_empty); dx_define("delete",xdelete); dy_define("with-object",ywith_object); dx_define("getmethod",xgetmethod); dx_define("putmethod",xputmethod); dy_define("send",ysend); dx_define("sender",xsender); at_this = var_define("this"); at_progn = var_define("progn"); at_destroy = var_define("-destructor"); at_listeval = var_define("-listeval"); at_emptyp = var_define("-emptyp"); at_mexpand = var_define("macroexpand"); at_unknown = var_define("-unknown"); at_pname = var_define("pname"); }
void init_storage() { assert(ST_FIRST==0); assert(sizeof(char)==sizeof(uchar)); #ifdef HAVE_MMAP size_t storage_size = offsetof(storage_t, mmap_addr); #else size_t storage_size = sizeof(storage_t); #endif mt_storage = MM_REGTYPE("storage", storage_size, clear_storage, mark_storage, 0); /* set up storage_classes */ abstract_storage_class = new_builtin_class(NIL); class_define("storage", abstract_storage_class); Generic_storage_class_init(ST_BOOL, Bool); Generic_storage_class_init(ST_AT, Atom); Generic_storage_class_init(ST_FLOAT, Float); Generic_storage_class_init(ST_DOUBLE, Double); Generic_storage_class_init(ST_INT, Int); Generic_storage_class_init(ST_SHORT, Short); Generic_storage_class_init(ST_CHAR, Char); Generic_storage_class_init(ST_UCHAR, UChar); Generic_storage_class_init(ST_GPTR, Gptr); Generic_storage_class_init(ST_MPTR, Mptr); at *p = var_define("storage-classes"); at *l = NIL; for (storage_type_t st=ST_FIRST; st<ST_LAST; st++) l = new_cons(storage_class[st]->backptr, l); var_set(p, reverse(l)); var_lock(p); dx_define("new-storage", xnew_storage); dx_define("new-storage/managed", xnew_storage_managed); dx_define("new-storage/foreign", xnew_storage_foreign); #ifdef HAVE_MMAP dx_define("new-storage/mmap",xnew_storage_mmap); #endif dx_define("storage-alloc",xstorage_alloc); dx_define("storage-realloc",xstorage_realloc); dx_define("storage-clear",xstorage_clear); dx_define("storagep",xstoragep); dx_define("storage-readonlyp",xstorage_readonlyp); dx_define("storage-set-readonly", xstorage_set_readonly); dx_define("storage-load",xstorage_load); dx_define("storage-save",xstorage_save); dx_define("storage-nelems",xstorage_nelems); dx_define("storage-nbytes",xstorage_nbytes); }
void init_network(void) { /* Network Creation */ dx_define("alloc-net",xalloc_net); dx_define("newneurons",xnewneurons); #ifndef NONEURTYPE dx_define("set-neurtype-regular", xset_neurtype_regular); dx_define("get-neurtype", xget_neurtype); #endif dx_define("clear_net",xclear_net); dx_define("connect",xconnect); dx_define("cut-connection", xcut_connection); #ifdef ITERATIVE dx_define("dup-connection",xdup_connection); #ifdef WMATRIX w_matrix_var = var_define("weight_matrix"); #endif #endif /* Topology functions */ dx_define("amont",xamont); dx_define("aval",xaval); /* File functions */ dx_define("save-net/merge",xsave_net); dx_define("save-ascii-net/merge",xsave_ascii_net); dx_define("merge-net",xmerge_net); /* Network to matrix transferts */ dx_define("weight-to-matrix",xweight_to_matrix); dx_define("matrix-to-weight",xmatrix_to_weight); #ifdef ITERATIVE dx_define("acc-to-matrix",xacc_to_matrix); dx_define("matrix-to-acc",xmatrix_to_acc); dx_define("delta-to-matrix",xdelta_to_matrix); dx_define("matrix-to-delta",xmatrix_to_delta); #ifdef NEWTON dx_define("hess-to-matrix",xhess_to_matrix); dx_define("matrix-to-hess",xmatrix_to_hess); #endif #endif }
void init_event(void) { /* EVENT QUEUE */ head = tail = cons(NIL,NIL); protect(head); /* EVENTS FUNCTION */ at_handle = var_define("handle"); dx_define("set-event-handler",xseteventhandler); dx_define("process-pending-events",xprocess_pending_events); dx_define("sendevent",xsendevent); dx_define("testevent",xtestevent); dx_define("checkevent",xcheckevent); dx_define("waitevent",xwaitevent); dx_define("eventinfo",xeventinfo); /* TIMER FUNCTIONS */ dx_define("create-timer", xcreate_timer); dx_define("create-timer-absolute", xcreate_timer_absolute); dx_define("kill-timer", xkill_timer); dx_define("sleep", xsleep); }