diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/S3DispatchFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/S3DispatchFunctions.java index 2620a949d05fbb07570a484a054f37af5ee535fa..22e4b2d3ea1b1328fc6e12f0469980208aee37ad 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/S3DispatchFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/S3DispatchFunctions.java @@ -12,6 +12,8 @@ package com.oracle.truffle.r.nodes.builtin.base; import static com.oracle.truffle.r.runtime.RBuiltinKind.*; +import java.util.*; + import com.oracle.truffle.api.*; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.dsl.*; @@ -140,6 +142,7 @@ public abstract class S3DispatchFunctions extends RBuiltinNode { @Child private ReadVariableNode rvnDef = ReadVariableNode.create(RRuntime.RDotGenericDefEnv, RType.Any, ReadKind.SilentLocal); @Child private CombineSignaturesNode combineSignatures; + @Child private CollectArgumentsNode collectArguments = CollectArgumentsNodeGen.create(null); @CompilationFinal private RAttributeProfiles attrProfiles; @Child private PromiseHelperNode promiseHelper; @@ -180,11 +183,10 @@ public abstract class S3DispatchFunctions extends RBuiltinNode { String group = (String) rvnGroup.execute(frame); ArgumentsSignature suppliedSignature; - Object[] suppliedArguments; ArgumentsSignature parameterSignature = parameterSignatureProfile.profile(RArguments.getSignature(frame)); + Object[] suppliedArguments = collectArguments.execute(frame, parameterSignature); if (emptyArgsProfile.profile(args == RArgsValuesAndNames.EMPTY)) { suppliedSignature = parameterSignature; - suppliedArguments = RArguments.getArguments(frame); } else { if (combineSignatures == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -192,13 +194,8 @@ public abstract class S3DispatchFunctions extends RBuiltinNode { } suppliedSignature = combineSignatures.execute(parameterSignature, args.getSignature()); - suppliedArguments = new Object[suppliedSignature.getLength()]; - for (int i = 0; i < parameterSignature.getLength(); i++) { - suppliedArguments[i] = RArguments.getArgument(frame, i); - } - for (int i = 0; i < args.getSignature().getLength(); i++) { - suppliedArguments[parameterSignature.getLength() + i] = args.getValues()[i]; - } + suppliedArguments = Arrays.copyOf(suppliedArguments, suppliedSignature.getLength()); + System.arraycopy(args.getValues(), 0, suppliedArguments, parameterSignature.getLength(), suppliedSignature.getLength() - parameterSignature.getLength()); } return dispatch(frame, generic, readType(frame), group, genericCallFrame, genericDefFrame, suppliedSignature, suppliedArguments); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsNode.java index 6b16c66570a6b4059a9921a1c6678dd87635c643..487cadf9d84acb0ceac6efb84c7c90f5232ff27f 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsNode.java @@ -25,10 +25,9 @@ package com.oracle.truffle.r.nodes.function.signature; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; -import com.oracle.truffle.r.runtime.*; @TypeSystemReference(ArgumentsTypeSystem.class) public abstract class ArgumentsNode extends Node { - public abstract ArgumentsSignature execute(VirtualFrame frame); + public abstract Object execute(VirtualFrame frame); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsTypeSystem.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsTypeSystem.java index 2dd8a33e22897645968d419ca1ddbe124bcafdff..6bfe58de13218843cfb4c21ad1cc8660c170d46c 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsTypeSystem.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/ArgumentsTypeSystem.java @@ -25,7 +25,7 @@ package com.oracle.truffle.r.nodes.function.signature; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.r.runtime.*; -@TypeSystem(ArgumentsSignature.class) +@TypeSystem({ArgumentsSignature.class, Object[].class}) public class ArgumentsTypeSystem { } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CollectArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CollectArgumentsNode.java new file mode 100644 index 0000000000000000000000000000000000000000..c38e48776638680d9093d97c4001f52c1b1ce546 --- /dev/null +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CollectArgumentsNode.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2015, 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.function.signature; + +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; +import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.api.frame.*; +import com.oracle.truffle.api.nodes.*; +import com.oracle.truffle.api.utilities.*; +import com.oracle.truffle.r.nodes.access.variables.*; +import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode.ReadKind; +import com.oracle.truffle.r.runtime.*; +import com.oracle.truffle.r.runtime.data.*; + +@NodeChildren({@NodeChild("signature")}) +public abstract class CollectArgumentsNode extends ArgumentsNode { + + protected static final int CACHE_LIMIT = 3; + + private final ConditionProfile valueMissingProfile = ConditionProfile.createBinaryProfile(); + + public abstract Object[] execute(VirtualFrame frame, ArgumentsSignature signature); + + protected ReadVariableNode[] createReads(ArgumentsSignature signature) { + ReadVariableNode[] reads = new ReadVariableNode[signature.getLength()]; + for (int i = 0; i < signature.getLength(); i++) { + reads[i] = ReadVariableNode.create(signature.getName(i), RType.Any, ReadKind.SilentLocal); + } + return reads; + } + + @SuppressWarnings("unused") + @ExplodeLoop + @Specialization(limit = "CACHE_LIMIT", guards = {"cachedSignature == signature"}) + protected Object[] combineCached(VirtualFrame frame, ArgumentsSignature signature, @Cached("signature") ArgumentsSignature cachedSignature, + @Cached("createReads(signature)") ReadVariableNode[] reads) { + Object[] result = new Object[reads.length]; + for (int i = 0; i < reads.length; i++) { + Object value = reads[i].execute(frame); + result[i] = valueMissingProfile.profile(value == null) ? RMissing.instance : value; + } + return result; + } + + @Specialization + protected Object[] combine(VirtualFrame frame, ArgumentsSignature signature) { + return readFromMaterialized(frame.materialize(), signature); + } + + @TruffleBoundary + private static Object[] readFromMaterialized(MaterializedFrame frame, ArgumentsSignature signature) { + Object[] result = new Object[signature.getLength()]; + FrameDescriptor desc = frame.getFrameDescriptor(); + for (int i = 0; i < signature.getLength(); i++) { + FrameSlot slot = desc.findFrameSlot(signature.getName(i)); + if (slot == null) { + result[i] = RMissing.instance; + } else { + result[i] = frame.getValue(slot); + } + } + return result; + } +} diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CombineSignaturesNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CombineSignaturesNode.java index 88d0d88e309d000308a52726674d654ba993824a..16d66c14f592f225ed885431b1ead69fc80f1f6f 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CombineSignaturesNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/CombineSignaturesNode.java @@ -29,10 +29,12 @@ import com.oracle.truffle.r.runtime.*; @NodeChildren({@NodeChild("left"), @NodeChild("right")}) public abstract class CombineSignaturesNode extends ArgumentsNode { + protected static final int CACHE_LIMIT = 3; + public abstract ArgumentsSignature execute(ArgumentsSignature left, ArgumentsSignature right); @SuppressWarnings("unused") - @Specialization(guards = {"left == leftCached", "right == rightCached"}) + @Specialization(limit = "CACHE_LIMIT", guards = {"left == leftCached", "right == rightCached"}) protected ArgumentsSignature combineCached(ArgumentsSignature left, ArgumentsSignature right, @Cached("left") ArgumentsSignature leftCached, @Cached("right") ArgumentsSignature rightCached, @Cached("combine(left, right)") ArgumentsSignature resultCached) { return resultCached; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java index 584c23f341a1b99ab09e85ef922e9fc4214b2dce..e8fb3eb49ee88d97d12eedf8e98b0c97c92f7f52 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java @@ -252,10 +252,6 @@ public final class RArguments { return (boolean) getArgumentsWithEvalCheck(frame)[INDEX_IS_IRREGULAR]; } - public static void copyArgumentsInto(Frame frame, Object[] target) { - System.arraycopy(getArgumentsWithEvalCheck(frame), INDEX_ARGUMENTS, target, 0, getNArgs(frame)); - } - public static Object getArgument(Frame frame, int argIndex) { assert (argIndex >= 0 && argIndex < getNArgs(frame)); return getArgumentsWithEvalCheck(frame)[INDEX_ARGUMENTS + argIndex]; @@ -266,6 +262,11 @@ public final class RArguments { return Arrays.copyOfRange(args, INDEX_ARGUMENTS, INDEX_ARGUMENTS + ((ArgumentsSignature) args[INDEX_SIGNATURE]).getLength()); } + public static void copyArguments(Frame frame, Object[] dest, int pos) { + Object[] args = getArgumentsWithEvalCheck(frame); + System.arraycopy(args, INDEX_ARGUMENTS, dest, pos, ((ArgumentsSignature) args[INDEX_SIGNATURE]).getLength()); + } + /** * <b>Only to be called from AccessArgumentNode!</b> * diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 7194f372099cb8488e0358f026db8b47977de5f5..cc52af6946a53429ef44271594db332ede820157 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -13323,6 +13323,9 @@ Error in k() : argument "y" is missing, with no default #{ f<-function(x, ..., y=TRUE) { nargs() }; f(1, 2, 3) } [1] 3 +##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testNextMethod +#{ foo <- function(x,y) UseMethod('foo'); foo.bar <- function(x, y) { y <- 10; NextMethod() }; foo.default <- function(x,y) cat(x,y); v <- c(1,2,3); class(v) <- 'bar'; foo(v,5) } +1 2 3 10 ##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testNextMethod #{ g<-function(){ x<-1; class(x)<-c("a","b","c"); f<-function(x){UseMethod("f")}; f.a<-function(x){cat("a");NextMethod("f",x)}; f.b<-function(x){cat("b")}; f(x); }; g() } ab diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java index bc23226a9eb6543e23135b15934c4b96f7315937..d8ac877e5a99c3639c6e41224c01dbb249162fc0 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java @@ -3408,6 +3408,7 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ g<-function(){ x<-1; class(x)<-c(\"a\",\"b\",\"c\"); f<-function(x){UseMethod(\"f\")}; f.a<-function(x){cat(\"a\");NextMethod(\"f\",x, 42)}; f.b<-function(x, y=7){cat(\"b\", y)}; f(x); }; g(); }"); assertEval("{ g<-function(){ x<-1; class(x)<-c(\"a\",\"b\",\"c\"); f<-function(x){UseMethod(\"f\")}; f.a<-function(x){cat(\"a\");NextMethod(\"f\",x,\"m\",\"n\")}; f.b<-function(x, y=\"h\", z=\"i\"){cat(\"b\", y, z)}; f(x); }; g() }"); assertEval("{ g<-function(){ x<-1; class(x)<-c(\"a\",\"b\",\"c\"); f<-function(x){UseMethod(\"f\")}; f.a<-function(x){cat(\"a\");NextMethod(\"f\",x,z=\"m\",y=\"n\")}; f.b<-function(x, y=\"h\", z=\"i\"){cat(\"b\", y, z)}; f(x); }; g() }"); + assertEval("{ foo <- function(x,y) UseMethod('foo'); foo.bar <- function(x, y) { y <- 10; NextMethod() }; foo.default <- function(x,y) cat(x,y); v <- c(1,2,3); class(v) <- 'bar'; foo(v,5) }"); } @Test diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinformat.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinformat.java index aaaea117571e0d86cd380528da7909cd6976ff03..662ce0dc9a1c6308033fab291948faed5b8185a9 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinformat.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinformat.java @@ -284,8 +284,7 @@ public class TestrGenBuiltinformat extends TestBase { @Test public void testformat52() { - assertEval(Ignored.Unknown, - "argv <- list(structure('def\\\'gh', class = 'AsIs'), FALSE, NULL, 0L, NULL, 3L, TRUE, NA); .Internal(format(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))"); + assertEval("argv <- list(structure('def\\\'gh', class = 'AsIs'), FALSE, NULL, 0L, NULL, 3L, TRUE, NA); .Internal(format(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]], argv[[8]]))"); } @Test diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinisnaassign_default.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinisnaassign_default.java index e3a56420a63a2ac80224c65af798e3edab1ccd67..23868232e9c9b804d36b569dc7fda180e257f2e4 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinisnaassign_default.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinisnaassign_default.java @@ -24,7 +24,7 @@ public class TestrGenBuiltinisnaassign_default extends TestBase { @Test public void testisnaassign_default2() { - assertEval(Ignored.Unknown, "argv <- structure(list(x = structure(c('A', '3', 'C'), class = 'AsIs'), value = 2), .Names = c('x', 'value'));do.call('is.na<-.default', argv)"); + assertEval("argv <- structure(list(x = structure(c('A', '3', 'C'), class = 'AsIs'), value = 2), .Names = c('x', 'value'));do.call('is.na<-.default', argv)"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinoperators.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinoperators.java index e69eae3159c7e352bc4263f34f2d2a1591c617b3..214f27a856ee66e6d7e38a158f3aad0c7a662e7f 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinoperators.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinoperators.java @@ -483,8 +483,7 @@ public class TestrGenBuiltinoperators extends TestBase { @Test public void testoperators91() { - assertEval(Ignored.Unknown, - "argv <- list(structure(list(c(3L, 0L, 1L)), class = c('R_system_version', 'package_version', 'numeric_version')), structure('3.1', .Names = 'gridSVG2'));`<`(argv[[1]],argv[[2]]);"); + assertEval("argv <- list(structure(list(c(3L, 0L, 1L)), class = c('R_system_version', 'package_version', 'numeric_version')), structure('3.1', .Names = 'gridSVG2'));`<`(argv[[1]],argv[[2]]);"); } @Test @@ -746,8 +745,7 @@ public class TestrGenBuiltinoperators extends TestBase { @Test public void testoperators142() { - assertEval(Ignored.Unknown, - "argv <- list(structure(list(c(3L, 0L, 1L)), class = c('R_system_version', 'package_version', 'numeric_version')), structure('2.13.2', .Names = 'SweaveListingUtils'));`>`(argv[[1]],argv[[2]]);"); + assertEval("argv <- list(structure(list(c(3L, 0L, 1L)), class = c('R_system_version', 'package_version', 'numeric_version')), structure('2.13.2', .Names = 'SweaveListingUtils'));`>`(argv[[1]],argv[[2]]);"); } @Test @@ -803,7 +801,7 @@ public class TestrGenBuiltinoperators extends TestBase { @Test public void testoperators153() { - assertEval(Ignored.Unknown, "argv <- list(structure(list(2L), class = 'numeric_version'), '2');`>=`(argv[[1]],argv[[2]]);"); + assertEval("argv <- list(structure(list(2L), class = 'numeric_version'), '2');`>=`(argv[[1]],argv[[2]]);"); } @Test diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinprintAsIs.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinprintAsIs.java index b41719ebb1c0529253d5cb2acb7c24ecb7afa50a..e5e0d4a417f4bda5b78b3f9bb94c2dce32522de8 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinprintAsIs.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinprintAsIs.java @@ -2,7 +2,7 @@ * This material is distributed under the GNU General Public License * Version 2. You may review the terms of this license at * http://www.gnu.org/licenses/gpl-2.0.html - * + * * Copyright (c) 2014, Purdue University * Copyright (c) 2014, Oracle and/or its affiliates * All rights reserved. @@ -19,7 +19,7 @@ public class TestrGenBuiltinprintAsIs extends TestBase { @Test public void testprintAsIs1() { - assertEval(Ignored.Unknown, "argv <- structure(list(x = structure(c(2L, 5L), .Dim = 1:2, class = 'AsIs')), .Names = 'x');do.call('print.AsIs', argv)"); + assertEval("argv <- structure(list(x = structure(c(2L, 5L), .Dim = 1:2, class = 'AsIs')), .Names = 'x');do.call('print.AsIs', argv)"); } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinsubset2.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinsubset2.java index 57d9e826a59e2087d662c6307b2c0024c985a77b..3de8c26f314ae4c9bfa761de7b17bd490d5d3bee 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinsubset2.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/testrgen/TestrGenBuiltinsubset2.java @@ -49,8 +49,7 @@ public class TestrGenBuiltinsubset2 extends TestBase { @Test public void testsubset27() { - assertEval(Ignored.Unknown, - "argv <- list(structure(list(surname = structure(c('Tukey', 'Venables', 'Tierney', 'Ripley', 'McNeil'), class = 'AsIs')), .Names = 'surname'), 1L);.subset2(argv[[1]],argv[[2]]);"); + assertEval("argv <- list(structure(list(surname = structure(c('Tukey', 'Venables', 'Tierney', 'Ripley', 'McNeil'), class = 'AsIs')), .Names = 'surname'), 1L);.subset2(argv[[1]],argv[[2]]);"); } @Test @@ -61,8 +60,7 @@ public class TestrGenBuiltinsubset2 extends TestBase { @Test public void testsubset29() { - assertEval(Ignored.Unknown, - "argv <- list(structure(list(z = structure(c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'), .Dim = c(3L, 3L), class = 'AsIs')), .Names = 'z'), 1L);.subset2(argv[[1]],argv[[2]]);"); + assertEval("argv <- list(structure(list(z = structure(c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'), .Dim = c(3L, 3L), class = 'AsIs')), .Names = 'z'), 1L);.subset2(argv[[1]],argv[[2]]);"); } @Test @@ -78,8 +76,7 @@ public class TestrGenBuiltinsubset2 extends TestBase { @Test public void testsubset213() { - assertEval(Ignored.Unknown, - "argv <- list(structure(list(a = structure('abc', class = 'AsIs'), b = structure('def\\\'gh', class = 'AsIs')), .Names = c('a', 'b'), row.names = '1', class = 'data.frame'), 1L);.subset2(argv[[1]],argv[[2]]);"); + assertEval("argv <- list(structure(list(a = structure('abc', class = 'AsIs'), b = structure('def\\\'gh', class = 'AsIs')), .Names = c('a', 'b'), row.names = '1', class = 'data.frame'), 1L);.subset2(argv[[1]],argv[[2]]);"); } @Test