changeset 22309:78ebf3cda0b5

Merging the test to justify ae5c160bd047 fix
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Thu, 15 Oct 2015 09:42:50 +0200
parents d9b3e229ee46 (diff) 453f43971ca1 (current diff)
children 1d60440b03a8
files
diffstat 6 files changed, 31 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java	Thu Oct 15 09:41:31 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java	Thu Oct 15 09:42:50 2015 +0200
@@ -169,8 +169,13 @@
             return this;
         }
 
+        @Deprecated
         public EnumSet<ImplicitCast> getAllowedImplicitCasts() {
             return allowedImplicitCasts;
         }
     }
+
+    protected static EnumSet<ImplicitCast> getAllowedImplicitCasts(Builder builder) {
+        return builder.allowedImplicitCasts;
+    }
 }
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java	Thu Oct 15 09:41:31 2015 +0200
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java	Thu Oct 15 09:42:50 2015 +0200
@@ -499,10 +499,10 @@
             }
         });
         exceptionCheck(result);
-        return createValue(lang[0], result, ready);
+        return createValue(lang, result, ready);
     }
 
-    Value createValue(TruffleLanguage lang, Object[] result, CountDownLatch ready) {
+    Value createValue(TruffleLanguage[] lang, Object[] result, CountDownLatch ready) {
         return new Value(lang, result, ready);
     }
 
@@ -583,7 +583,7 @@
         } else {
             ready.countDown();
         }
-        return obj[0] == null ? null : createValue(lang[0], obj, ready);
+        return obj[0] == null ? null : createValue(lang, obj, ready);
     }
 
     private void findGlobalSymbolImpl(Object[] obj, String globalName, TruffleLanguage<?>[] lang, CountDownLatch ready) {
@@ -675,12 +675,12 @@
      * running on behind.
      */
     public class Value {
-        private final TruffleLanguage<?> language;
+        private final TruffleLanguage<?>[] language;
         private final Object[] result;
         private final CountDownLatch ready;
         private CallTarget target;
 
-        Value(TruffleLanguage<?> language, Object[] result, CountDownLatch ready) {
+        Value(TruffleLanguage<?>[] language, Object[] result, CountDownLatch ready) {
             this.language = language;
             this.result = result;
             this.ready = ready;
@@ -729,8 +729,12 @@
                 }
             }
             if (representation == String.class) {
-                final Class<? extends TruffleLanguage> clazz = language.getClass();
-                return representation.cast(SPI.toString(language, findEnv(clazz), obj));
+                final Class<? extends TruffleLanguage> clazz = language[0].getClass();
+                Object unwrapped = obj;
+                while (unwrapped instanceof EngineTruffleObject) {
+                    unwrapped = ((EngineTruffleObject) obj).getDelegate();
+                }
+                return representation.cast(SPI.toString(language[0], findEnv(clazz), unwrapped));
             }
             if (representation.isInstance(obj)) {
                 return representation.cast(obj);
@@ -773,8 +777,8 @@
             try (final Closeable c = SPI.executionStart(PolyglotEngine.this, -1, debugger, null)) {
                 List<Object> arr = new ArrayList<>();
                 if (thiz == null) {
-                    if (language != null) {
-                        Object global = SPI.languageGlobal(SPI.findLanguage(PolyglotEngine.this, language.getClass()));
+                    if (language[0] != null) {
+                        Object global = SPI.languageGlobal(SPI.findLanguage(PolyglotEngine.this, language[0].getClass()));
                         if (global != null) {
                             arr.add(global);
                         }
@@ -786,7 +790,7 @@
                 for (;;) {
                     try {
                         if (target == null) {
-                            target = SymbolInvokerImpl.createCallTarget(language, result[0], arr.toArray());
+                            target = SymbolInvokerImpl.createCallTarget(language[0], result[0], arr.toArray());
                         }
                         res[0] = target.call(arr.toArray());
                         break;
@@ -891,7 +895,7 @@
             checkThread();
 
             Object[] res = {SPI.languageGlobal(getEnv(true)), null};
-            return res[0] == null ? null : new Value(info.getImpl(true), res, null);
+            return res[0] == null ? null : new Value(new TruffleLanguage[]{info.getImpl(true)}, res, null);
         }
 
         /**
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java	Thu Oct 15 09:41:31 2015 +0200
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java	Thu Oct 15 09:42:50 2015 +0200
@@ -135,7 +135,7 @@
     }
 
     @Override
-    Value createValue(TruffleLanguage lang, Object[] result, CountDownLatch ready) {
+    Value createValue(TruffleLanguage[] lang, Object[] result, CountDownLatch ready) {
         return new Symbol(lang, result, ready);
     }
 
@@ -172,7 +172,7 @@
 
     @Deprecated
     public class Symbol extends Value {
-        Symbol(TruffleLanguage<?> language, Object[] result, CountDownLatch ready) {
+        Symbol(TruffleLanguage<?>[] language, Object[] result, CountDownLatch ready) {
             super(language, result, ready);
         }
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeInstrument.java	Thu Oct 15 09:41:31 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeInstrument.java	Thu Oct 15 09:42:50 2015 +0200
@@ -28,9 +28,9 @@
 
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.frame.VirtualFrame;
-import com.oracle.truffle.api.impl.DefaultDirectCallNode;
 import com.oracle.truffle.api.nodes.DirectCallNode;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.NodeCost;
@@ -394,7 +394,8 @@
                     try {
                         final CallTarget callTarget = Instrumenter.ACCESSOR.parse(languageClass, source, node, NO_ARGS);
                         if (callTarget != null) {
-                            callNode = new DefaultDirectCallNode(callTarget);  // force inlining?
+                            callNode = Truffle.getRuntime().createDirectCallNode(callTarget);
+                            callNode.forceInlining();
                             adoptChildren();
                             EvalInstrument.this.probe.invalidateProbeUnchanged();
                         }
@@ -406,7 +407,7 @@
                 }
                 if (callNode != null) {
                     try {
-                        final Object result = callNode.call(vFrame, null);
+                        final Object result = callNode.call(vFrame, NO_ARGS);
                         if (evalListener != null) {
                             evalListener.onExecution(node, vFrame, result);
                         }
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicLayout.java	Thu Oct 15 09:41:31 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicLayout.java	Thu Oct 15 09:42:50 2015 +0200
@@ -23,6 +23,7 @@
 package com.oracle.truffle.object.basic;
 
 import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Layout;
 import com.oracle.truffle.api.object.Location;
 import com.oracle.truffle.api.object.ObjectLocation;
 import com.oracle.truffle.api.object.ObjectType;
@@ -34,6 +35,7 @@
 import com.oracle.truffle.object.Locations.DualLocation;
 import com.oracle.truffle.object.basic.BasicLocations.ObjectFieldLocation;
 import com.oracle.truffle.object.basic.BasicLocations.SimpleObjectFieldLocation;
+
 import java.util.EnumSet;
 
 public class BasicLayout extends LayoutImpl {
@@ -50,8 +52,8 @@
         this.objectArrayLocation = DynamicObjectBasic.OBJECT_ARRAY_LOCATION;
     }
 
-    static LayoutImpl createLayoutImpl(EnumSet<ImplicitCast> allowedImplicitCasts, LayoutStrategy strategy) {
-        return new BasicLayout(allowedImplicitCasts, strategy);
+    static LayoutImpl createLayoutImpl(Layout.Builder builder, LayoutStrategy strategy) {
+        return new BasicLayout(getAllowedImplicitCasts(builder), strategy);
     }
 
     @Override
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DefaultLayoutFactory.java	Thu Oct 15 09:41:31 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DefaultLayoutFactory.java	Thu Oct 15 09:42:50 2015 +0200
@@ -30,7 +30,7 @@
 
 public class DefaultLayoutFactory implements LayoutFactory {
     public Layout createLayout(Layout.Builder layoutBuilder) {
-        return BasicLayout.createLayoutImpl(layoutBuilder.getAllowedImplicitCasts(), new DefaultStrategy());
+        return BasicLayout.createLayoutImpl(layoutBuilder, new DefaultStrategy());
     }
 
     public Property createProperty(Object id, Location location) {