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

proxyOop.h

This is the verbatim text of the proxyOop.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

// "Foreign" oops (below) are killable objects containing an arbitrary 
// A proxyOop is a foreignOop that associate a type with the pointer
// to a C structure (in foreignOopClass). Note that a dead proxyOop is
// designated by a special value in the type_seal field, so if the user for
// some reason tries to store this exact value here, he will be badly
// surprised.
// Also note that a dead proxy becomes live if given a (new) type seal.


extern const void *deadProxyObject; // Do not use directly. Placed here only to
                                    // enable inlining of member fct's.
                                    // This const is stored in the type_seal 
                                    // field to indicate when a proxy is dead.



class proxyOopClass: public foreignOopClass {

  private:

    C_pointer  type_seal; // type of object in C heap pointed to by my parent

  protected:

    proxyOopClass* addr() { 
      return (proxyOopClass*)foreignOopClass::addr(); 
    }

    void kill_proxy() {
      // Don't call this function. Call kill() instead.
      set_pointer(NULL);    /* Just a precaution. */
      set_type_seal(deadProxyObject);
    }

    bool is_live_proxy() {
      // Don't call this function. Call is_live() instead.
      assert_smi(deadProxyObject, "deadProxyObject should be a smi");
      return get_type_seal() != deadProxyObject;
    }

  public:
    void* get_type_seal() { 
      return addr()->type_seal.get();
    }

    void set_type_seal(const void *ptr) {
      addr()->type_seal.set(ptr);
    }

    proxyOop clone(bool mustAllocate= true) { 
      return (proxyOop) foreignOopClass::clone(mustAllocate); 
    }

    bool verify();

  friend class proxyMap;
};

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