diff truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java @ 22123:329fe954f6f2

Can compile Truffle API with following javac lints: -Xlint:all,-auxiliaryclass,-try,-processing
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 02 Sep 2015 13:15:51 +0200
parents 6203830a4f9a
children dc83cc1f94f2
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java	Wed Sep 02 10:54:29 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java	Wed Sep 02 13:15:51 2015 +0200
@@ -24,8 +24,6 @@
  */
 package com.oracle.truffle.api.interop;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
 
@@ -34,101 +32,3 @@
     public abstract Object executeWith(VirtualFrame frame, TruffleObject receiver, Object[] arguments);
 
 }
-
-class UnresolvedObjectAccessNode extends ObjectAccessNode {
-
-    private static final int CACHE_SIZE = 8;
-    private int cacheLength = 1;
-
-    @Override
-    public Object executeWith(VirtualFrame frame, TruffleObject receiver, Object[] arguments) {
-        CompilerDirectives.transferToInterpreterAndInvalidate();
-        ForeignObjectAccessHeadNode nthParent = (ForeignObjectAccessHeadNode) NodeUtil.getNthParent(this, cacheLength);
-        ObjectAccessNode first = nthParent.getFirst();
-        if (cacheLength < CACHE_SIZE) {
-            CachedObjectAccessNode createCachedAccess = createCachedAccess(receiver, nthParent.getAccessTree(), first);
-            cacheLength++;
-            return first.replace(createCachedAccess).executeWith(frame, receiver, arguments);
-        } else {
-            return first.replace(createGenericAccess(nthParent.getAccessTree())).executeWith(frame, receiver, arguments);
-        }
-    }
-
-    private static CachedObjectAccessNode createCachedAccess(TruffleObject receiver, Message accessTree, ObjectAccessNode next) {
-        ForeignAccess fa = receiver.getForeignAccess();
-        final CallTarget ct = fa.access(accessTree);
-        if (ct == null) {
-            throw new IllegalArgumentException("Message " + accessTree + " not recognized by " + fa);
-        }
-        return new CachedObjectAccessNode(Truffle.getRuntime().createDirectCallNode(ct), next, fa);
-    }
-
-    private static GenericObjectAccessNode createGenericAccess(Message access) {
-        return new GenericObjectAccessNode(access);
-    }
-}
-
-class GenericObjectAccessNode extends ObjectAccessNode {
-
-    private final Message access;
-    @Child private IndirectCallNode indirectCallNode;
-
-    public GenericObjectAccessNode(Message access) {
-        this.access = access;
-        indirectCallNode = Truffle.getRuntime().createIndirectCallNode();
-    }
-
-    public GenericObjectAccessNode(GenericObjectAccessNode prev) {
-        this(prev.access);
-    }
-
-    @Override
-    public Object executeWith(VirtualFrame frame, TruffleObject truffleObject, Object[] arguments) {
-        final ForeignAccess fa = truffleObject.getForeignAccess();
-        final CallTarget ct = fa.access(access);
-        if (ct == null) {
-            throw messageNotRecognizedException(fa);
-        }
-        return indirectCallNode.call(frame, ct, ForeignAccessArguments.create(truffleObject, arguments));
-    }
-
-    @TruffleBoundary
-    private RuntimeException messageNotRecognizedException(final ForeignAccess fa) {
-        throw new IllegalStateException("Message " + access + " not recognized by " + fa);
-    }
-}
-
-class CachedObjectAccessNode extends ObjectAccessNode {
-    @Child private DirectCallNode callTarget;
-    @Child private ObjectAccessNode next;
-
-    private final ForeignAccess languageCheck;
-
-    protected CachedObjectAccessNode(DirectCallNode callTarget, ObjectAccessNode next, ForeignAccess languageCheck) {
-        this.callTarget = callTarget;
-        this.next = next;
-        this.languageCheck = languageCheck;
-        this.callTarget.forceInlining();
-    }
-
-    protected CachedObjectAccessNode(CachedObjectAccessNode prev) {
-        this(prev.callTarget, prev.next, prev.languageCheck);
-    }
-
-    @Override
-    public Object executeWith(VirtualFrame frame, TruffleObject receiver, Object[] arguments) {
-        return doAccess(frame, receiver, arguments);
-    }
-
-    private Object doAccess(VirtualFrame frame, TruffleObject receiver, Object[] arguments) {
-        if (languageCheck.canHandle(receiver)) {
-            return callTarget.call(frame, ForeignAccessArguments.create(receiver, arguments));
-        } else {
-            return doNext(frame, receiver, arguments);
-        }
-    }
-
-    private Object doNext(VirtualFrame frame, TruffleObject receiver, Object[] arguments) {
-        return next.executeWith(frame, receiver, arguments);
-    }
-}