Mercurial > hg > truffle
changeset 22123:329fe954f6f2
Can compile Truffle API with following javac lints: -Xlint:all,-auxiliaryclass,-try,-processing
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/CachedObjectAccessNode.java Wed Sep 02 13:15:51 2015 +0200 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 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.interop; + +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.nodes.DirectCallNode; + +final 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); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/GenericObjectAccessNode.java Wed Sep 02 13:15:51 2015 +0200 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 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.interop; + +import com.oracle.truffle.api.CallTarget; +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.Truffle; +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.nodes.IndirectCallNode; + +final 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)); + } + + @CompilerDirectives.TruffleBoundary + private RuntimeException messageNotRecognizedException(final ForeignAccess fa) { + throw new IllegalStateException("Message " + access + " not recognized by " + fa); + } + +}
--- 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); - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/UnresolvedObjectAccessNode.java Wed Sep 02 13:15:51 2015 +0200 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 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.interop; + +import com.oracle.truffle.api.CallTarget; +import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.api.Truffle; +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.nodes.NodeUtil; + +final 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 < UnresolvedObjectAccessNode.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); + } + +}
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/PrimitiveValueProfile.java Wed Sep 02 10:54:29 2015 +0200 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/PrimitiveValueProfile.java Wed Sep 02 13:15:51 2015 +0200 @@ -50,47 +50,48 @@ @SuppressWarnings("unchecked") @Override - public Object profile(Object value) { + public <T> T profile(T v) { + Object value = v; Object snapshot = this.cachedValue; if (snapshot != GENERIC) { if (snapshot instanceof Byte) { if (value instanceof Byte && (byte) snapshot == (byte) value) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Short) { if (value instanceof Short && (short) snapshot == (short) value) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Integer) { if (value instanceof Integer && (int) snapshot == (int) value) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Long) { if (value instanceof Long && (long) snapshot == (long) value) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Float) { if (value instanceof Float && exactCompare((float) snapshot, (float) value)) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Double) { if (value instanceof Double && exactCompare((double) snapshot, (double) value)) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Boolean) { if (value instanceof Boolean && (boolean) snapshot == (boolean) value) { - return snapshot; + return (T) snapshot; } } else if (snapshot instanceof Character) { if (value instanceof Character && (char) snapshot == (char) value) { - return snapshot; + return (T) snapshot; } } else if (snapshot == value) { - return snapshot; + return (T) snapshot; } cacheMiss(value); } - return value; + return (T) value; } public byte profile(byte value) {
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java Wed Sep 02 10:54:29 2015 +0200 +++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/vm/TruffleVM.java Wed Sep 02 13:15:51 2015 +0200 @@ -524,7 +524,7 @@ } } - @SuppressWarnings("all") + @SuppressWarnings("unchecked") void dispatch(Object ev) { Class type = ev.getClass(); if (type == SuspendedEvent.class) { @@ -544,7 +544,7 @@ void dispatchExecutionEvent(ExecutionEvent event) { } - @SuppressWarnings("all") + @SuppressWarnings("unchecked") <Event> void dispatch(Class<Event> type, Event event) { for (EventConsumer handler : handlers) { if (handler.type == type) {
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JDTCompiler.java Wed Sep 02 10:54:29 2015 +0200 +++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JDTCompiler.java Wed Sep 02 13:15:51 2015 +0200 @@ -156,7 +156,7 @@ if (sortedFields != null) { sortedElements.addAll(Arrays.asList(sortedFields)); } - final Object[] sortedTypes = (Object[]) method(binaryType, "getMemberTypes", new Class[0]); + final Object[] sortedTypes = (Object[]) method(binaryType, "getMemberTypes", new Class<?>[0]); if (sortedTypes != null) { sortedElements.addAll(Arrays.asList(sortedTypes)); } @@ -182,7 +182,7 @@ Class<?> elementClass = sortedElement.getClass(); if (binaryMethod.isAssignableFrom(elementClass)) { char[] selector = (char[]) method(sortedElement, "getSelector"); - Object[] foundBindings = (Object[]) method(binding, "getMethods", new Class[]{char[].class}, selector); + Object[] foundBindings = (Object[]) method(binding, "getMethods", new Class<?>[]{char[].class}, selector); if (foundBindings == null || foundBindings.length == 0) { continue; } else if (foundBindings.length == 1) { @@ -199,13 +199,13 @@ } } else if (binaryField.isAssignableFrom(elementClass)) { char[] selector = (char[]) method(sortedElement, "getName"); - Object foundField = method(binding, "getField", new Class[]{char[].class, boolean.class}, selector, true); + Object foundField = method(binding, "getField", new Class<?>[]{char[].class, boolean.class}, selector, true); if (foundField != null) { bindings.add(foundField); } } else if (nestedType.isAssignableFrom(elementClass)) { char[] selector = (char[]) method(sortedElement, "getSourceName"); - Object foundType = method(binding, "getMemberType", new Class[]{char[].class}, selector); + Object foundType = method(binding, "getMemberType", new Class<?>[]{char[].class}, selector); if (foundType != null) { bindings.add(foundType); } @@ -221,8 +221,8 @@ Object lookupEnvironment = field(binding, "environment"); Object compoundClassName = field(binding, "compoundName"); Object nameEnvironment = field(lookupEnvironment, "nameEnvironment"); - Object nameEnvironmentAnswer = method(nameEnvironment, "findType", new Class[]{char[][].class}, compoundClassName); - Object binaryType = method(nameEnvironmentAnswer, "getBinaryType", new Class[0]); + Object nameEnvironmentAnswer = method(nameEnvironment, "findType", new Class<?>[]{char[][].class}, compoundClassName); + Object binaryType = method(nameEnvironmentAnswer, "getBinaryType", new Class<?>[0]); return binaryType; }
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JavaCCompiler.java Wed Sep 02 10:54:29 2015 +0200 +++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JavaCCompiler.java Wed Sep 02 13:15:51 2015 +0200 @@ -48,8 +48,8 @@ return environment.getElementUtils().getAllMembers(type); } - private static final Class<?>[] getTreeAndTopLevelSignature = new Class[]{Element.class, AnnotationMirror.class, AnnotationValue.class}; - private static final Class<?>[] getCharContentSignature = new Class[]{boolean.class}; + private static final Class<?>[] getTreeAndTopLevelSignature = new Class<?>[]{Element.class, AnnotationMirror.class, AnnotationValue.class}; + private static final Class<?>[] getCharContentSignature = new Class<?>[]{boolean.class}; @Override public String getMethodBody(ProcessingEnvironment env, ExecutableElement method) {
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitCore.java Wed Sep 02 10:54:29 2015 +0200 +++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitCore.java Wed Sep 02 13:15:51 2015 +0200 @@ -136,7 +136,7 @@ junitCore.addListener(TruffleTextListener.createRunListener(listener)); Request request; if (methodName == null) { - request = Request.classes(classes.toArray(new Class[0])); + request = Request.classes(classes.toArray(new Class<?>[0])); if (failFast) { Runner runner = request.getRunner(); if (runner instanceof ParentRunner) {