From 11b325b76db7e4f56606ffe57601ddf51dc50ca7 Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Thu, 4 May 2017 11:52:52 +0200 Subject: [PATCH] Implemented basic message resolution for some classes needed for debugging. --- .../engine/interop/RArgsValuesAndNamesMR.java | 63 +++++++++++++++++ .../interop/RForeignAccessFactoryImpl.java | 6 ++ .../truffle/r/engine/interop/RPromiseMR.java | 70 +++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java create mode 100644 com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java new file mode 100644 index 0000000000..5eafbc04ce --- /dev/null +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016, 2017, 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.engine.interop; + +import com.oracle.truffle.api.interop.CanResolve; +import com.oracle.truffle.api.interop.MessageResolution; +import com.oracle.truffle.api.interop.Resolve; +import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.nodes.Node; +import com.oracle.truffle.r.engine.TruffleRLanguage; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; + +@MessageResolution(receiverType = RArgsValuesAndNames.class, language = TruffleRLanguage.class) +public class RArgsValuesAndNamesMR { + @Resolve(message = "IS_BOXED") + public abstract static class RArgsValuesAndNamesIsBoxedNode extends Node { + protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver) { + return false; + } + } + + @Resolve(message = "HAS_SIZE") + public abstract static class RArgsValuesAndNamesHasSizeNode extends Node { + protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver) { + return true; + } + } + + @Resolve(message = "IS_NULL") + public abstract static class RArgsValuesAndNamesIsNullNode extends Node { + protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver) { + return false; + } + } + + @CanResolve + public abstract static class RArgsValuesAndNamesCheck extends Node { + + protected static boolean test(TruffleObject receiver) { + return receiver instanceof RArgsValuesAndNames; + } + } +} diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java index 887d3a7741..0c7f6bcb20 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java @@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.conn.RConnection; import com.oracle.truffle.r.runtime.context.RContext; import com.oracle.truffle.r.runtime.context.RForeignAccessFactory; +import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames; import com.oracle.truffle.r.runtime.data.RDouble; import com.oracle.truffle.r.runtime.data.RExternalPtr; import com.oracle.truffle.r.runtime.data.RFunction; @@ -41,6 +42,7 @@ import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RPairList; import com.oracle.truffle.r.runtime.data.RS4Object; +import com.oracle.truffle.r.runtime.data.RPromise; import com.oracle.truffle.r.runtime.data.RSymbol; import com.oracle.truffle.r.runtime.data.RTruffleObject; import com.oracle.truffle.r.runtime.data.RUnboundValue; @@ -110,6 +112,10 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory { return CaptureNamesImplMRForeign.ACCESS; } else if (obj instanceof RS4Object) { return RS4ObjectMRForeign.ACCESS; + } else if (obj instanceof RPromise) { + return RPromiseMRForeign.ACCESS; + } else if (obj instanceof RArgsValuesAndNames) { + return RArgsValuesAndNamesMRForeign.ACCESS; } else { if (obj instanceof RAbstractVector) { return ForeignAccess.create(RAbstractVector.class, new RAbstractVectorAccessFactory()); diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java new file mode 100644 index 0000000000..257848ba02 --- /dev/null +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2016, 2017, 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.engine.interop; + +import com.oracle.truffle.api.interop.CanResolve; +import com.oracle.truffle.api.interop.MessageResolution; +import com.oracle.truffle.api.interop.Resolve; +import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.nodes.Node; +import com.oracle.truffle.r.engine.TruffleRLanguage; +import com.oracle.truffle.r.runtime.data.RPromise; + +@MessageResolution(receiverType = RPromise.class, language = TruffleRLanguage.class) +public class RPromiseMR { + @Resolve(message = "IS_BOXED") + public abstract static class RPromiseIsBoxedNode extends Node { + protected Object access(@SuppressWarnings("unused") RPromise receiver) { + return true; + } + } + + @Resolve(message = "HAS_SIZE") + public abstract static class RPromiseHasSizeNode extends Node { + protected Object access(@SuppressWarnings("unused") RPromise receiver) { + return false; + } + } + + @Resolve(message = "IS_NULL") + public abstract static class RPromiseIsNullNode extends Node { + protected Object access(@SuppressWarnings("unused") RPromise receiver) { + return false; + } + } + + @Resolve(message = "UNBOX") + public abstract static class RPromiseUnboxNode extends Node { + protected Object access(RPromise receiver) { + return receiver.getValue(); + } + } + + @CanResolve + public abstract static class RPromiseCheck extends Node { + + protected static boolean test(TruffleObject receiver) { + return receiver instanceof RPromise; + } + } +} -- GitLab