Beispiel #1
0
  void MethodTable::Info::show(STATE, Object* self, int level) {
    MethodTable* tbl = as<MethodTable>(self);
    size_t size = tbl->bins()->to_native();

    if(size == 0) {
      class_info(state, self, true);
      return;
    }

    class_info(state, self);
    std::cout << ": " << size << std::endl;
    indent(++level);
    for(size_t i = 0; i < size; i++) {
      MethodTableBucket* entry = try_as<MethodTableBucket>(tbl->values()->at(state, i));

      while(entry) {
       if(Symbol* sym = try_as<Symbol>(entry->name())) {
          std::cout << ":" << sym->debug_str(state);
        } else if(Fixnum* fix = try_as<Fixnum>(entry->name())) {
          std::cout << fix->to_native();
        }
        entry = try_as<MethodTableBucket>(entry->next());
      }
      if(i < size - 1) std::cout << ", ";
    }
    std::cout << std::endl;
    close_body(level);
  }
Beispiel #2
0
  void Array::Info::show(STATE, Object* self, int level) {
    Array* ary = as<Array>(self);
    native_int size = ary->size();
    native_int stop = size < 5 ? size : 5;

    if(size == 0) {
      class_info(state, self, true);
      return;
    }

    class_info(state, self);
    std::cout << ": " << size << std::endl;
    ++level;
    for(native_int i = 0; i < stop; i++) {
      indent(level);
      Object* obj = ary->get(state, i);
      if(obj == ary) {
        class_info(state, obj, true);
      } else {
        obj->show(state, level);
      }
    }
    if(ary->size() > stop) ellipsis(level);
    close_body(level);
  }
Beispiel #3
0
  void Tuple::Info::show_simple(STATE, Object* self, int level) {
    Tuple* tup = as<Tuple>(self);
    native_int size = tup->num_fields();
    native_int stop = size < 6 ? size : 6;

    if(size == 0) {
      class_info(state, self, true);
      return;
    }

    class_info(state, self);
    std::cout << ": " << size << std::endl;
    ++level;
    for(native_int i = 0; i < stop; i++) {
      indent(level);
      Object* obj = tup->at(state, i);
      if(Tuple* t = try_as<Tuple>(obj)) {
        class_info(state, self);
        std::cout << ": " << t->num_fields() << ">" << std::endl;
      } else {
        obj->show_simple(state, level);
      }
    }
    if(tup->num_fields() > stop) ellipsis(level);
    close_body(level);
  }
Beispiel #4
0
  void SendSite::Info::show(STATE, Object* self, int level) {
    SendSite* ss = as<SendSite>(self);

    class_header(state, self);
    indent_attribute(++level, "name"); ss->name()->show(state, level);
    indent_attribute(level, "sender"); class_info(state, ss->sender(), true);
    indent_attribute(level, "selector"); class_info(state, ss->selector(), true);
    indent_attribute(level, "hits"); std::cout << ss->hits << std::endl;
    indent_attribute(level, "misses"); std::cout << ss->misses << std::endl;
    indent_attribute(level, "module"); class_info(state, ss->module(), true);
    indent_attribute(level, "method"); class_info(state, ss->method(), true);
    indent_attribute(level, "recv_class"); class_info(state, ss->recv_class(), true);
    close_body(level);
  }
Beispiel #5
0
Var Interpreter::update_Callable( Var callable, Var varargs ) {
    // -> new Callable[ surdef_list, self_type, parm_type ]
    TypeInfo *type = type_info( callable.type_expr() );
    if ( isa_Void( type->parameters[ 2 ] ) ) {
        // -> no previously defined parms
        Expr n_data = concat( callable.expr(), pointer_on( varargs.expr() ) );
        Var varargs_type = type_of( varargs );


        // -> Callable[ surdef_list, self_type, parm_type ]
        Var *parms[ 3 ];
        parms[ 0 ] = &type->parameters[ 0 ];
        parms[ 1 ] = &type->parameters[ 1 ];
        parms[ 2 ] = &varargs_type;

        Var res( type_for( class_info( class_Callable ), parms ), n_data );
        res.add_ref_from( callable );
        res.add_ref( callable.expr().size_in_bits(), varargs );
        return res;
    }
    //
    PRINT( type->parameters[ 2 ] );
    TODO;
    return error_var;
}
Beispiel #6
0
Var Interpreter::make_Callable( Vec<Var> lst, Var self ) {
    // remove doubles
    for( int i = 0; i < lst.size(); ++i )
        for( int j = i + 1; j < lst.size(); ++j )
            if ( lst[ i ].expr() == lst[ j ].expr() )
                lst.remove_unordered( j-- );

    //
    Expr surdef_list_data = cst( SI32( lst.size() ) );
    for( int i = 0; i < lst.size(); ++i )
        surdef_list_data = concat( surdef_list_data, pointer_on( lst[ i ].expr() ) );
    Var surdef_list( &type_SurdefList, surdef_list_data );

    //
    Var self_type = type_of( self ); // returns void if self is not defined

    // -> Callable[ surdef_list, self_type, parm_type ]
    Var *parms[ 3 ];
    parms[ 0 ] = &surdef_list;
    parms[ 1 ] = &self_type;
    parms[ 2 ] = &void_var;

    Var *callable_type = type_for( class_info( class_Callable ), parms );
    return Var( callable_type, self ? pointer_on( self.expr() ) : cst() ).add_ref( 0, self );
}
Beispiel #7
0
int
main (int argc, char *argv[])
{
  int opcode;
  int err_code;

  if (argc < 2)
    return 1;

  opcode = atoi (argv[1]);

  switch (opcode)
    {
    case EMS_SA_CLASS_INFO:
      err_code = class_info (argc, argv, 2);
      break;
    case EMS_SA_DBMT_USER_LOGIN:
      err_code = dbmt_user_login (argc, argv, 2);
      break;
    default:
      err_code = 1;
      break;
    }

  return err_code;
}
Beispiel #8
0
void InstanceClass::set_verified() {
  ClassInfo::Raw info = class_info();
  info().set_is_verified();
#if !ENABLE_ISOLATES
  JavaClassObj::Raw mirror = java_mirror();
  mirror().set_verified();
#endif
}
Beispiel #9
0
  void Module::Info::show(STATE, Object* self, int level) {
    Module* mod = as<Module>(self);

    class_header(state, self);
    indent_attribute(++level, "name"); mod->name()->show(state, level);
    indent_attribute(level, "superclass"); class_info(state, mod->superclass(), true);
    indent_attribute(level, "constants"); mod->constants()->show(state, level);
    indent_attribute(level, "method_table"); mod->method_table()->show(state, level);
    close_body(level);
  }
Beispiel #10
0
  void LookupTable::Info::show(STATE, Object* self, int level) {
    LookupTable* tbl = as<LookupTable>(self);
    size_t size = tbl->entries()->to_native();
    Array* keys = tbl->all_keys(state);

    if(size == 0) {
      class_info(state, self, true);
      return;
    }

    class_info(state, self);
    std::cout << ": " << size << std::endl;
    indent(++level);
    for(size_t i = 0; i < size; i++) {
      std::cout << ":" << as<Symbol>(keys->get(state, i))->c_str(state);
      if(i < size - 1) std::cout << ", ";
    }
    std::cout << std::endl;
    close_body(level);
  }
Beispiel #11
0
bool InstanceClass::is_verified() {
  ClassInfo::Raw info = class_info();
  bool result = info().is_verified();

#if !ENABLE_ISOLATES && defined(AZZERT)
  // Verify that the flag in ClassInfo is in-sync with the mirror object 
  JavaClassObj::Raw mirror = java_mirror();
  GUARANTEE(mirror().is_verified() == result, "sanity");
#endif

  return result;
}
Beispiel #12
0
  void MethodTable::Info::show(STATE, Object* self, int level) {
    MethodTable* tbl = as<MethodTable>(self);
    size_t size = tbl->entries()->to_native();
    Array* names = tbl->all_names(state);

    if(size == 0) {
      class_info(state, self, true);
      return;
    }

    class_info(state, self);
    std::cout << ": " << size << std::endl;
    indent(++level);
    for(size_t i = 0; i < size; i++) {
      if(Symbol* sym = try_as<Symbol>(names->get(state, i))) {
        std::cout << ":" << sym->c_str(state);
      } else if(Fixnum* fix = try_as<Fixnum>(names->get(state, i))) {
        std::cout << fix->to_native();
      }
      if(i < size - 1) std::cout << ", ";
    }
    std::cout << std::endl;
    close_body(level);
  }
Beispiel #13
0
Var *Interpreter::_make_varargs_type( const Vec<Var> &uv_args, const Vec<Var> &nv_args, const Vec<int> &nv_name, int off ) {
    // class VarargsItemEnd
    if ( off >= uv_args.size() + nv_args.size() )
        return &type_VarargsItemEnd;

    // class VarargsItemBeg[ data_type, data_name, next_type ]
    Var data_type = type_of( off >= uv_args.size() ? nv_args[ off - uv_args.size() ] : uv_args[ off ] );
    Var data_name( &type_SI32, cst( off >= uv_args.size() ? nv_name[ off - uv_args.size() ] : -1 ) );

    Var *parms[ 3 ];
    parms[ 0 ] = &data_type;
    parms[ 1 ] = &data_name;
    parms[ 2 ] = _make_varargs_type( uv_args, nv_args, nv_name, off + 1 );
    return type_for( class_info( class_VarargsItemBeg ), parms );
}
Beispiel #14
0
 void PackedObject::Info::show_simple(STATE, Object* self, int level) {
   class_info(state, self, true);
   return;
 }
Beispiel #15
0
CallableInfo *Interpreter::callable_info( const Expr &callable_ptr ) {
    if ( CallableInfo *ci = class_info( callable_ptr, false ) ) return ci;
    if ( CallableInfo *ci =   def_info( callable_ptr, false ) ) return ci;
    return 0;
}
Beispiel #16
0
 void TypeInfo::show_simple(STATE, Object* self, int level) {
   class_info(state, self, true);
 }
Beispiel #17
0
 void TypeInfo::class_header(STATE, const Object* self) {
   class_info(state, self);
   std::cout << "\n";
 }
Beispiel #18
0
ClassInfo *Interpreter::class_info( const Var &class_var ) {
    return class_info( pointer_on( class_var.expr() ) );
}
Beispiel #19
0
void Interpreter::_update_base_type_from_class_expr( Var type, Expr class_expr ) {
    Expr type_expr = pointer_on( class_expr ); // no parameters.
    type.data->ptr = new RefExpr( type_expr );
    type_for( class_info( pointer_on( class_expr ) ) ); ///< fill type_info_map
}