/* Sun-$Revision: 23.4 $ */ /* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University. See the LICENSE file for license information. */ # pragma interface class mirrorOopClass: public slotsOopClass { protected: oop _reflectee; mirrorOopClass* addr() {return (mirrorOopClass*)slotsOopClass::addr();} public: mirrorOop clone(bool mustAllocate= true) { return (mirrorOop) slotsOopClass::clone(mustAllocate); } oop reflectee() { return addr()->_reflectee;} mirrorOop set_reflectee(oop r) { Memory->store(&addr()->_reflectee, r); return this;} friend oop as_mirror_prim(oop obj); oop codes_prim() { return reflectee()->mirror_codes(); } oop literals_prim() { return reflectee()->mirror_literals(); } oop source_prim() { return reflectee()->mirror_source(); } oop source_offset_prim() { return reflectee()->mirror_source_offset();} oop source_length_prim() { return reflectee()->mirror_source_length();} oop file_prim() { return reflectee()->mirror_file(); } oop line_prim() { return reflectee()->mirror_line(); } oop size_prim() { return as_smiOop(reflectee()->byte_size());} oop get_reflectee_prim() { return reflectee()->mirror_reflectee(); } oop names_prim() { return reflectee()->mirror_names(); } oop name_at_prim(smi inx) { return reflectee()->mirror_name_at(inx); } oop contents_at_prim(stringOop n) { return reflectee()->mirror_contents_at(n); } oop is_parent_at_prim(stringOop n) { return reflectee()->mirror_is_parent_at(n); } oop is_argument_at_prim(stringOop n) { return reflectee()->mirror_is_argument_at(n); } oop is_assignable_at_prim(stringOop n) { return reflectee()->mirror_is_assignable_at(n); } // programming primitives oop define_prim(mirrorOop contMir, void *FH); oop copy_add_slot_prim(stringOop name, mirrorOop contMirror, bool isP, bool isA, oop anno, void *FH); oop copy_remove_prim(stringOop name, void *FH); oop evaluate_in_context_prim(mirrorOop methodMirror); void switch_reflectee(oop* where, oop to); oop create_block_prim() { // mirror contains block method return slotsOop(reflectee())->create_block_prim(); } // annotation primitives oop get_annotation_prim() { return reflectee()->mirror_get_annotation() ; } oop copy_set_annotation_prim(oop a, void *FH); oop annotation_at_prim(stringOop n) { return reflectee()->mirror_annotation_at(n); } // activation mirror primitives public: oop sender_prim() { return reflectee()->mirror_sender(); } oop parent_prim() { return reflectee()->mirror_parent(); } oop receiver_prim() { return reflectee()->mirror_receiver(); } oop expr_stack_prim() { return reflectee()->mirror_expr_stack(); } oop methodHolder_prim() { return reflectee()->mirror_methodHolder();} oop selector_prim() { return reflectee()->mirror_selector(); } oop bci_prim() { return reflectee()->mirror_bci(); } }; oop reflectee_eq_prim(mirrorOop rcvr, oop anotherMirror); oop reflectee_id_hash_prim(mirrorOop rcvr);