diff truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java @ 22182:21863e2a1d34

api.object: remove BaseLocation interface
author Andreas Woess <andreas.woess@oracle.com>
date Tue, 22 Sep 2015 15:49:49 +0200
parents dc83cc1f94f2
children dd0b18eb8000
line wrap: on
line diff
--- 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;
     }