Main Page   Class Hierarchy   Compound List   File List   Header Files   Compound Members   File Members  

slotsMap.h

This is the verbatim text of the slotsMap.h include file.
/* Sun-$Revision: 23.3 $ */

/* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University.
   See the LICENSE file for license information. */

# pragma interface

class slotsMap: public Map {
 public:
  // instance variables
  smiOop object_length;
  smiOop slots_length;
 protected:
  oop annotation;

 public:  
  // testers
  bool is_slots()              { return true; }
  bool is_programmable_slots() { return true; }

  // programming operations
  oop copy_add_slot(oop obj, stringOop name, slotType t, oop contents,
                    oop anno, bool mustAllocate= false);
  oop copy_remove_slot(oop obj, stringOop name, bool mustAllocate= false);

  // accessors
  oop  get_annotation() { return annotation; }
  void set_annotation(oop a) {Memory->store(&annotation, a); }

 protected:
  slotsMap* copy_for_changing(bool mustAllocate= true);

  oop copy_add_argument_slot(slotsOop obj, stringOop name, slotType t,
                             oop cont, oop anno, bool mustAllocate= false);
  oop copy_add_assignment_slot(slotsOop obj, stringOop name, slotType t,
                               oop anno, bool mustAllocate= false);
  oop copy_add_new_assignment_slot(slotsOop obj, stringOop name, slotType t,
                                   oop anno, bool mustAllocate= false);
  oop copy_add_method_slot(slotsOop obj, stringOop name, slotType t, oop cont,
                           oop anno, bool mustAllocate= false);
  oop copy_add_data_slot(slotsOop obj, stringOop name, slotType t, 
                         oop cont, oop anno, bool mustAllocate= false);
  slotsOop copy_remove_one_slot(slotsOop obj, slotDesc *slot,
                                bool mustAllocate= false);

  slotsOop copy_add_new_slot(slotsOop obj, stringOop name, slotType t, 
                             oop cont, oop anno, bool mustAllocate= false);

 public:
  virtual oop change_slot(oop obj, slotDesc *s, slotType t, oop contents, 
                          oop anno, bool mustAllocate= true);

  void switch_pointer(oop obj, oop* where, oop to);
  virtual void switch_pointer_in_map(oop* where, oop to);

  virtual fint size() {
    return (oop*) (slots() + length_slots()) - (oop*) this; }

  virtual slotDesc* slots()   { return (slotDesc*) (this + 1); }
  fint length_slots()         { return slots_length->value(); }

 protected:
  // for insertions and deletions
  virtual void shift_obj_slots(smiOop offset, fint delta);
  
  // dependents
  virtual void init_dependents() {}

 public:
  // cloning operations
  oop clone(oop obj, bool mustAllocate= true, oop genObj= NULL);
  bool can_inline_clone() { return true; }
  oop cloneSize(oop obj, fint length, bool mustAllocate= true,
                oop filler= NULL);
  
  // creation operations
  virtual oop fill_in_slots(slotList* slist, fint slotCount);
  // create_object sets only the mark, not the map.
  virtual slotsOop create_object(fint size) { return create_slots(size); }
  
  // size operations
  fint object_size(oop obj) { Unused(obj); return object_length->value(); }
  fint empty_vector_object_size() { return object_length->value(); }
  fint empty_object_size();
  
  // mirror operation
  mirrorOop mirror_proto() { return Memory->slotsMirrorObj; }

  // annotation primitives
  oop mirror_copy_set_annotation(oop obj, oop a,  bool mustAllocate= false);

  // profiler operation, initialize instance variables
  virtual void dummy_initialize(oop obj, oop filler);

 public:
  
  // memory operations
  virtual oop scavenge(oop obj);
  bool verify(oop obj);
  
  // printing operations
  void print(oop obj);

  // profiler operation
  oop dummy_obj(oop filler);

  // enumerating
  virtual bool is_enumerable(oop obj, oop* matching_cell) {
    return  matching_cell  >=  slotsOop(obj)->oops() + empty_object_size(); }
};


Generated at Tue Jun 27 12:17:31 2000 for SelfVM by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999