Skip to content
Snippets Groups Projects
Commit e349f605 authored by Mick Jordan's avatar Mick Jordan
Browse files

Merge pull request #644 in G/fastr from ~MICK.JORDAN_ORACLE.COM/fastr:feature/ffi to master

* commit '84b2ac54':
  add RAbstractAtomicVector interface
parents 784c2295 84b2ac54
Branches
No related tags found
No related merge requests found
Showing
with 161 additions and 27 deletions
...@@ -31,6 +31,7 @@ import com.oracle.truffle.r.runtime.RInternalError; ...@@ -31,6 +31,7 @@ import com.oracle.truffle.r.runtime.RInternalError;
import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.data.RSymbol; import com.oracle.truffle.r.runtime.data.RSymbol;
import com.oracle.truffle.r.runtime.data.RTypesFlatLayout; import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper; import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper;
...@@ -38,6 +39,8 @@ import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper; ...@@ -38,6 +39,8 @@ import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper;
public abstract class AsCharNode extends FFIUpCallNode.Arg1 { public abstract class AsCharNode extends FFIUpCallNode.Arg1 {
private static final CharSXPWrapper CharSXPWrapper_NA = CharSXPWrapper.create(RRuntime.STRING_NA); private static final CharSXPWrapper CharSXPWrapper_NA = CharSXPWrapper.create(RRuntime.STRING_NA);
public abstract CharSXPWrapper execute(Object obj);
@Specialization @Specialization
protected CharSXPWrapper asChar(CharSXPWrapper obj) { protected CharSXPWrapper asChar(CharSXPWrapper obj) {
return obj; return obj;
...@@ -57,10 +60,9 @@ public abstract class AsCharNode extends FFIUpCallNode.Arg1 { ...@@ -57,10 +60,9 @@ public abstract class AsCharNode extends FFIUpCallNode.Arg1 {
return CharSXPWrapper.create(obj.getName()); return CharSXPWrapper.create(obj.getName());
} }
@Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)") @Specialization(guards = "obj.getLength() > 0")
protected CharSXPWrapper asChar(Object obj, protected CharSXPWrapper asChar(RAbstractAtomicVector obj, //
@Cached("createNonPreserving()") CastStringNode castStringNode, @Cached("createNonPreserving()") CastStringNode castStringNode) {
@SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
Object castObj = castStringNode.executeString(obj); Object castObj = castStringNode.executeString(obj);
if (castObj instanceof String) { if (castObj instanceof String) {
return CharSXPWrapper.create((String) castObj); return CharSXPWrapper.create((String) castObj);
...@@ -76,4 +78,7 @@ public abstract class AsCharNode extends FFIUpCallNode.Arg1 { ...@@ -76,4 +78,7 @@ public abstract class AsCharNode extends FFIUpCallNode.Arg1 {
return CharSXPWrapper_NA; return CharSXPWrapper_NA;
} }
public static AsCharNode create() {
return AsCharNodeGen.create();
}
} }
...@@ -30,6 +30,7 @@ import com.oracle.truffle.r.nodes.unary.CastIntegerNode; ...@@ -30,6 +30,7 @@ import com.oracle.truffle.r.nodes.unary.CastIntegerNode;
import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RInternalError;
import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.data.RTypesFlatLayout; import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
...@@ -40,6 +41,8 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; ...@@ -40,6 +41,8 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
@TypeSystemReference(RTypesFlatLayout.class) @TypeSystemReference(RTypesFlatLayout.class)
public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 { public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 {
public abstract int execute(Object obj);
@Specialization @Specialization
protected int asInteger(int obj) { protected int asInteger(int obj) {
return obj; return obj;
...@@ -66,10 +69,9 @@ public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 { ...@@ -66,10 +69,9 @@ public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 {
return obj.getDataAt(0); return obj.getDataAt(0);
} }
@Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)") @Specialization(guards = "obj.getLength() > 0")
protected int asReal(Object obj, protected int asReal(RAbstractAtomicVector obj,
@Cached("createNonPreserving()") CastIntegerNode castIntegerNode, @Cached("createNonPreserving()") CastIntegerNode castIntegerNode) {
@SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
Object castObj = castIntegerNode.executeInt(obj); Object castObj = castIntegerNode.executeInt(obj);
if (castObj instanceof Integer) { if (castObj instanceof Integer) {
return (Integer) castObj; return (Integer) castObj;
...@@ -85,4 +87,8 @@ public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 { ...@@ -85,4 +87,8 @@ public abstract class AsIntegerNode extends FFIUpCallNode.Arg1 {
return RRuntime.INT_NA; return RRuntime.INT_NA;
} }
public static AsIntegerNode create() {
return AsIntegerNodeGen.create();
}
} }
...@@ -24,19 +24,20 @@ package com.oracle.truffle.r.nodes.ffi; ...@@ -24,19 +24,20 @@ package com.oracle.truffle.r.nodes.ffi;
import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.ImportStatic;
import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.dsl.TypeSystemReference; import com.oracle.truffle.api.dsl.TypeSystemReference;
import com.oracle.truffle.r.nodes.unary.CastLogicalNode; import com.oracle.truffle.r.nodes.unary.CastLogicalNode;
import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RInternalError;
import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.data.RTypesFlatLayout; import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
@TypeSystemReference(RTypesFlatLayout.class) @TypeSystemReference(RTypesFlatLayout.class)
@ImportStatic(IsVectorAtomicNodeLG0.class)
public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 { public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 {
public abstract int execute(Object obj);
@Specialization @Specialization
protected int asLogical(byte b) { protected int asLogical(byte b) {
return b; return b;
...@@ -50,10 +51,9 @@ public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 { ...@@ -50,10 +51,9 @@ public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 {
return obj.getDataAt(0); return obj.getDataAt(0);
} }
@Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)") @Specialization(guards = "obj.getLength() > 0")
protected int asLogical(Object obj, protected int asLogical(RAbstractAtomicVector obj,
@Cached("createNonPreserving()") CastLogicalNode castLogicalNode, @Cached("createNonPreserving()") CastLogicalNode castLogicalNode) {
@SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
Object castObj = castLogicalNode.execute(obj); Object castObj = castLogicalNode.execute(obj);
if (castObj instanceof Byte) { if (castObj instanceof Byte) {
return (byte) castObj; return (byte) castObj;
...@@ -69,4 +69,8 @@ public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 { ...@@ -69,4 +69,8 @@ public abstract class AsLogicalNode extends FFIUpCallNode.Arg1 {
return RRuntime.INT_NA; return RRuntime.INT_NA;
} }
public static AsLogicalNode create() {
return AsLogicalNodeGen.create();
}
} }
...@@ -14,13 +14,13 @@ package com.oracle.truffle.r.nodes.ffi; ...@@ -14,13 +14,13 @@ package com.oracle.truffle.r.nodes.ffi;
import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.ImportStatic;
import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.dsl.TypeSystemReference; import com.oracle.truffle.api.dsl.TypeSystemReference;
import com.oracle.truffle.r.nodes.unary.CastDoubleNode; import com.oracle.truffle.r.nodes.unary.CastDoubleNode;
import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RInternalError;
import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.data.RTypesFlatLayout; import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
import com.oracle.truffle.r.runtime.data.model.RAbstractAtomicVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
...@@ -30,7 +30,6 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; ...@@ -30,7 +30,6 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
* return {@code NA}. * return {@code NA}.
*/ */
@TypeSystemReference(RTypesFlatLayout.class) @TypeSystemReference(RTypesFlatLayout.class)
@ImportStatic(IsVectorAtomicNodeLG0.class)
public abstract class AsRealNode extends FFIUpCallNode.Arg1 { public abstract class AsRealNode extends FFIUpCallNode.Arg1 {
public abstract double execute(Object obj); public abstract double execute(Object obj);
...@@ -61,10 +60,9 @@ public abstract class AsRealNode extends FFIUpCallNode.Arg1 { ...@@ -61,10 +60,9 @@ public abstract class AsRealNode extends FFIUpCallNode.Arg1 {
return obj.getDataAt(0); return obj.getDataAt(0);
} }
@Specialization(guards = "isVectorAtomicNodeLG0.execute(obj)") @Specialization(guards = "obj.getLength() > 0")
protected double asReal(Object obj, protected double asReal(RAbstractAtomicVector obj,
@Cached("createNonPreserving()") CastDoubleNode castDoubleNode, @Cached("createNonPreserving()") CastDoubleNode castDoubleNode) {
@SuppressWarnings("unused") @Cached("create()") IsVectorAtomicNodeLG0 isVectorAtomicNodeLG0) {
Object castObj = castDoubleNode.executeDouble(obj); Object castObj = castDoubleNode.executeDouble(obj);
if (castObj instanceof Double) { if (castObj instanceof Double) {
return (double) castObj; return (double) castObj;
...@@ -80,4 +78,7 @@ public abstract class AsRealNode extends FFIUpCallNode.Arg1 { ...@@ -80,4 +78,7 @@ public abstract class AsRealNode extends FFIUpCallNode.Arg1 {
return RRuntime.DOUBLE_NA; return RRuntime.DOUBLE_NA;
} }
public static AsRealNode create() {
return AsRealNodeGen.create();
}
} }
/* /*
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.dsl.TypeCheck; ...@@ -28,6 +28,7 @@ import com.oracle.truffle.api.dsl.TypeCheck;
import com.oracle.truffle.api.dsl.TypeSystem; import com.oracle.truffle.api.dsl.TypeSystem;
import com.oracle.truffle.api.dsl.internal.DSLOptions; import com.oracle.truffle.api.dsl.internal.DSLOptions;
import com.oracle.truffle.api.dsl.internal.DSLOptions.DSLGenerator; import com.oracle.truffle.api.dsl.internal.DSLOptions.DSLGenerator;
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.RAbstractComplexVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
...@@ -300,4 +301,77 @@ public class RTypesFlatLayout { ...@@ -300,4 +301,77 @@ public class RTypesFlatLayout {
public static RMissing toRMissing(@SuppressWarnings("unused") REmpty empty) { public static RMissing toRMissing(@SuppressWarnings("unused") REmpty empty) {
return RMissing.instance; return RMissing.instance;
} }
// RAbstractAtomicVector
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(int value) {
return RDataFactory.createIntVectorFromScalar(value);
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(double value) {
return RDataFactory.createDoubleVectorFromScalar(value);
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RRaw value) {
return RDataFactory.createRawVectorFromScalar(value);
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(byte value) {
return RDataFactory.createLogicalVectorFromScalar(value);
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RComplex value) {
return RDataFactory.createComplexVectorFromScalar(value);
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(String value) {
return RDataFactory.createStringVectorFromScalar(value);
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RIntVector vector) {
return vector;
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RDoubleVector vector) {
return vector;
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RLogicalVector vector) {
return vector;
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RComplexVector vector) {
return vector;
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RRawVector vector) {
return vector;
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RStringVector vector) {
return vector;
}
@ImplicitCast
public static RAbstractAtomicVector toAbstractAtomicVector(RIntSequence vector) {
return vector;
}
@ImplicitCast
public static RAbstractVector toAbstractAtomicVector(RDoubleSequence vector) {
return vector;
}
} }
/* /*
* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2017, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -20,68 +20,25 @@ ...@@ -20,68 +20,25 @@
* or visit www.oracle.com if you need additional information or have any * or visit www.oracle.com if you need additional information or have any
* questions. * questions.
*/ */
package com.oracle.truffle.r.nodes.ffi; package com.oracle.truffle.r.runtime.data.model;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.dsl.TypeSystemReference;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.r.runtime.data.RTypesFlatLayout; import com.oracle.truffle.r.runtime.data.RTypesFlatLayout;
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;
import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector;
import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
/** /**
* Implements the GNU R function {@code isVectorAtomic} and checks whether length is > 0. * Distinguishes what R considers an "atomic" vector, e.g. {@code integer()} from other "vectors",
* e.g., {@code list()}. Specifically these are the FastR atomic vector types:
* <ul>
* <li>{@link RAbstractIntVector}</li>
* <li>{@link RAbstractLogicalVector}</li>
* <li>{@link RAbstractDoubleVector}</li>
* <li>{@link RAbstractComplexVector}</li>
* <li>{@link RAbstractStringVector}</li>
* <li>{@link RAbstractRawVector}</li>
* </ul>
*
* N.B. To use this in a {@link Specialization} you must use {@link RTypesFlatLayout}.
*/ */
@TypeSystemReference(RTypesFlatLayout.class) public interface RAbstractAtomicVector extends RAbstractVector {
public abstract class IsVectorAtomicNodeLG0 extends Node {
public abstract boolean execute(Object obj);
@Specialization
protected boolean isVectorAtomicNode(@SuppressWarnings("unused") Byte obj) {
return true;
}
@Specialization
protected boolean isVectorAtomicNode(@SuppressWarnings("unused") String obj) {
return true;
}
@Specialization
protected boolean isVectorAtomicNode(RAbstractLogicalVector obj) {
return obj.getLength() > 0;
}
@Specialization
protected boolean isVectorAtomicNode(RAbstractIntVector obj) {
return obj.getLength() > 0;
}
@Specialization
protected boolean isVectorAtomicNode(RAbstractDoubleVector obj) {
return obj.getLength() > 0;
}
@Specialization
protected boolean isVectorAtomicNode(RAbstractStringVector obj) {
return obj.getLength() > 0;
}
@Specialization
protected boolean isVectorAtomicNode(RAbstractComplexVector obj) {
return obj.getLength() > 0;
}
@Fallback
protected boolean isVectorAtomicNode(@SuppressWarnings("unused") Object obj) {
return false;
}
public static IsVectorAtomicNodeLG0 create() {
return IsVectorAtomicNodeLG0NodeGen.create();
}
} }
...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType; ...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.data.RComplex; import com.oracle.truffle.r.runtime.data.RComplex;
import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RComplexVector;
public interface RAbstractComplexVector extends RAbstractVector { public interface RAbstractComplexVector extends RAbstractAtomicVector {
@Override @Override
default Object getDataAtAsObject(int index) { default Object getDataAtAsObject(int index) {
......
...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType; ...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.data.RDouble; import com.oracle.truffle.r.runtime.data.RDouble;
import com.oracle.truffle.r.runtime.data.RDoubleVector; import com.oracle.truffle.r.runtime.data.RDoubleVector;
public interface RAbstractDoubleVector extends RAbstractVector { public interface RAbstractDoubleVector extends RAbstractAtomicVector {
@Override @Override
default Object getDataAtAsObject(int index) { default Object getDataAtAsObject(int index) {
......
...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType; ...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.data.RIntVector; import com.oracle.truffle.r.runtime.data.RIntVector;
import com.oracle.truffle.r.runtime.data.RInteger; import com.oracle.truffle.r.runtime.data.RInteger;
public interface RAbstractIntVector extends RAbstractVector { public interface RAbstractIntVector extends RAbstractAtomicVector {
@Override @Override
default Object getDataAtAsObject(int index) { default Object getDataAtAsObject(int index) {
......
...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType; ...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.data.RLogical; import com.oracle.truffle.r.runtime.data.RLogical;
import com.oracle.truffle.r.runtime.data.RLogicalVector; import com.oracle.truffle.r.runtime.data.RLogicalVector;
public interface RAbstractLogicalVector extends RAbstractVector { public interface RAbstractLogicalVector extends RAbstractAtomicVector {
@Override @Override
default Object getDataAtAsObject(int index) { default Object getDataAtAsObject(int index) {
......
...@@ -26,7 +26,7 @@ import com.oracle.truffle.r.runtime.RType; ...@@ -26,7 +26,7 @@ import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.data.RRaw; import com.oracle.truffle.r.runtime.data.RRaw;
import com.oracle.truffle.r.runtime.data.RRawVector; import com.oracle.truffle.r.runtime.data.RRawVector;
public interface RAbstractRawVector extends RAbstractVector { public interface RAbstractRawVector extends RAbstractAtomicVector {
@Override @Override
default Object getDataAtAsObject(int index) { default Object getDataAtAsObject(int index) {
......
...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType; ...@@ -27,7 +27,7 @@ import com.oracle.truffle.r.runtime.RType;
import com.oracle.truffle.r.runtime.data.RString; import com.oracle.truffle.r.runtime.data.RString;
import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.RStringVector;
public interface RAbstractStringVector extends RAbstractVector { public interface RAbstractStringVector extends RAbstractAtomicVector {
@Override @Override
default Object getDataAtAsObject(int index) { default Object getDataAtAsObject(int index) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment