changeset 18747:6db7923af642

OM: DynamicObject extends TruffleObject, add default implementation
author Matthias Grimmer <grimmer@ssw.jku.at>
date Tue, 23 Dec 2014 12:13:14 +0100
parents 5294b624e2f0
children 3d6e630a72f1
files graal/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/DynamicObject.java graal/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/ObjectType.java graal/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java graal/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java
diffstat 4 files changed, 29 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/DynamicObject.java	Tue Dec 23 11:56:08 2014 +0100
+++ b/graal/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/DynamicObject.java	Tue Dec 23 12:13:14 2014 +0100
@@ -25,8 +25,9 @@
 package com.oracle.truffle.api.object;
 
 import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.interop.*;
 
-public interface DynamicObject extends TypedObject {
+public interface DynamicObject extends TypedObject, TruffleObject {
     /**
      * Get the object's current shape.
      */
--- a/graal/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/ObjectType.java	Tue Dec 23 11:56:08 2014 +0100
+++ b/graal/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/ObjectType.java	Tue Dec 23 12:13:14 2014 +0100
@@ -24,7 +24,11 @@
  */
 package com.oracle.truffle.api.object;
 
+import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.interop.*;
+import com.oracle.truffle.api.interop.exception.*;
+import com.oracle.truffle.api.interop.messages.*;
 
 public class ObjectType {
     /**
@@ -67,4 +71,17 @@
      */
     public void onPropertyAdded(Property property, Shape shapeBefore, Shape shapeAfter) {
     }
+
+    public ForeignAccessFactory getForeignAccessFactory() {
+        return new ForeignAccessFactory() {
+
+            public InteropPredicate getLanguageCheck() {
+                throw new AccessException(this.toString() + " cannot be shared");
+            }
+
+            public CallTarget getAccess(Message tree) {
+                throw new AccessException(this.toString() + " cannot be shared; Message not possible: " + tree.toString());
+            }
+        };
+    }
 }
--- a/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java	Tue Dec 23 11:56:08 2014 +0100
+++ b/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java	Tue Dec 23 12:13:14 2014 +0100
@@ -25,6 +25,7 @@
 import java.util.*;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.interop.*;
 import com.oracle.truffle.api.object.*;
 import com.oracle.truffle.object.Locations.ValueLocation;
 import com.oracle.truffle.object.debug.*;
@@ -361,4 +362,8 @@
     private static void trackObject(DynamicObject obj) {
         ShapeProfiler.getInstance().track(obj);
     }
+
+    public ForeignAccessFactory getForeignAccessFactory() {
+        return getShape().getForeignAccessFactory();
+    }
 }
--- a/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java	Tue Dec 23 11:56:08 2014 +0100
+++ b/graal/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java	Tue Dec 23 12:13:14 2014 +0100
@@ -27,6 +27,7 @@
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.interop.*;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.api.object.*;
 import com.oracle.truffle.api.utilities.*;
@@ -1099,4 +1100,8 @@
 
     protected static final DebugCounter propertyListAllocCount = DebugCounter.create("Property lists allocated");
     protected static final DebugCounter propertyListShareCount = DebugCounter.create("Property lists shared");
+
+    public ForeignAccessFactory getForeignAccessFactory() {
+        return getObjectType().getForeignAccessFactory();
+    }
 }