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

slotsMapDeps.h

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

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

# pragma interface

class slotsMapDeps: public slotsMap {
 protected:
  nmln _add_slot_dependents;
  nmln _map_chain;
  nmln *dependents;

 public:
  nmln *add_slot_dependents() { return &_add_slot_dependents; }
  nmln *map_chain() { return &_map_chain; }

  // Don't canonicalize the map for the empty object!
  // Otherwise, programs that add slots to the empty object will
  // invalidate a bunch of stuff that has an empty object on the lookup
  // path. -- dmu 12/5/92
  // Also, bootstrapping may break if you canonicalize empties.
  virtual bool should_canonicalize()   { return slots_length != smiOop_zero; }
  
  // this is called from read_snapshot so don't init dependents
  // must be public because superclass has a public one
  Map* initialize() {
    Memory->new_gen->add_map(this);
    map_chain()->init(); // maps are recanonicalized at end of startup
    return this; }

 protected:
  // chain functions
  friend int32 map_chain_offset() {
    return (int32) (((slotsMapDeps*) NULL)->map_chain());
  }

  friend slotsMapDeps* map_from_map_chain(nmln* p) {
    return (slotsMapDeps*) (int32(p) - map_chain_offset());
  }
  
 public:
  oop define(oop obj, oop contents);

  virtual slotDesc* slots()   { return (slotDesc*) (this + 1); }

 protected:
  void switch_pointer_in_map_slot(slotDesc *s, oop* where, oop to);
  void shift_obj_slots(smiOop offset, fint delta);

 public:
  // creation operations
  friend slotsOop create_slots(slotList* slots, char* annotation = "");
  oop fill_in_slots(slotList* slist, fint slotCount);
  
  // map chain and dependents
  void shift_map(Map* target);
  void forward_map(Map* oldMap);
  void delete_map();

  // dependents operations
  virtual bool can_have_dependents() { return true; }
  bool has_slot_dependents() { return dependents != NULL; }
  nmln *dependents_for_slot(slotDesc *);
  void moveDeps(nmln* newDeps, int32 delta);

  void init_dependents();
  bool verify_dependents();
  void deallocate_slot_dependents();

  // memory operations
  void fixup() { // after snapshot: do this
    if (!okToUseCodeFromSnapshot) init_dependents();
    initialize(); }
};


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