changeset 22182:21863e2a1d34

api.object: remove BaseLocation interface
author Andreas Woess <andreas.woess@oracle.com>
date Tue, 22 Sep 2015 15:49:49 +0200
parents 4eb6f179a326
children 2e7352f9ffa8
files truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/BaseLocation.java truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/TypedLocation.java
diffstat 3 files changed, 89 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/BaseLocation.java	Tue Sep 22 15:32:14 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.truffle.api.object;
-
-public interface BaseLocation {
-    /**
-     * Get object value as object at this location in store.
-     *
-     * @param shape the current shape of the object, which must contain this location
-     */
-    Object get(DynamicObject store, Shape shape);
-
-    /**
-     * Get object value as object at this location in store. For internal use only and subject to
-     * change, use {@link #get(DynamicObject, Shape)} instead.
-     *
-     * @param condition the result of a shape check or {@code false}
-     * @see #get(DynamicObject, Shape)
-     */
-    Object get(DynamicObject store, boolean condition);
-
-    /**
-     * Set object value at this location in store.
-     *
-     * @throws IncompatibleLocationException for storage type invalidations
-     * @throws FinalLocationException for effectively final fields
-     */
-    void set(DynamicObject store, Object value) throws IncompatibleLocationException, FinalLocationException;
-
-    /**
-     * Set object value at this location in store.
-     *
-     * @param shape the current shape of the storage object
-     * @throws IncompatibleLocationException for storage type invalidations
-     * @throws FinalLocationException for effectively final fields
-     */
-    void set(DynamicObject store, Object value, Shape shape) throws IncompatibleLocationException, FinalLocationException;
-
-    /**
-     * Set object value at this location in store and update shape.
-     *
-     * @param oldShape the shape before the transition
-     * @param newShape new shape after the transition
-     * @throws IncompatibleLocationException if value is of non-assignable type
-     */
-    void set(DynamicObject store, Object value, Shape oldShape, Shape newShape) throws IncompatibleLocationException;
-}
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java	Tue Sep 22 15:32:14 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java	Tue Sep 22 15:49:49 2015 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,7 +33,7 @@
  * @see Property
  * @see DynamicObject
  */
-public abstract class Location implements BaseLocation {
+public abstract class Location {
     protected static IncompatibleLocationException incompatibleLocation() throws IncompatibleLocationException {
         CompilerDirectives.transferToInterpreterAndInvalidate();
         throw new IncompatibleLocationException();
@@ -44,18 +44,53 @@
         throw new FinalLocationException();
     }
 
+    /**
+     * Get object value as object at this location in store.
+     *
+     * @param shape the current shape of the object, which must contain this location
+     */
     public final Object get(DynamicObject store, Shape shape) {
         return get(store, checkShape(store, shape));
     }
 
+    /**
+     * Get object value as object at this location in store. For internal use only and subject to
+     * change, use {@link #get(DynamicObject, Shape)} instead.
+     *
+     * @param condition the result of a shape check or {@code false}
+     * @see #get(DynamicObject, Shape)
+     */
     public Object get(DynamicObject store, boolean condition) {
         return getInternal(store);
     }
 
+    /**
+     * Get object value as object at this location in store.
+     *
+     * @param shape the current shape of the object, which must contain this location
+     */
+    public final Object get(DynamicObject store) {
+        return get(store, false);
+    }
+
+    /**
+     * Set object value at this location in store.
+     *
+     * @param shape the current shape of the storage object
+     * @throws IncompatibleLocationException for storage type invalidations
+     * @throws FinalLocationException for effectively final fields
+     */
     public void set(DynamicObject store, Object value, Shape shape) throws IncompatibleLocationException, FinalLocationException {
         setInternal(store, value);
     }
 
+    /**
+     * Set object value at this location in store and update shape.
+     *
+     * @param oldShape the shape before the transition
+     * @param newShape new shape after the transition
+     * @throws IncompatibleLocationException if value is of non-assignable type
+     */
     public final void set(DynamicObject store, Object value, Shape oldShape, Shape newShape) throws IncompatibleLocationException {
         if (canStore(value)) {
             store.setShapeAndGrow(oldShape, newShape);
@@ -69,6 +104,12 @@
         }
     }
 
+    /**
+     * Set object value at this location in store.
+     *
+     * @throws IncompatibleLocationException for storage type invalidations
+     * @throws FinalLocationException for effectively final fields
+     */
     public final void set(DynamicObject store, Object value) throws IncompatibleLocationException, FinalLocationException {
         set(store, value, null);
     }
@@ -131,6 +172,9 @@
     @Override
     public abstract boolean equals(Object obj);
 
+    /**
+     * Equivalent to {@link Shape#check(DynamicObject)}.
+     */
     protected static boolean checkShape(DynamicObject store, Shape shape) {
         return store.getShape() == shape;
     }
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/TypedLocation.java	Tue Sep 22 15:32:14 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/TypedLocation.java	Tue Sep 22 15:49:49 2015 +0200
@@ -27,7 +27,49 @@
 /**
  * A location that can store a value of a particular type.
  */
-public interface TypedLocation extends BaseLocation {
+public interface TypedLocation {
+    /**
+     * Get object value as object at this location in store.
+     *
+     * @param shape the current shape of the object, which must contain this location
+     */
+    Object get(DynamicObject store, Shape shape);
+
+    /**
+     * Get object value as object at this location in store. For internal use only and subject to
+     * change, use {@link #get(DynamicObject, Shape)} instead.
+     *
+     * @param condition the result of a shape check or {@code false}
+     * @see #get(DynamicObject, Shape)
+     */
+    Object get(DynamicObject store, boolean condition);
+
+    /**
+     * Set object value at this location in store.
+     *
+     * @throws IncompatibleLocationException for storage type invalidations
+     * @throws FinalLocationException for effectively final fields
+     */
+    void set(DynamicObject store, Object value) throws IncompatibleLocationException, FinalLocationException;
+
+    /**
+     * Set object value at this location in store.
+     *
+     * @param shape the current shape of the storage object
+     * @throws IncompatibleLocationException for storage type invalidations
+     * @throws FinalLocationException for effectively final fields
+     */
+    void set(DynamicObject store, Object value, Shape shape) throws IncompatibleLocationException, FinalLocationException;
+
+    /**
+     * Set object value at this location in store and update shape.
+     *
+     * @param oldShape the shape before the transition
+     * @param newShape new shape after the transition
+     * @throws IncompatibleLocationException if value is of non-assignable type
+     */
+    void set(DynamicObject store, Object value, Shape oldShape, Shape newShape) throws IncompatibleLocationException;
+
     /**
      * The type of this location.
      */