Skip to content
Snippets Groups Projects
Commit bbab2763 authored by Miloslav Metelka's avatar Miloslav Metelka
Browse files

[GR-5641] Fix usages of GetFixedAttribute and similar nodes.

PullRequest: fastr/1374
parents 5779b33d 5b25e4f3
No related branches found
No related tags found
No related merge requests found
Showing
with 155 additions and 123 deletions
......@@ -5,7 +5,7 @@
*
* Copyright (c) 1997-2014, The R Core Team
* Copyright (c) 2003, The R Foundation
* Copyright (c) 2017, Oracle and/or its affiliates
* Copyright (c) 2017, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -27,7 +27,7 @@ import com.oracle.truffle.r.library.fastrGrid.GridColorUtils;
import com.oracle.truffle.r.library.fastrGrid.GridContext;
import com.oracle.truffle.r.library.fastrGrid.GridState.GridPalette;
import com.oracle.truffle.r.library.fastrGrid.device.GridColor;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode;
import com.oracle.truffle.r.nodes.function.opt.ShareObjectNode;
import com.oracle.truffle.r.runtime.RError.Message;
......@@ -59,7 +59,7 @@ public abstract class Col2RGB extends RExternalBuiltinNode.Arg2 {
@Specialization
@TruffleBoundary
Object execute(RAbstractVector col, boolean alpha,
@Cached("create()") GetNamesAttributeNode getNames) {
@Cached("create()") ExtractNamesAttributeNode extractNames) {
int length = col.getLength();
int columns = alpha ? 4 : 3;
int[] result = new int[length * columns];
......@@ -108,7 +108,7 @@ public abstract class Col2RGB extends RExternalBuiltinNode.Arg2 {
Arrays.fill(result, RRuntime.INT_NA);
}
RStringVector names = getNames.getNames(col);
RStringVector names = extractNames.execute(col);
RList dimNames = RDataFactory.createList(new Object[]{alpha ? NAMES_ALPHA : NAMES, names == null ? RNull.instance : names});
return RDataFactory.createIntVector(result, false, new int[]{columns, length}, null, dimNames);
}
......
......@@ -5,7 +5,7 @@
*
* Copyright (c) 1995-2012, The R Core Team
* Copyright (c) 2003, The R Foundation
* Copyright (c) 2013, 2017, Oracle and/or its affiliates
* Copyright (c) 2013, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RDoubleVector;
import com.oracle.truffle.r.runtime.data.RList;
import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RShareable;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.nodes.GetReadonlyData;
import com.oracle.truffle.r.runtime.nmath.RMath;
......@@ -795,6 +796,9 @@ public abstract class Covcor extends RExternalBuiltinNode.Arg4 {
if (dimNames != null) {
Object names = dimNames.getDataAt(1);
if (names != RNull.instance) {
if (names instanceof RShareable && !((RShareable) names).isShared()) {
((RShareable) names).incRefCount();
}
newDimNames = RDataFactory.createList(new Object[]{names, names});
}
}
......@@ -804,6 +808,12 @@ public abstract class Covcor extends RExternalBuiltinNode.Arg4 {
Object namesX = dimNamesX.getLength() >= 2 ? dimNamesX.getDataAt(1) : RNull.instance;
Object namesY = dimNamesY.getLength() >= 2 ? dimNamesY.getDataAt(1) : RNull.instance;
if (namesX != RNull.instance || namesY != RNull.instance) {
if (namesX instanceof RShareable && !((RShareable) namesX).isShared()) {
((RShareable) namesX).incRefCount();
}
if (namesY instanceof RShareable && !((RShareable) namesY).isShared()) {
((RShareable) namesY).incRefCount();
}
newDimNames = RDataFactory.createList(new Object[]{namesX, namesY});
}
}
......
/*
* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2018, 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
......@@ -72,12 +72,12 @@ public abstract class AsCall extends RBuiltinNode.Arg1 {
private ArgumentsSignature createSignature(RAbstractContainer x) {
int length = x.getLength() - 1;
if (nullNamesProfile.profile(getNamesNode.getNames(x) == null)) {
RStringVector ns = getNamesNode.getNames(x);
if (nullNamesProfile.profile(ns == null)) {
return ArgumentsSignature.empty(length);
} else {
String[] names = new String[length];
// extract names, converting "" to null
RStringVector ns = getNamesNode.getNames(x);
for (int i = 0; i < length; i++) {
String name = ns.getDataAt(i + 1);
if (name != null && !name.isEmpty()) {
......
/*
* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2018, 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
......@@ -39,7 +39,7 @@ import com.oracle.truffle.r.nodes.RASTUtils;
import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
......@@ -154,7 +154,7 @@ public abstract class Bind extends RBaseNode {
}
private Object bindInternal(int deparseLevel, Object[] args, RArgsValuesAndNames promiseArgs, CastNode castNode, boolean needsVectorCast, SetDimAttributeNode setDimNode,
GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
GetDimNamesAttributeNode getDimNamesNode, ExtractNamesAttributeNode extractNamesNode) {
ArgumentsSignature signature = promiseArgs.getSignature();
String[] vecNames = nullNamesProfile.profile(signature.getNonNullCount() == 0) ? null : new String[signature.getLength()];
RAbstractVector[] vectors = new RAbstractVector[args.length];
......@@ -205,10 +205,10 @@ public abstract class Bind extends RBaseNode {
if (type == BindType.cbind) {
return genericCBind(promiseArgs, vectors, resultVec, resultDimensions, bindDims, rowsAndColumnsNotEqual, allEmpty, vecNames, deparseLevel, setDimNode, getDimNamesNode,
getNamesNode);
extractNamesNode);
} else {
return genericRBind(promiseArgs, vectors, resultVec, resultDimensions, bindDims, rowsAndColumnsNotEqual, allEmpty, vecNames, deparseLevel, setDimNode, getDimNamesNode,
getNamesNode);
extractNamesNode);
}
}
......@@ -236,8 +236,8 @@ public abstract class Bind extends RBaseNode {
@Cached("create()") CastLogicalNode cast,
@Cached("create()") SetDimAttributeNode setDimNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, getNamesNode);
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, extractNamesNode);
}
@Specialization(guards = {"precedence == INT_PRECEDENCE", "args.length > 1"})
......@@ -245,8 +245,8 @@ public abstract class Bind extends RBaseNode {
@Cached("create()") CastIntegerNode cast,
@Cached("create()") SetDimAttributeNode setDimNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, getNamesNode);
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, extractNamesNode);
}
@Specialization(guards = {"precedence == DOUBLE_PRECEDENCE", "args.length > 1"})
......@@ -254,8 +254,8 @@ public abstract class Bind extends RBaseNode {
@Cached("create()") CastDoubleNode cast,
@Cached("create()") SetDimAttributeNode setDimNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, getNamesNode);
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, extractNamesNode);
}
@Specialization(guards = {"precedence == STRING_PRECEDENCE", "args.length> 1"})
......@@ -263,8 +263,8 @@ public abstract class Bind extends RBaseNode {
@Cached("create()") CastStringNode cast,
@Cached("create()") SetDimAttributeNode setDimNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, getNamesNode);
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, extractNamesNode);
}
@Specialization(guards = {"precedence == COMPLEX_PRECEDENCE", "args.length > 1"})
......@@ -272,8 +272,8 @@ public abstract class Bind extends RBaseNode {
@Cached("create()") CastComplexNode cast,
@Cached("create()") SetDimAttributeNode setDimNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, getNamesNode);
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, true, setDimNode, getDimNamesNode, extractNamesNode);
}
@Specialization(guards = {"precedence == LIST_PRECEDENCE", "args.length > 1"})
......@@ -281,15 +281,15 @@ public abstract class Bind extends RBaseNode {
@Cached("create()") CastListNode cast,
@Cached("create()") SetDimAttributeNode setDimNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, false, setDimNode, getDimNamesNode, getNamesNode);
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
return bindInternal(deparseLevel, args, promiseArgs, cast, false, setDimNode, getDimNamesNode, extractNamesNode);
}
/**
* Compute dimnames for rows (cbind) or columns (rbind) from names of elements of combined
* vectors.
*/
protected Object getDimResultNamesFromElements(RAbstractVector vec, int dimLength, int dimInd, GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
protected Object getDimResultNamesFromElements(RAbstractVector vec, int dimLength, int dimInd, GetDimNamesAttributeNode getDimNamesNode, ExtractNamesAttributeNode extractNamesNode) {
Object firstDimResultNames = RNull.instance;
Object firstDimNames = RNull.instance;
int[] dim = getVectorDimensions(vec);
......@@ -300,7 +300,7 @@ public abstract class Bind extends RBaseNode {
}
} else {
if (!GetDimAttributeNode.isArray(dim) || dim.length == 1) {
RStringVector names = getNamesNode.getNames(vec);
RStringVector names = extractNamesNode.execute(vec);
firstDimNames = names == null ? RNull.instance : names;
} else {
RInternalError.unimplemented("binding multi-dimensional arrays is not supported");
......@@ -436,7 +436,7 @@ public abstract class Bind extends RBaseNode {
@Specialization(guards = {"precedence != NO_PRECEDENCE", "args.length == 1"})
protected Object allOneElem(int deparseLevel, Object[] args, RArgsValuesAndNames promiseArgs, @SuppressWarnings("unused") int precedence,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
RAbstractVector vec = vectorProfile.profile(castVector(args[0]));
int[] rawDimensions = null;
......@@ -447,7 +447,7 @@ public abstract class Bind extends RBaseNode {
// for cbind dimNamesA is names for the 1st dim and dimNamesB is names for 2nd dim; for
// rbind the other way around
Object dimNamesA = getNamesNode.getNames(vec);
Object dimNamesA = extractNamesNode.execute(vec);
if (dimNamesA == null) {
dimNamesA = RNull.instance;
}
......@@ -480,7 +480,7 @@ public abstract class Bind extends RBaseNode {
public RVector<?> genericCBind(RArgsValuesAndNames promiseArgs, RAbstractVector[] vectors, RVector<?> result, int[] resultDimensions, int[] secondDims, boolean rowsAndColumnsNotEqual,
boolean allEmpty, String[] vecNames, int deparseLevel, SetDimAttributeNode setDimNode,
GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
GetDimNamesAttributeNode getDimNamesNode, ExtractNamesAttributeNode extractNamesNode) {
int ind = 0;
Object rowDimResultNames = RNull.instance;
......@@ -491,7 +491,7 @@ public abstract class Bind extends RBaseNode {
RAbstractVector vec = vectorProfile.profile(vectors[i]);
if (rowDimResultNames == RNull.instance) {
// get the first valid names value
rowDimResultNames = getDimResultNamesFromElements(vec, resultDimensions[0], 0, getDimNamesNode, getNamesNode);
rowDimResultNames = getDimResultNamesFromElements(vec, resultDimensions[0], 0, getDimNamesNode, extractNamesNode);
}
// compute dimnames for the second dimension
......@@ -662,7 +662,7 @@ public abstract class Bind extends RBaseNode {
public RVector<?> genericRBind(RArgsValuesAndNames promiseArgs, RAbstractVector[] vectors, RVector<?> result, int[] resultDimensions, int[] firstDims, boolean rowsAndColumnsNotEqual,
boolean allEmpty, String[] vecNames, int deparseLevel, SetDimAttributeNode setDimNode,
GetDimNamesAttributeNode getDimNamesNode, GetNamesAttributeNode getNamesNode) {
GetDimNamesAttributeNode getDimNamesNode, ExtractNamesAttributeNode extractNamesNode) {
Object colDimResultNames = RNull.instance;
String[] rowDimNamesArray = new String[resultDimensions[0]];
......@@ -673,7 +673,7 @@ public abstract class Bind extends RBaseNode {
RAbstractVector vec = vectorProfile.profile(vectors[i]);
if (colDimResultNames == RNull.instance) {
// get the first valid names value
colDimResultNames = getDimResultNamesFromElements(vec, resultDimensions[1], 1, getDimNamesNode, getNamesNode);
colDimResultNames = getDimResultNamesFromElements(vec, resultDimensions[1], 1, getDimNamesNode, extractNamesNode);
}
// compute dimnames for the second dimension
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -49,7 +49,8 @@ import com.oracle.truffle.api.nodes.NodeCost;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.api.profiles.ValueProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.unary.CastComplexNodeGen;
......@@ -479,8 +480,8 @@ public abstract class Combine extends RBuiltinNode.Arg2 {
protected static final class CombineInputCast extends Node {
@Child private GetDimNamesAttributeNode getDimNamesNode;
@Child private GetNamesAttributeNode getNamesNode;
@Child private ExtractDimNamesAttributeNode extractDimNamesNode;
@Child private ExtractNamesAttributeNode extractNamesNode;
private final ValueProfile valueProfile = ValueProfile.createClassProfile();
private final ValueProfile inputValueProfile = ValueProfile.createClassProfile();
......@@ -493,29 +494,29 @@ public abstract class Combine extends RBuiltinNode.Arg2 {
if (profiled instanceof RVector<?>) {
RVector<?> vector = (RVector<?>) profiled;
if (vector.getAttributes() != null) {
if (getNamesNode == null) {
if (extractNamesNode == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
getNamesNode = insert(GetNamesAttributeNode.create());
extractNamesNode = insert(ExtractNamesAttributeNode.create());
}
if (hasNamesProfile == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
hasNamesProfile = ConditionProfile.createBinaryProfile();
}
RStringVector vecNames = getNamesNode.getNames(vector);
RStringVector vecNames = extractNamesNode.execute(vector);
if (hasNamesProfile.profile(vecNames != null)) {
RVector<?> result = vector.copyDropAttributes();
result.initAttributes(RAttributesLayout.createNames(vecNames));
return result;
} else {
if (getDimNamesNode == null) {
if (extractDimNamesNode == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
getDimNamesNode = insert(GetDimNamesAttributeNode.create());
extractDimNamesNode = insert(ExtractDimNamesAttributeNode.create());
}
if (hasDimNamesProfile == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
hasDimNamesProfile = ConditionProfile.createBinaryProfile();
}
RList dimNames = getDimNamesNode.getDimNames(vector);
RList dimNames = extractDimNamesNode.execute(vector);
if (hasDimNamesProfile.profile(dimNames != null)) {
RVector<?> result = vector.copyDropAttributes();
result.initAttributes(RAttributesLayout.createDimNames(dimNames));
......
......@@ -4,7 +4,7 @@
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Copyright (c) 2014, Purdue University
* Copyright (c) 2014, 2017, Oracle and/or its affiliates
* Copyright (c) 2014, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -25,7 +25,7 @@ import java.util.Arrays;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
......@@ -44,7 +44,7 @@ import com.oracle.truffle.r.runtime.ops.na.NACheck;
public abstract class CumMax extends RBuiltinNode.Arg1 {
private final NACheck na = NACheck.create();
@Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNamesNode = ExtractNamesAttributeNode.create();
static {
Casts casts = new Casts(CumMax.class);
......@@ -110,7 +110,7 @@ public abstract class CumMax extends RBuiltinNode.Arg1 {
}
cmaxV[i] = max;
}
return RDataFactory.createDoubleVector(cmaxV, na.neverSeenNA(), getNamesNode.getNames(v));
return RDataFactory.createDoubleVector(cmaxV, na.neverSeenNA(), extractNamesNode.execute(v));
}
@Specialization(replaces = "cummaxIntSequence")
......@@ -131,6 +131,6 @@ public abstract class CumMax extends RBuiltinNode.Arg1 {
}
cmaxV[i] = max;
}
return RDataFactory.createIntVector(cmaxV, na.neverSeenNA(), getNamesNode.getNames(v));
return RDataFactory.createIntVector(cmaxV, na.neverSeenNA(), extractNamesNode.execute(v));
}
}
......@@ -4,7 +4,7 @@
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Copyright (c) 2014, Purdue University
* Copyright (c) 2014, 2017, Oracle and/or its affiliates
* Copyright (c) 2014, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -25,7 +25,7 @@ import java.util.Arrays;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
......@@ -44,7 +44,7 @@ import com.oracle.truffle.r.runtime.ops.na.NACheck;
public abstract class CumMin extends RBuiltinNode.Arg1 {
private final NACheck na = NACheck.create();
@Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNamesNode = ExtractNamesAttributeNode.create();
static {
Casts casts = new Casts(CumMin.class);
......@@ -110,7 +110,7 @@ public abstract class CumMin extends RBuiltinNode.Arg1 {
}
cminV[i] = min;
}
return RDataFactory.createDoubleVector(cminV, na.neverSeenNA(), getNamesNode.getNames(v));
return RDataFactory.createDoubleVector(cminV, na.neverSeenNA(), extractNamesNode.execute(v));
}
@Specialization(replaces = "cumminIntSequence")
......@@ -131,6 +131,6 @@ public abstract class CumMin extends RBuiltinNode.Arg1 {
}
cminV[i] = min;
}
return RDataFactory.createIntVector(cminV, na.neverSeenNA(), getNamesNode.getNames(v));
return RDataFactory.createIntVector(cminV, na.neverSeenNA(), extractNamesNode.execute(v));
}
}
......@@ -4,7 +4,7 @@
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Copyright (c) 2014, Purdue University
* Copyright (c) 2014, 2017, Oracle and/or its affiliates
* Copyright (c) 2014, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -21,7 +21,7 @@ import java.util.Arrays;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
......@@ -31,6 +31,8 @@ import com.oracle.truffle.r.runtime.data.RComplexVector;
import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RDoubleVector;
import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RShareable;
import com.oracle.truffle.r.runtime.data.RStringVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.nodes.VectorAccess;
......@@ -40,12 +42,12 @@ import com.oracle.truffle.r.runtime.ops.BinaryArithmetic;
@RBuiltin(name = "cumprod", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = MATH_GROUP_GENERIC, behavior = PURE)
public abstract class CumProd extends RBuiltinNode.Arg1 {
@Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNamesNode = ExtractNamesAttributeNode.create();
@Child private BinaryArithmetic mul = BinaryArithmetic.MULTIPLY.createOperation();
static {
Casts casts = new Casts(CumProd.class);
casts.arg("x").allowNull().mustBe(missingValue().not(), RError.Message.ARGUMENT_EMPTY, 0, "cumsum", 1).mapIf(complexValue().not(), asDoubleVector(true, false, false));
casts.arg("x").allowNull().mustBe(missingValue().not(), RError.Message.ARGUMENT_EMPTY, 0, "cumprod", 1).mapIf(complexValue().not(), asDoubleVector(true, false, false));
}
@Specialization
......@@ -78,7 +80,7 @@ public abstract class CumProd extends RBuiltinNode.Arg1 {
assert !RRuntime.isNA(prev) : "double multiplication should not introduce NAs";
array[iter.getIndex()] = prev;
}
return RDataFactory.createDoubleVector(array, xAccess.na.neverSeenNA(), getNamesNode.getNames(x));
return RDataFactory.createDoubleVector(array, xAccess.na.neverSeenNA(), extractNamesNode.execute(x));
}
}
......@@ -105,7 +107,7 @@ public abstract class CumProd extends RBuiltinNode.Arg1 {
array[iter.getIndex() * 2] = prev.getRealPart();
array[iter.getIndex() * 2 + 1] = prev.getImaginaryPart();
}
return RDataFactory.createComplexVector(array, xAccess.na.neverSeenNA(), getNamesNode.getNames(x));
return RDataFactory.createComplexVector(array, xAccess.na.neverSeenNA(), extractNamesNode.execute(x));
}
}
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -38,7 +38,7 @@ import java.util.Arrays;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
......@@ -49,6 +49,8 @@ import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RDoubleVector;
import com.oracle.truffle.r.runtime.data.RIntVector;
import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RShareable;
import com.oracle.truffle.r.runtime.data.RStringVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
......@@ -60,7 +62,7 @@ import com.oracle.truffle.r.runtime.ops.BinaryArithmetic;
@RBuiltin(name = "cumsum", kind = PRIMITIVE, parameterNames = {"x"}, dispatch = MATH_GROUP_GENERIC, behavior = PURE)
public abstract class CumSum extends RBuiltinNode.Arg1 {
@Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNamesNode = ExtractNamesAttributeNode.create();
@Child private BinaryArithmetic add = BinaryArithmetic.ADD.createOperation();
static {
......@@ -86,17 +88,17 @@ public abstract class CumSum extends RBuiltinNode.Arg1 {
@Specialization(guards = "x.getLength()==0")
protected RAbstractVector cumEmpty(RAbstractComplexVector x) {
return RDataFactory.createComplexVector(new double[0], true, getNamesNode.getNames(x));
return RDataFactory.createComplexVector(new double[0], true, extractNamesNode.execute(x));
}
@Specialization(guards = "x.getLength()==0")
protected RAbstractVector cumEmpty(RAbstractDoubleVector x) {
return RDataFactory.createDoubleVector(new double[0], true, getNamesNode.getNames(x));
return RDataFactory.createDoubleVector(new double[0], true, extractNamesNode.execute(x));
}
@Specialization(guards = "x.getLength()==0")
protected RAbstractVector cumEmpty(RAbstractIntVector x) {
return RDataFactory.createIntVector(new int[0], true, getNamesNode.getNames(x));
return RDataFactory.createIntVector(new int[0], true, extractNamesNode.execute(x));
}
@Specialization(guards = "xAccess.supports(x)")
......@@ -119,7 +121,7 @@ public abstract class CumSum extends RBuiltinNode.Arg1 {
}
array[iter.getIndex()] = prev;
}
return RDataFactory.createIntVector(array, xAccess.na.neverSeenNA() && !add.introducesNA(), getNamesNode.getNames(x));
return RDataFactory.createIntVector(array, xAccess.na.neverSeenNA() && !add.introducesNA(), extractNamesNode.execute(x));
}
}
......@@ -148,7 +150,7 @@ public abstract class CumSum extends RBuiltinNode.Arg1 {
assert !RRuntime.isNA(prev) : "double addition should not introduce NAs";
array[iter.getIndex()] = prev;
}
return RDataFactory.createDoubleVector(array, xAccess.na.neverSeenNA(), getNamesNode.getNames(x));
return RDataFactory.createDoubleVector(array, xAccess.na.neverSeenNA(), extractNamesNode.execute(x));
}
}
......@@ -175,7 +177,7 @@ public abstract class CumSum extends RBuiltinNode.Arg1 {
array[iter.getIndex() * 2] = prev.getRealPart();
array[iter.getIndex() * 2 + 1] = prev.getImaginaryPart();
}
return RDataFactory.createComplexVector(array, xAccess.na.neverSeenNA(), getNamesNode.getNames(x));
return RDataFactory.createComplexVector(array, xAccess.na.neverSeenNA(), extractNamesNode.execute(x));
}
}
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -33,8 +33,8 @@ import com.oracle.truffle.api.dsl.ImportStatic;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
......@@ -59,8 +59,8 @@ public abstract class IsNA extends RBuiltinNode.Arg1 {
@Child private VectorFactory factory = VectorFactory.create();
@Child private GetDimAttributeNode getDimsNode = GetDimAttributeNode.create();
@Child private GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
@Child private GetDimNamesAttributeNode getDimNamesNode = GetDimNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNamesNode = ExtractNamesAttributeNode.create();
@Child private ExtractDimNamesAttributeNode extractDimNamesNode = ExtractDimNamesAttributeNode.create();
static {
Casts.noCasts(IsNA.class);
......@@ -143,7 +143,7 @@ public abstract class IsNA extends RBuiltinNode.Arg1 {
}
data[iter.getIndex()] = RRuntime.asLogical(isNA);
}
return factory.createLogicalVector(data, RDataFactory.COMPLETE_VECTOR, getDimsNode.getDimensions(vector), getNamesNode.getNames(vector), getDimNamesNode.getDimNames(vector));
return factory.createLogicalVector(data, RDataFactory.COMPLETE_VECTOR, getDimsNode.getDimensions(vector), extractNamesNode.execute(vector), extractDimNamesNode.execute(vector));
}
}
......
......@@ -4,7 +4,7 @@
* http://www.gnu.org/licenses/gpl-2.0.html
*
* Copyright (c) 2014, Purdue University
* Copyright (c) 2014, 2017, Oracle and/or its affiliates
* Copyright (c) 2014, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -32,7 +32,7 @@ import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode;
import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode;
import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode;
import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNodeGen;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.builtin.base.LapplyNodeGen.LapplyInternalNodeGen;
import com.oracle.truffle.r.nodes.control.RLengthNode;
......@@ -84,10 +84,10 @@ public abstract class Lapply extends RBuiltinNode.Arg2 {
@Specialization
protected Object lapply(VirtualFrame frame, RAbstractVector vec, RFunction fun,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
Object[] result = lapply.execute(frame, vec, fun);
// set here else it gets overridden by the iterator evaluation
return RDataFactory.createList(result, getNamesNode.getNames(vec));
return RDataFactory.createList(result, extractNamesNode.execute(vec));
}
@Specialization
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -53,6 +53,7 @@ import com.oracle.truffle.r.runtime.data.RDoubleVector;
import com.oracle.truffle.r.runtime.data.RIntVector;
import com.oracle.truffle.r.runtime.data.RList;
import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RShareable;
import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
......@@ -237,10 +238,16 @@ public abstract class MatMult extends RBuiltinNode.Arg2 {
Object dimName1 = RNull.instance;
if (aDimNames != null && aDimNames.getLength() > 0) {
dimName1 = aDimNames.getDataAt(0);
if (dimName1 instanceof RShareable && !((RShareable) dimName1).isShared()) {
((RShareable) dimName1).incRefCount();
}
}
Object dimName2 = RNull.instance;
if (bDimNames != null && bDimNames.getLength() > 1) {
dimName2 = bDimNames.getDataAt(1);
if (dimName2 instanceof RShareable && !((RShareable) dimName2).isShared()) {
((RShareable) dimName2).incRefCount();
}
}
setDimNamesNode.setDimNames(resultVec, RDataFactory.createList(new Object[]{dimName1, dimName2}));
return resultVec;
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -35,8 +35,8 @@ import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.api.profiles.LoopConditionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError.Message;
......@@ -76,8 +76,8 @@ public abstract class NChar extends RBuiltinNode.Arg4 {
@Cached("createBinaryProfile()") ConditionProfile keepNAProfile,
@Cached("create()") GetDimAttributeNode getDimNode,
@Cached("create()") SetDimNamesAttributeNode setDimNamesNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
@Cached("create()") ExtractDimNamesAttributeNode extractDimNamesNode,
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
convertType(type);
boolean keepNA = keepNAProfile.profile(keepNAIn);
int len = vector.getLength();
......@@ -93,8 +93,8 @@ public abstract class NChar extends RBuiltinNode.Arg4 {
result[i] = (int) (Math.log10(x) + 1); // not the fastest one
}
}
RIntVector resultVector = RDataFactory.createIntVector(result, isComplete, getDimNode.getDimensions(vector), getNamesNode.getNames(vector));
RList dimNames = getDimNamesNode.getDimNames(vector);
RIntVector resultVector = RDataFactory.createIntVector(result, isComplete, getDimNode.getDimensions(vector), extractNamesNode.execute(vector));
RList dimNames = extractDimNamesNode.execute(vector);
if (nullDimNamesProfile.profile(dimNames != null)) {
setDimNamesNode.setDimNames(resultVector, dimNames);
}
......@@ -109,8 +109,8 @@ public abstract class NChar extends RBuiltinNode.Arg4 {
@Cached("createBinaryProfile()") ConditionProfile keepNAProfile,
@Cached("create()") GetDimAttributeNode getDimNode,
@Cached("create()") SetDimNamesAttributeNode setDimNamesNode,
@Cached("create()") GetDimNamesAttributeNode getDimNamesNode,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
@Cached("create()") ExtractDimNamesAttributeNode extractDimNamesNode,
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
convertType(type);
boolean keepNA = keepNAProfile.profile(keepNAIn);
int len = vector.getLength();
......@@ -126,8 +126,8 @@ public abstract class NChar extends RBuiltinNode.Arg4 {
result[i] = item.length();
}
}
RIntVector resultVector = RDataFactory.createIntVector(result, isComplete, getDimNode.getDimensions(vector), getNamesNode.getNames(vector));
RList dimNames = getDimNamesNode.getDimNames(vector);
RIntVector resultVector = RDataFactory.createIntVector(result, isComplete, getDimNode.getDimensions(vector), extractNamesNode.execute(vector));
RList dimNames = extractDimNamesNode.execute(vector);
if (nullDimNamesProfile.profile(dimNames != null)) {
setDimNamesNode.setDimNames(resultVector, dimNames);
}
......
......@@ -5,7 +5,7 @@
*
* Copyright (c) 1995, 1996, Robert Gentleman and Ross Ihaka
* Copyright (c) 1998-2013, The R Core Team
* Copyright (c) 2014, 2017, Oracle and/or its affiliates
* Copyright (c) 2014, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -34,7 +34,7 @@ import java.util.HashMap;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.unary.CastToVectorNode;
import com.oracle.truffle.r.nodes.unary.CastToVectorNodeGen;
......@@ -64,7 +64,7 @@ public abstract class Scan extends RBuiltinNode.Arg19 {
private static final int NO_COMCHAR = 100000; /* won't occur even in Unicode */
private final NACheck naCheck = NACheck.create();
@Child private GetNamesAttributeNode getNames = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNames = ExtractNamesAttributeNode.create();
@Child private CastToVectorNode castVector;
......@@ -315,7 +315,7 @@ public abstract class Scan extends RBuiltinNode.Arg19 {
list.updateDataAt(i, vec.createEmptySameType(blockSize, RDataFactory.COMPLETE_VECTOR), null);
}
}
list.setNames(getNames.getNames(what));
list.setNames(extractNames.execute(what));
naCheck.enable(true);
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -29,10 +29,12 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.api.profiles.IntValueProfile;
import com.oracle.truffle.api.profiles.ValueProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetRowNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.function.opt.UpdateShareableChildValueNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.builtins.RBuiltin;
......@@ -46,8 +48,10 @@ public abstract class ShortRowNames extends RBuiltinNode.Arg2 {
private final BranchProfile naValueMet = BranchProfile.create();
private final ValueProfile operandTypeProfile = ValueProfile.createClassProfile();
private final ConditionProfile nonNullValue = ConditionProfile.createBinaryProfile();
@Child private GetRowNamesAttributeNode getRowNamesNode = GetRowNamesAttributeNode.create();
@Child private UpdateShareableChildValueNode updateRefCount = UpdateShareableChildValueNode.create();
static {
Casts casts = new Casts(ShortRowNames.class);
......@@ -73,6 +77,10 @@ public abstract class ShortRowNames extends RBuiltinNode.Arg2 {
if (type >= 1) {
int n = calculateN(rowNames);
rowNames = type == 1 ? n : Math.abs(n);
} else {
if (nonNullValue.profile(rowNames != null)) {
updateRefCount.updateState(operand, rowNames);
}
}
if (rowNames == null) {
......
/*
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2018, 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
......@@ -34,7 +34,7 @@ import com.oracle.truffle.api.profiles.LoopConditionProfile;
import com.oracle.truffle.r.nodes.attributes.CopyOfRegAttributesNode;
import com.oracle.truffle.r.nodes.attributes.CopyOfRegAttributesNodeGen;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.profile.VectorLengthProfile;
import com.oracle.truffle.r.runtime.RRuntime;
......@@ -52,7 +52,7 @@ public abstract class ToLowerOrUpper {
private final VectorLengthProfile lengthProfile = VectorLengthProfile.create();
private final LoopConditionProfile loopProfile = LoopConditionProfile.createCountingProfile();
private final NACheck na = NACheck.create();
@Child private GetNamesAttributeNode getNames = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractNames = ExtractNamesAttributeNode.create();
@Child private CopyOfRegAttributesNode copyAttributes = CopyOfRegAttributesNodeGen.create();
@Child private GetDimAttributeNode getDimNode = GetDimAttributeNode.create();
......@@ -83,7 +83,7 @@ public abstract class ToLowerOrUpper {
String value = vector.getDataAt(i);
stringVector[i] = elementFunction(value, i, function);
}
RStringVector result = RDataFactory.createStringVector(stringVector, vector.isComplete(), getDimNode.getDimensions(vector), getNames.getNames(vector));
RStringVector result = RDataFactory.createStringVector(stringVector, vector.isComplete(), getDimNode.getDimensions(vector), extractNames.execute(vector));
copyAttributes.execute(vector, result);
return result;
}
......
......@@ -6,7 +6,7 @@
* Copyright (c) 1995, 1996, 1997 Robert Gentleman and Ross Ihaka
* Copyright (c) 1995-2014, The R Core Team
* Copyright (c) 2002-2008, The R Foundation
* Copyright (c) 2015, 2017, Oracle and/or its affiliates
* Copyright (c) 2015, 2018, Oracle and/or its affiliates
*
* All rights reserved.
*/
......@@ -26,7 +26,7 @@ import com.oracle.truffle.r.nodes.attributes.InitAttributesNode;
import com.oracle.truffle.r.nodes.attributes.SetFixedAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.function.opt.ReuseNonSharedNode;
import com.oracle.truffle.r.nodes.profile.VectorLengthProfile;
......@@ -58,7 +58,7 @@ public abstract class Transpose extends RBuiltinNode.Arg1 {
@Child private SetFixedAttributeNode putDimensions = SetFixedAttributeNode.createDim();
@Child private SetFixedAttributeNode putDimNames = SetFixedAttributeNode.createDimNames();
@Child private GetDimNamesAttributeNode getDimNamesNode = GetDimNamesAttributeNode.create();
@Child private GetNamesAttributeNode getAxisNamesNode = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractAxisNamesNode = ExtractNamesAttributeNode.create();
@Child private GetDimAttributeNode getDimNode = GetDimAttributeNode.create();
@Child private ReuseNonSharedNode reuseNonShared = ReuseNonSharedNode.create();
......@@ -224,7 +224,7 @@ public abstract class Transpose extends RBuiltinNode.Arg1 {
if (dimNames != null) {
hasDimNamesProfile.enter();
assert dimNames.getLength() == 2;
RStringVector axisNames = getAxisNamesNode.getNames(dimNames);
RStringVector axisNames = extractAxisNamesNode.execute(dimNames);
RStringVector transAxisNames = axisNames == null ? null : RDataFactory.createStringVector(new String[]{axisNames.getDataAt(1), axisNames.getDataAt(0)}, true);
RList newDimNames = RDataFactory.createList(new Object[]{dimNames.getDataAt(1), dimNames.getDataAt(0)}, transAxisNames);
putDimNames.execute(dest.getAttributes(), newDimNames);
......
/*
* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2018, 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
......@@ -34,7 +34,7 @@ import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetNamesAttributeNode;
......@@ -96,8 +96,8 @@ public abstract class VApply extends RBuiltinNode.Arg4 {
@Child private CastLogicalNode castLogical;
@Child private CastStringNode castString;
@Child private SetDimAttributeNode setDimNode;
@Child private GetNamesAttributeNode getColNamesNode = GetNamesAttributeNode.create();
@Child private GetNamesAttributeNode getRowNamesNode = GetNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractColNamesNode = ExtractNamesAttributeNode.create();
@Child private ExtractNamesAttributeNode extractRowNamesNode = ExtractNamesAttributeNode.create();
@Child private SetDimNamesAttributeNode setDimNamesNode = SetDimNamesAttributeNode.create();
@Child private SetNamesAttributeNode setNamesNode = SetNamesAttributeNode.create();
......@@ -210,7 +210,7 @@ public abstract class VApply extends RBuiltinNode.Arg4 {
if (useNamesProfile.profile(useNames)) {
// the names from the input vector are used as the column names in the result
RStringVector names = getColNamesNode.getNames(vecMat);
RStringVector names = extractColNamesNode.execute(vecMat);
RStringVector colNames = null;
if (names != null) {
colNames = names;
......@@ -222,7 +222,7 @@ public abstract class VApply extends RBuiltinNode.Arg4 {
// take the names from the first input vector and use it as the row names in the
// result
Object firstVec = applyResult[0];
Object rn = getRowNamesNode.getNames(firstVec);
Object rn = extractRowNamesNode.execute(firstVec);
rowNames = rn == null ? RNull.instance : rn;
}
if (colNames != null) {
......@@ -230,7 +230,7 @@ public abstract class VApply extends RBuiltinNode.Arg4 {
}
}
} else if (useNamesProfile.profile(useNames)) {
RStringVector names = getColNamesNode.getNames(vecMat);
RStringVector names = extractColNamesNode.execute(vecMat);
RStringVector newNames = null;
if (names != null) {
newNames = names;
......
/*
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2018, 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
......@@ -26,7 +26,7 @@ import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.access.vector.PositionsCheckNode.PositionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractNamesAttributeNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RError.Message;
import com.oracle.truffle.r.runtime.RRuntime;
......@@ -60,7 +60,7 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
@Specialization
protected RAbstractVector doLogical(PositionProfile statistics, int dimSize, RAbstractLogicalVector position, int positionLength,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
positionNACheck.enable(position);
byte value = position.getDataAt(0);
if (positionLength != 1) {
......@@ -76,12 +76,12 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
}
}
return doIntegerImpl(statistics, dimSize, positionNACheck.convertLogicalToInt(value), position, getNamesNode);
return doIntegerImpl(statistics, dimSize, positionNACheck.convertLogicalToInt(value), position, extractNamesNode);
}
@Specialization
protected RAbstractVector doInteger(PositionProfile profile, int dimSize, RAbstractIntVector position, int positionLength,
@Cached("create()") GetNamesAttributeNode getNamesNode) {
@Cached("create()") ExtractNamesAttributeNode extractNamesNode) {
if (positionLength != 1) {
error.enter();
Message message;
......@@ -99,10 +99,10 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
}
assert positionLength == 1;
positionNACheck.enable(position);
return doIntegerImpl(profile, dimSize, position.getDataAt(0), position, getNamesNode);
return doIntegerImpl(profile, dimSize, position.getDataAt(0), position, extractNamesNode);
}
private RAbstractVector doIntegerImpl(PositionProfile profile, int dimSize, int value, RAbstractVector originalVector, GetNamesAttributeNode getNamesNode) {
private RAbstractVector doIntegerImpl(PositionProfile profile, int dimSize, int value, RAbstractVector originalVector, ExtractNamesAttributeNode extractNamesNode) {
int result;
if (greaterZero.profile(value > 0)) {
// fast path
......@@ -119,7 +119,7 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
}
profile.selectedPositionsCount = 1;
RStringVector names = getNamesNode.getNames(originalVector);
RStringVector names = extractNamesNode.execute(originalVector);
if (names != null) {
return RDataFactory.createIntVector(new int[]{result}, !profile.containsNA, names);
} else {
......
/*
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2018, 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
......@@ -28,6 +28,7 @@ import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.profiles.BranchProfile;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.ExtractDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetDimNamesAttributeNode;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetNamesAttributeNode;
......@@ -52,6 +53,7 @@ public abstract class CopyAttributesNode extends RBaseNode {
@Child protected HasFixedAttributeNode hasDimNode = HasFixedAttributeNode.createDim();
@Child protected GetDimNamesAttributeNode getDimNamesNode = GetDimNamesAttributeNode.create();
@Child protected ExtractDimNamesAttributeNode extractDimNamesNode = ExtractDimNamesAttributeNode.create();
@Child protected GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
protected CopyAttributesNode(boolean copyAllAttributes) {
......@@ -181,7 +183,7 @@ public abstract class CopyAttributesNode extends RBaseNode {
putDim.execute(initAttributes.execute(result), RDataFactory.createIntVector(newDimensions, RDataFactory.COMPLETE_VECTOR));
if (result != left) {
RList newDimNames = getDimNamesNode.getDimNames(left);
RList newDimNames = extractDimNamesNode.execute(left);
if (hasDimNames.profile(newDimNames != null)) {
putDimNames.execute(result.getAttributes(), newDimNames);
......@@ -189,7 +191,7 @@ public abstract class CopyAttributesNode extends RBaseNode {
return result;
}
if (result != right) {
newDimNames = getDimNamesNode.getDimNames(right);
newDimNames = extractDimNamesNode.execute(right);
if (hasDimNames.profile(newDimNames != null)) {
setDimNamesNode.setDimNames(result, newDimNames);
}
......@@ -247,7 +249,7 @@ public abstract class CopyAttributesNode extends RBaseNode {
RVector.verifyDimensions(result.getLength(), newDimensions, this);
putDim.execute(initAttributes.execute(result), RDataFactory.createIntVector(newDimensions, RDataFactory.COMPLETE_VECTOR));
if (rightNotResult) {
RList newDimNames = getDimNamesNode.getDimNames(right);
RList newDimNames = extractDimNamesNode.execute(right);
if (hasDimNames.profile(newDimNames != null)) {
setDimNamesNode.setDimNames(result, newDimNames);
}
......@@ -297,7 +299,7 @@ public abstract class CopyAttributesNode extends RBaseNode {
}
putDim.execute(initAttributes.execute(result), RDataFactory.createIntVector(newDimensions, RDataFactory.COMPLETE_VECTOR));
if (left != result) {
RList newDimNames = getDimNamesNode.getDimNames(left);
RList newDimNames = extractDimNamesNode.execute(left);
if (hasDimNames.profile(newDimNames != null)) {
setDimNamesNode.setDimNames(result, newDimNames);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment