# HG changeset patch # User Andreas Woess # Date 1442929789 -7200 # Node ID 21863e2a1d344829870b1d8e748151e6029d3225 # Parent 4eb6f179a326b6869377a030be0911b26241f524 api.object: remove BaseLocation interface diff -r 4eb6f179a326 -r 21863e2a1d34 truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/BaseLocation.java --- 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; -} diff -r 4eb6f179a326 -r 21863e2a1d34 truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java --- 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; } diff -r 4eb6f179a326 -r 21863e2a1d34 truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/TypedLocation.java --- 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. */