00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 # include "incls/_precompiled.incl"
00025 # include "incls/_mixinKlass.cpp.incl"
00026
00027 void set_mixinKlass_vtbl(Klass* k) {
00028 mixinKlass o;
00029 k->set_vtbl_value(o.vtbl_value());
00030 }
00031
00032 oop mixinKlass::allocateObject() {
00033 klassOop k = as_klassOop();
00034 int size = non_indexable_size();
00035
00036 mixinOop obj = as_mixinOop(Universe::allocate(size, (memOop*)&k));
00037
00038 memOop(obj)->initialize_header(true, k);
00039 memOop(obj)->initialize_body(memOopDesc::header_size(), size);
00040 objArrayOop filler = oopFactory::new_objArray(0);
00041 obj->set_methods(filler);
00042 obj->set_instVars(filler);
00043 obj->set_classVars(filler);
00044 obj->set_installed(falseObj);
00045 return obj;
00046 }
00047
00048 klassOop mixinKlass::create_subclass(mixinOop mixin, Format format) {
00049 if (format == mem_klass || format == mixin_klass) {
00050 return mixinKlass::create_class(as_klassOop(), mixin);
00051 }
00052 return NULL;
00053 }
00054
00055 klassOop mixinKlass::create_class(klassOop super_class, mixinOop mixin) {
00056 mixinKlass o;
00057 return create_generic_class(super_class, mixin, o.vtbl_value());
00058 }
00059
00060 oop mixinKlass::oop_shallow_copy(oop obj, bool tenured) {
00061 mixinOop copy = mixinOop(memOopKlass::oop_shallow_copy(obj, tenured));
00062 copy->set_installed(falseObj);
00063 return copy;
00064 }
00065
00066 int mixinKlass::oop_scavenge_contents(oop obj) {
00067 int size = non_indexable_size();
00068
00069 memOop(obj)->scavenge_header();
00070 memOop(obj)->scavenge_body(memOopDesc::header_size(), size);
00071 return size;
00072 }
00073
00074 int mixinKlass::oop_scavenge_tenured_contents(oop obj) {
00075 int size = non_indexable_size();
00076
00077 memOop(obj)->scavenge_tenured_header();
00078 memOop(obj)->scavenge_tenured_body(memOopDesc::header_size(), size);
00079 return size;
00080 }
00081
00082 void mixinKlass::oop_follow_contents(oop obj) {
00083
00084 memOop(obj)->follow_header();
00085 memOop(obj)->follow_body(memOopDesc::header_size(), non_indexable_size());
00086 }
00087
00088 void mixinKlass::oop_layout_iterate(oop obj, ObjectLayoutClosure* blk) {
00089
00090 memOop(obj)->layout_iterate_header(blk);
00091 blk->do_oop("methods", (oop*)&mixinOop(obj)->addr()->_methods);
00092 blk->do_oop("instVars", (oop*)&mixinOop(obj)->addr()->_inst_vars);
00093 blk->do_oop("classVars", (oop*)&mixinOop(obj)->addr()->_class_vars);
00094 blk->do_oop("primary invocation", (oop*)&mixinOop(obj)->addr()->_primary_invocation);
00095 blk->do_oop("class mixin", (oop*)&mixinOop(obj)->addr()->_class_mixin);
00096
00097 memOop(obj)->layout_iterate_body(blk, mixinOopDesc::header_size(), non_indexable_size());
00098 }
00099
00100 void mixinKlass::oop_oop_iterate(oop obj, OopClosure* blk) {
00101
00102 memOop(obj)->oop_iterate_header(blk);
00103 memOop(obj)->oop_iterate_body(blk, memOopDesc::header_size(), non_indexable_size());
00104 }