diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod.java index 746234d5ea2e080034d192b4fec87049dc6e1912..d4144b52f9a739db0808edba6e47048293491c83 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod.java @@ -18,12 +18,9 @@ import com.oracle.truffle.api.frame.*; import com.oracle.truffle.r.nodes.*; import com.oracle.truffle.r.nodes.access.*; import com.oracle.truffle.r.nodes.builtin.*; -import com.oracle.truffle.r.nodes.builtin.base.UseMethodFactory.*; import com.oracle.truffle.r.nodes.control.*; -import com.oracle.truffle.r.nodes.unary.*; import com.oracle.truffle.r.runtime.*; import com.oracle.truffle.r.runtime.data.*; -import com.oracle.truffle.r.runtime.data.model.*; @RBuiltin(name = "UseMethod", kind = PRIMITIVE) public abstract class UseMethod extends RBuiltinNode { @@ -89,7 +86,7 @@ public abstract class UseMethod extends RBuiltinNode { private abstract static class UseMethodNode extends RNode { @Child protected DispatchedCallNode dispatchedCallNode; - @Child ClassHierarchyNode classHierarchyNode = ClassHierarchyNodeFactory.create(null); + @Child UseMethod_ClassHierarchyNode classHierarchyNode = UseMethod_ClassHierarchyNodeFactory.create(null); protected String lastGenericName; @Override @@ -108,39 +105,4 @@ public abstract class UseMethod extends RBuiltinNode { public abstract Object execute(VirtualFrame frame, final String generic, final Object o); } - - public abstract static class ClassHierarchyNode extends UnaryNode { - - public abstract RStringVector execute(VirtualFrame frame, Object arg); - - @Specialization(order = 0) - public RStringVector getClassHr(RAbstractContainer arg) { - return arg.getClassHierarchy(); - } - - @Specialization - public RStringVector getClassHr(@SuppressWarnings("unused") byte arg) { - return RDataFactory.createStringVector(RRuntime.TYPE_LOGICAL); - } - - @Specialization - public RStringVector getClassHr(@SuppressWarnings("unused") String arg) { - return RDataFactory.createStringVector(RRuntime.TYPE_CHARACTER); - } - - @Specialization - public RStringVector getClassHr(@SuppressWarnings("unused") int arg) { - return RDataFactory.createStringVector(RRuntime.TYPE_INTEGER); - } - - @Specialization - public RStringVector getClassHr(@SuppressWarnings("unused") double arg) { - return RDataFactory.createStringVector(RRuntime.CLASS_DOUBLE, RDataFactory.COMPLETE_VECTOR); - } - - @Specialization - public RStringVector getClassHr(@SuppressWarnings("unused") RComplex arg) { - return RDataFactory.createStringVector(RRuntime.TYPE_COMPLEX); - } - } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod_ClassHierarchyNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod_ClassHierarchyNode.java new file mode 100644 index 0000000000000000000000000000000000000000..219367e02dd13b7976a5a179781844a9a0aadb35 --- /dev/null +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UseMethod_ClassHierarchyNode.java @@ -0,0 +1,68 @@ +/* + * 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. + * + * 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.r.nodes.builtin.base; + +import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.r.nodes.unary.*; +import com.oracle.truffle.r.runtime.*; +import com.oracle.truffle.r.runtime.data.*; +import com.oracle.truffle.r.runtime.data.model.*; + +/** + * Refactored out of {@link UseMethod} to avoid Eclipse annotation processor circularity. + */ +public abstract class UseMethod_ClassHierarchyNode extends UnaryNode { + + public abstract RStringVector execute(VirtualFrame frame, Object arg); + + @Specialization(order = 0) + public RStringVector getClassHr(RAbstractContainer arg) { + return arg.getClassHierarchy(); + } + + @Specialization + public RStringVector getClassHr(@SuppressWarnings("unused") byte arg) { + return RDataFactory.createStringVector(RRuntime.TYPE_LOGICAL); + } + + @Specialization + public RStringVector getClassHr(@SuppressWarnings("unused") String arg) { + return RDataFactory.createStringVector(RRuntime.TYPE_CHARACTER); + } + + @Specialization + public RStringVector getClassHr(@SuppressWarnings("unused") int arg) { + return RDataFactory.createStringVector(RRuntime.TYPE_INTEGER); + } + + @Specialization + public RStringVector getClassHr(@SuppressWarnings("unused") double arg) { + return RDataFactory.createStringVector(RRuntime.CLASS_DOUBLE, RDataFactory.COMPLETE_VECTOR); + } + + @Specialization + public RStringVector getClassHr(@SuppressWarnings("unused") RComplex arg) { + return RDataFactory.createStringVector(RRuntime.TYPE_COMPLEX); + } +}