Example #1
0
/*---------------------------------------------------------------------*/
void *
bgl_debug_trace_top() {
   obj_t env = BGL_CURRENT_DYNAMIC_ENV();
   
#if !BMEMDEBUG
   if( !env ) {
      goto unknown;
   } else {
      struct bgl_dframe *top = BGL_ENV_GET_TOP_OF_FRAME( env );

      if( !top ) goto unknown;
      if( !SYMBOLP( top->name ) ) goto unknown;
      
      return top->name;
   }

 unknown:
   {
      /* if we see no trace in a stack (or no stack at all) we */
      /* check we are running a asynchronous fair-thread.      */
      void *th = bmem_thread ? ____bglthread_id_get() : 0;
      
      if( SYMBOLP( th ) )
	 return th;
      else
	 return BUNSPEC;
   }
}
Example #2
0
/*---------------------------------------------------------------------*/
BGL_RUNTIME_DEF obj_t
get_trace_stack( int depth ) {
   long level = 0L;
   struct bgl_dframe *runner = BGL_ENV_GET_TOP_OF_FRAME( BGL_CURRENT_DYNAMIC_ENV() );
   obj_t l = MAKE_PAIR( BNIL, BNIL );
   obj_t r = l;

   while( ((depth < 0) || (level < depth)) && runner ) {
      if( SYMBOLP( runner->name ) ) {
	 obj_t p = MAKE_PAIR( runner->name, MAKE_PAIR( runner->location, BNIL ) );
	 SET_CDR( r, MAKE_PAIR( p, BNIL ) );
	 r = CDR( r );
	 level++; 
      }
      
      runner = runner->link;
   }
   
   return CDR( l );
}
Example #3
0
/*---------------------------------------------------------------------*/
void *
bgl_debug_trace() {
   return  BGL_ENV_GET_TOP_OF_FRAME( BGL_CURRENT_DYNAMIC_ENV() );
}