예제 #1
0
파일: profiler.c 프로젝트: glguy/factor
/* 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));
}
예제 #2
0
/*---------------------------------------------------------------------*/
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 );
}
예제 #3
0
/*---------------------------------------------------------------------*/
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;
}
예제 #4
0
파일: cdate.c 프로젝트: mbrock/bigloo-llvm
/*---------------------------------------------------------------------*/
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 );
}