001    /*
002     *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003     *
004     *  This file is licensed to You under the Eclipse Public License (EPL);
005     *  You may not use this file except in compliance with the License. You
006     *  may obtain a copy of the License at
007     *
008     *      http://www.opensource.org/licenses/eclipse-1.0.php
009     *
010     *  See the COPYRIGHT.txt file distributed with this work for information
011     *  regarding copyright ownership.
012     */
013    package org.vmmagic.unboxed;
014    
015    import org.vmmagic.Unboxed;
016    
017    /**
018     * The object reference type is used by the runtime system and collector to
019     * represent a type that holds a reference to a single object.
020     * We use a separate type instead of the Java Object type for coding clarity,
021     * to make a clear distinction between objects the VM is written in, and
022     * objects that the VM is managing. No operations that can not be completed in
023     * pure Java should be allowed on Object.
024     */
025    @Unboxed
026    public final class ObjectReference {
027    
028      /**
029       * The object field.
030       */
031      @SuppressWarnings("unused")
032      private Object data;
033    
034      /**
035       * Convert from an object to a reference.
036       * @param obj The object
037       * @return The corresponding reference
038       */
039      public static ObjectReference fromObject(Object obj) {
040        return null;
041      }
042    
043      /**
044       * Return a {@code null} reference
045       */
046      public static ObjectReference nullReference() {
047        return null;
048      }
049    
050      /**
051       * Convert from an reference to an object. Note: this is a JikesRVM
052       * specific extension to vmmagic.
053       * @return The object
054       */
055      public Object toObject() {
056        return null;
057      }
058    
059      /**
060       * Get a heap address for the object.
061       */
062      public Address toAddress() {
063        return null;
064      }
065    
066      /**
067       * Is this a null reference?
068       */
069      public boolean isNull() {
070        return false;
071      }
072    }