/* Allocates memory */ F_COMPILED *compile_profiling_stub(F_WORD *word) { CELL literals = allot_array_1(tag_object(word)); REGISTER_ROOT(literals); F_ARRAY *quadruple = untag_object(userenv[JIT_PROFILING]); CELL code = array_nth(quadruple,0); REGISTER_ROOT(code); F_REL rel; rel.type = to_fixnum(array_nth(quadruple,2)) | (to_fixnum(array_nth(quadruple,1)) << 8); rel.offset = to_fixnum(array_nth(quadruple,3)) * compiled_code_format(); F_BYTE_ARRAY *relocation = allot_byte_array(sizeof(F_REL)); memcpy((void *)BREF(relocation,0),&rel,sizeof(F_REL)); UNREGISTER_ROOT(code); UNREGISTER_ROOT(literals); return add_compiled_block( WORD_TYPE, untag_object(code), NULL, /* no labels */ tag_object(relocation), untag_object(literals)); }
/*---------------------------------------------------------------------*/ BGL_RUNTIME_DEF obj_t cobj_to_foreign( obj_t id, void *cobj ) { obj_t handle; handle = GC_MALLOC( FOREIGN_SIZE ); handle->foreign_t.header = MAKE_HEADER( FOREIGN_TYPE, FOREIGN_SIZE ); handle->foreign_t.cobj = (void *)cobj; handle->foreign_t.id = id; return BREF( handle ); }
/*---------------------------------------------------------------------*/ obj_t bglk_gtk_glist_objs( GList *slist ) { obj_t res = BNIL; while( slist ) { GtkWidget *item; item = slist->data; res = make_pair( BREF( gtk_object_get_user_data( GTK_OBJECT( item ) ) ), res ); slist = slist->next; } return res; }
/*---------------------------------------------------------------------*/ static obj_t tm_to_date( struct tm *tm ) { obj_t date; date = GC_MALLOC_ATOMIC( BGL_DATE_SIZE ); date->date_t.header = MAKE_HEADER( DATE_TYPE, 0 ); date->date_t.timezone = BGL_TIMEZONE; date->date_t.sec = tm->tm_sec; date->date_t.min = tm->tm_min; date->date_t.hour = tm->tm_hour; date->date_t.mday = tm->tm_mday; date->date_t.mon = tm->tm_mon + 1; date->date_t.year = tm->tm_year + 1900; date->date_t.wday = tm->tm_wday + 1; date->date_t.yday = tm->tm_yday + 1; date->date_t.isdst = tm->tm_isdst; return BREF( date ); }