diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplex.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplex.java index 706eaea5681b5d36c5c10ced5474c17c2280685f..ee30fb24e463077c39f466949f38aac9d18fcb92 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplex.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplex.java @@ -155,21 +155,21 @@ public final class RComplex extends RScalarVector implements RAbstractComplexVec } @Override - protected RComplex getComplex(Object store, int index) { + protected RComplex getComplexImpl(AccessIterator accessIter, int index) { assert index == 0; - return (RComplex) store; + return (RComplex) accessIter.getStore(); } @Override - protected double getComplexR(Object store, int index) { + protected double getComplexRImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RComplex) store).realPart; + return ((RComplex) accessIter.getStore()).realPart; } @Override - protected double getComplexI(Object store, int index) { + protected double getComplexIImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RComplex) store).imaginaryPart; + return ((RComplex) accessIter.getStore()).imaginaryPart; } } @@ -180,21 +180,21 @@ public final class RComplex extends RScalarVector implements RAbstractComplexVec private static final SlowPathFromComplexAccess SLOW_PATH_ACCESS = new SlowPathFromComplexAccess() { @Override - protected RComplex getComplex(Object store, int index) { + protected RComplex getComplexImpl(AccessIterator accessIter, int index) { assert index == 0; - return (RComplex) store; + return (RComplex) accessIter.getStore(); } @Override - protected double getComplexR(Object store, int index) { + protected double getComplexRImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RComplex) store).realPart; + return ((RComplex) accessIter.getStore()).realPart; } @Override - protected double getComplexI(Object store, int index) { + protected double getComplexIImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RComplex) store).imaginaryPart; + return ((RComplex) accessIter.getStore()).imaginaryPart; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java index 562c9181daf0f73d73843aec03ebbd863140e969..510bf7d39c6864c9a9b404a51d3c7345efa28d51 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RComplexVector.java @@ -235,22 +235,23 @@ public final class RComplexVector extends RVector<double[]> implements RAbstract } @Override - protected RComplex getComplex(Object store, int index) { - return RComplex.valueOf(getComplexR(store, index), getComplexI(store, index)); + protected RComplex getComplexImpl(AccessIterator accessIter, int index) { + return RComplex.valueOf(getComplexRImpl(accessIter, index), getComplexIImpl(accessIter, index)); } @Override - protected double getComplexR(Object store, int index) { - return hasStore ? ((double[]) store)[index * 2] : NativeDataAccess.getDoubleNativeMirrorData(store, index * 2); + protected double getComplexRImpl(AccessIterator accessIter, int index) { + return hasStore ? ((double[]) accessIter.getStore())[index * 2] : NativeDataAccess.getDoubleNativeMirrorData(accessIter.getStore(), index * 2); } @Override - protected double getComplexI(Object store, int index) { - return hasStore ? ((double[]) store)[index * 2 + 1] : NativeDataAccess.getDoubleNativeMirrorData(store, index * 2 + 1); + protected double getComplexIImpl(AccessIterator accessIter, int index) { + return hasStore ? ((double[]) accessIter.getStore())[index * 2 + 1] : NativeDataAccess.getDoubleNativeMirrorData(accessIter.getStore(), index * 2 + 1); } @Override - protected void setComplex(Object store, int index, double real, double imaginary) { + protected void setComplexImpl(AccessIterator accessIter, int index, double real, double imaginary) { + Object store = accessIter.getStore(); if (hasStore) { ((double[]) store)[index * 2] = real; ((double[]) store)[index * 2 + 1] = imaginary; @@ -268,26 +269,26 @@ public final class RComplexVector extends RVector<double[]> implements RAbstract private static final SlowPathFromComplexAccess SLOW_PATH_ACCESS = new SlowPathFromComplexAccess() { @Override - protected RComplex getComplex(Object store, int index) { - RComplexVector vector = (RComplexVector) store; + protected RComplex getComplexImpl(AccessIterator accessIter, int index) { + RComplexVector vector = (RComplexVector) accessIter.getStore(); return NativeDataAccess.getData(vector, vector.data, index); } @Override - protected double getComplexR(Object store, int index) { - RComplexVector vector = (RComplexVector) store; + protected double getComplexRImpl(AccessIterator accessIter, int index) { + RComplexVector vector = (RComplexVector) accessIter.getStore(); return NativeDataAccess.getDataR(vector, vector.data, index); } @Override - protected double getComplexI(Object store, int index) { - RComplexVector vector = (RComplexVector) store; + protected double getComplexIImpl(AccessIterator accessIter, int index) { + RComplexVector vector = (RComplexVector) accessIter.getStore(); return NativeDataAccess.getDataI(vector, vector.data, index); } @Override - protected void setComplex(Object store, int index, double real, double imaginary) { - RComplexVector vector = (RComplexVector) store; + protected void setComplexImpl(AccessIterator accessIter, int index, double real, double imaginary) { + RComplexVector vector = (RComplexVector) accessIter.getStore(); NativeDataAccess.setData(vector, vector.data, index, real, imaginary); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDouble.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDouble.java index dd7874e373050edf7677392c10b9ad46423ee805..0b143cfd993783560b03465abdce95088d9d6647 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDouble.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDouble.java @@ -111,9 +111,9 @@ public final class RDouble extends RScalarVector implements RAbstractDoubleVecto } @Override - protected double getDouble(Object store, int index) { + protected double getDoubleImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RDouble) store).value; + return ((RDouble) accessIter.getStore()).value; } } @@ -124,9 +124,9 @@ public final class RDouble extends RScalarVector implements RAbstractDoubleVecto private static final SlowPathFromDoubleAccess SLOW_PATH_ACCESS = new SlowPathFromDoubleAccess() { @Override - protected double getDouble(Object store, int index) { + protected double getDoubleImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RDouble) store).value; + return ((RDouble) accessIter.getStore()).value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleSequence.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleSequence.java index 74ae82f0bdc166e9b48f43bf3b88935ef3966fbc..22f40c18d3425405c1c34426dd04515a5befc222 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleSequence.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleSequence.java @@ -146,8 +146,8 @@ public final class RDoubleSequence extends RSequence implements RAbstractDoubleV } @Override - protected double getDouble(Object store, int index) { - RDoubleSequence vector = (RDoubleSequence) store; + protected double getDoubleImpl(AccessIterator accessIter, int index) { + RDoubleSequence vector = (RDoubleSequence) accessIter.getStore(); assert index >= 0 && index < vector.getLength(); return vector.start + vector.stride * index; } @@ -160,8 +160,8 @@ public final class RDoubleSequence extends RSequence implements RAbstractDoubleV private static final SlowPathFromDoubleAccess SLOW_PATH_ACCESS = new SlowPathFromDoubleAccess() { @Override - protected double getDouble(Object store, int index) { - RDoubleSequence vector = (RDoubleSequence) store; + protected double getDoubleImpl(AccessIterator accessIter, int index) { + RDoubleSequence vector = (RDoubleSequence) accessIter.getStore(); assert index >= 0 && index < vector.getLength(); return vector.start + vector.stride * index; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleVector.java index 816427bf24305f3db1e9f1c4fe7c74c0fcd803e7..d07923b084b146abf7c0b62b05bd7a61edfb56f3 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleVector.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDoubleVector.java @@ -260,16 +260,16 @@ public final class RDoubleVector extends RVector<double[]> implements RAbstractD } @Override - protected double getDouble(Object store, int index) { - return hasStore ? ((double[]) store)[index] : NativeDataAccess.getDoubleNativeMirrorData(store, index); + protected double getDoubleImpl(AccessIterator accessIter, int index) { + return hasStore ? ((double[]) accessIter.getStore())[index] : NativeDataAccess.getDoubleNativeMirrorData(accessIter.getStore(), index); } @Override - protected void setDouble(Object store, int index, double value) { + protected void setDoubleImpl(AccessIterator accessIter, int index, double value) { if (hasStore) { - ((double[]) store)[index] = value; + ((double[]) accessIter.getStore())[index] = value; } else { - NativeDataAccess.setNativeMirrorDoubleData(store, index, value); + NativeDataAccess.setNativeMirrorDoubleData(accessIter.getStore(), index, value); } } } @@ -281,14 +281,14 @@ public final class RDoubleVector extends RVector<double[]> implements RAbstractD private static final SlowPathFromDoubleAccess SLOW_PATH_ACCESS = new SlowPathFromDoubleAccess() { @Override - protected double getDouble(Object store, int index) { - RDoubleVector vector = (RDoubleVector) store; + protected double getDoubleImpl(AccessIterator accessIter, int index) { + RDoubleVector vector = (RDoubleVector) accessIter.getStore(); return NativeDataAccess.getData(vector, vector.data, index); } @Override - protected void setDouble(Object store, int index, double value) { - RDoubleVector vector = (RDoubleVector) store; + protected void setDoubleImpl(AccessIterator accessIter, int index, double value) { + RDoubleVector vector = (RDoubleVector) accessIter.getStore(); NativeDataAccess.setData(vector, vector.data, index, value); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java index 465a3ac018e92f11e16f152540f9ca2ab69740eb..3c1390961d15bc24a53d6b5bb08f2bf877ac0695 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RExpression.java @@ -101,13 +101,13 @@ public final class RExpression extends RListBase implements RAbstractVector { } @Override - protected Object getListElement(Object store, int index) { - return ((Object[]) store)[index]; + protected Object getListElementImpl(AccessIterator accessIter, int index) { + return ((Object[]) accessIter.getStore())[index]; } @Override - protected void setListElement(Object store, int index, Object value) { - ((Object[]) store)[index] = value; + protected void setListElementImpl(AccessIterator accessIter, int index, Object value) { + ((Object[]) accessIter.getStore())[index] = value; } } @@ -123,13 +123,13 @@ public final class RExpression extends RListBase implements RAbstractVector { } @Override - protected Object getListElement(Object store, int index) { - return ((RExpression) store).data[index]; + protected Object getListElementImpl(AccessIterator accessIter, int index) { + return ((RExpression) accessIter.getStore()).data[index]; } @Override - protected void setListElement(Object store, int index, Object value) { - ((RExpression) store).data[index] = value; + protected void setListElementImpl(AccessIterator accessIter, int index, Object value) { + ((RExpression) accessIter.getStore()).data[index] = value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignBooleanWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignBooleanWrapper.java index 34672246ef6a944b880680fa399f760368605cd5..19f249ac38d490abcfca423e7df74355afca3cb4 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignBooleanWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignBooleanWrapper.java @@ -98,10 +98,10 @@ public final class RForeignBooleanWrapper extends RForeignWrapper implements RAb } @Override - protected byte getLogical(Object internalStore, int index) { + protected byte getLogicalImpl(AccessIterator accessIter, int index) { Object value = null; try { - value = ForeignAccess.sendRead(read, (TruffleObject) internalStore, index); + value = ForeignAccess.sendRead(read, (TruffleObject) accessIter.getStore(), index); return RRuntime.asLogical((boolean) value); } catch (UnsupportedMessageException | UnknownIdentifierException e) { throw RInternalError.shouldNotReachHere(e); @@ -137,8 +137,8 @@ public final class RForeignBooleanWrapper extends RForeignWrapper implements RAb } @Override - protected byte getLogical(Object store, int index) { - RForeignBooleanWrapper vector = (RForeignBooleanWrapper) store; + protected byte getLogicalImpl(AccessIterator accessIter, int index) { + RForeignBooleanWrapper vector = (RForeignBooleanWrapper) accessIter.getStore(); Object value = null; try { value = ForeignAccess.sendRead(READ, vector.delegate, index); diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignDoubleWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignDoubleWrapper.java index 6d54a0f742a9b5abff880e20d0d5326f8940d13a..a777c6184e9613cf542eb499aaf75eeccd8111cd 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignDoubleWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignDoubleWrapper.java @@ -101,10 +101,10 @@ public final class RForeignDoubleWrapper extends RForeignWrapper implements RAbs } @Override - protected double getDouble(Object internalStore, int index) { + protected double getDoubleImpl(AccessIterator accessIter, int index) { Object value = null; try { - value = ForeignAccess.sendRead(read, (TruffleObject) internalStore, index); + value = ForeignAccess.sendRead(read, (TruffleObject) accessIter.getStore(), index); return ((Number) resultProfile.profile(value)).doubleValue(); } catch (UnsupportedMessageException | UnknownIdentifierException e) { throw RInternalError.shouldNotReachHere(e); @@ -131,7 +131,7 @@ public final class RForeignDoubleWrapper extends RForeignWrapper implements RAbs private static final SlowPathFromDoubleAccess SLOW_PATH_ACCESS = new SlowPathFromDoubleAccess() { @Override @TruffleBoundary - protected int getLength(RAbstractContainer vector) { + public int getLength(RAbstractContainer vector) { try { return (int) ForeignAccess.sendGetSize(GET_SIZE, ((RForeignDoubleWrapper) vector).delegate); } catch (UnsupportedMessageException e) { @@ -140,8 +140,8 @@ public final class RForeignDoubleWrapper extends RForeignWrapper implements RAbs } @Override - protected double getDouble(Object store, int index) { - RForeignDoubleWrapper vector = (RForeignDoubleWrapper) store; + protected double getDoubleImpl(AccessIterator accessIter, int index) { + RForeignDoubleWrapper vector = (RForeignDoubleWrapper) accessIter.getStore(); Object value = null; try { value = ForeignAccess.sendRead(READ, vector.delegate, index); diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignIntWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignIntWrapper.java index aeaf0d95cb6b9c6a167f124ff1a3aac9ec8ae7c2..b23b83f0b7014184d3242865cebed3c8e95e7b73 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignIntWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignIntWrapper.java @@ -100,10 +100,10 @@ public final class RForeignIntWrapper extends RForeignWrapper implements RAbstra } @Override - protected int getInt(Object internalStore, int index) { + public int getIntImpl(AccessIterator accessIter, int index) { Object value = null; try { - value = ForeignAccess.sendRead(read, (TruffleObject) internalStore, index); + value = ForeignAccess.sendRead(read, (TruffleObject) accessIter.getStore(), index); return ((Number) resultProfile.profile(value)).intValue(); } catch (UnsupportedMessageException | UnknownIdentifierException e) { throw RInternalError.shouldNotReachHere(e); @@ -139,8 +139,8 @@ public final class RForeignIntWrapper extends RForeignWrapper implements RAbstra } @Override - protected int getInt(Object store, int index) { - RForeignIntWrapper vector = (RForeignIntWrapper) store; + public int getIntImpl(AccessIterator accessIter, int index) { + RForeignIntWrapper vector = (RForeignIntWrapper) accessIter.getStore(); Object value = null; try { value = ForeignAccess.sendRead(READ, vector.delegate, index); diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignListWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignListWrapper.java index da27c0e3121205bd24e34b0c93c2bd246b638591..b69b3491ab13aed366808618a3947ff1ea82c128 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignListWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignListWrapper.java @@ -90,9 +90,9 @@ public final class RForeignListWrapper extends RForeignWrapper implements RAbstr } @Override - protected Object getListElement(Object internalStore, int index) { + protected Object getListElementImpl(AccessIterator accessIter, int index) { try { - return foreign2r.execute(ForeignAccess.sendRead(read, (TruffleObject) internalStore, index)); + return foreign2r.execute(ForeignAccess.sendRead(read, (TruffleObject) accessIter.getStore(), index)); } catch (UnsupportedMessageException | UnknownIdentifierException e) { throw RInternalError.shouldNotReachHere(e); } @@ -124,8 +124,8 @@ public final class RForeignListWrapper extends RForeignWrapper implements RAbstr } @Override - protected Object getListElement(Object store, int index) { - RForeignListWrapper vector = (RForeignListWrapper) store; + protected Object getListElementImpl(AccessIterator accessIter, int index) { + RForeignListWrapper vector = (RForeignListWrapper) accessIter.getStore(); try { return FOREIGN_TO_R.execute(ForeignAccess.sendRead(READ, vector.delegate, index)); } catch (UnsupportedMessageException | UnknownIdentifierException e) { diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignNamedListWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignNamedListWrapper.java index b96fdb87c1976f0a34cf5e6d2db8d323370b1073..a1955ae52e045056a3d13bdadba0a023442edd98 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignNamedListWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignNamedListWrapper.java @@ -103,9 +103,9 @@ public final class RForeignNamedListWrapper extends RForeignWrapper implements R } @Override - protected Object getListElement(Object internalStore, int index) { + protected Object getListElementImpl(AccessIterator accessIter, int index) { try { - RForeignNamedListWrapper wrapper = (RForeignNamedListWrapper) internalStore; + RForeignNamedListWrapper wrapper = (RForeignNamedListWrapper) accessIter.getStore(); return foreign2r.execute(ForeignAccess.sendRead(read, wrapper.delegate, wrapper.names.getDataAt(index))); } catch (UnsupportedMessageException | UnknownIdentifierException e) { throw RInternalError.shouldNotReachHere(e); @@ -133,8 +133,8 @@ public final class RForeignNamedListWrapper extends RForeignWrapper implements R } @Override - protected Object getListElement(Object store, int index) { - RForeignNamedListWrapper vector = (RForeignNamedListWrapper) store; + protected Object getListElementImpl(AccessIterator accessIter, int index) { + RForeignNamedListWrapper vector = (RForeignNamedListWrapper) accessIter.getStore(); try { return FOREIGN_TO_R.execute(ForeignAccess.sendRead(READ, vector.delegate, vector.names.getDataAt(index))); } catch (UnsupportedMessageException | UnknownIdentifierException e) { diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignStringWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignStringWrapper.java index 2f57d6bae1562df11b85b91c4d8dddd2c49b9778..0474e326133189f06430fd2e9dec532988801384 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignStringWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RForeignStringWrapper.java @@ -99,9 +99,9 @@ public final class RForeignStringWrapper extends RForeignWrapper implements RAbs } @Override - protected String getString(Object internalStore, int index) { + protected String getStringImpl(AccessIterator accessIter, int index) { try { - Object value = ForeignAccess.sendRead(read, (TruffleObject) internalStore, index); + Object value = ForeignAccess.sendRead(read, (TruffleObject) accessIter.getStore(), index); if (isNullProfile.profile(value instanceof TruffleObject)) { if (isNull == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -136,8 +136,8 @@ public final class RForeignStringWrapper extends RForeignWrapper implements RAbs @Override @TruffleBoundary - protected String getString(Object store, int index) { - RForeignStringWrapper vector = (RForeignStringWrapper) store; + protected String getStringImpl(AccessIterator accessIter, int index) { + RForeignStringWrapper vector = (RForeignStringWrapper) accessIter.getStore(); return RForeignStringWrapper.getString(vector.delegate, index); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntSequence.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntSequence.java index 5c8f3bba324182e8471f498939b900735c442539..256ea5e8a62ecd2f27040d3647fddfc5343cee5d 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntSequence.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntSequence.java @@ -155,8 +155,8 @@ public final class RIntSequence extends RSequence implements RAbstractIntVector } @Override - protected int getInt(Object store, int index) { - RIntSequence vector = (RIntSequence) store; + public int getIntImpl(AccessIterator accessIter, int index) { + RIntSequence vector = (RIntSequence) accessIter.getStore(); assert index >= 0 && index < vector.getLength(); return vector.start + vector.stride * index; } @@ -169,8 +169,8 @@ public final class RIntSequence extends RSequence implements RAbstractIntVector private static final SlowPathFromIntAccess SLOW_PATH_ACCESS = new SlowPathFromIntAccess() { @Override - protected int getInt(Object store, int index) { - RIntSequence vector = (RIntSequence) store; + public int getIntImpl(AccessIterator accessIter, int index) { + RIntSequence vector = (RIntSequence) accessIter.getStore(); assert index >= 0 && index < vector.getLength(); return vector.start + vector.stride * index; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntVector.java index 3708566681de1d77a7d6da163aa2271c88e13ad7..c0a84f0142af4ac8be8b3e2a9961e0933cade9f2 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntVector.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RIntVector.java @@ -268,16 +268,16 @@ public final class RIntVector extends RVector<int[]> implements RAbstractIntVect } @Override - protected int getInt(Object store, int index) { - return hasStore ? ((int[]) store)[index] : NativeDataAccess.getIntNativeMirrorData(store, index); + public int getIntImpl(AccessIterator accessIter, int index) { + return hasStore ? ((int[]) accessIter.getStore())[index] : NativeDataAccess.getIntNativeMirrorData(accessIter.getStore(), index); } @Override - protected void setInt(Object store, int index, int value) { + protected void setIntImpl(AccessIterator accessIter, int index, int value) { if (hasStore) { - ((int[]) store)[index] = value; + ((int[]) accessIter.getStore())[index] = value; } else { - NativeDataAccess.setNativeMirrorIntData(store, index, value); + NativeDataAccess.setNativeMirrorIntData(accessIter.getStore(), index, value); } } } @@ -289,14 +289,14 @@ public final class RIntVector extends RVector<int[]> implements RAbstractIntVect private static final SlowPathFromIntAccess SLOW_PATH_ACCESS = new SlowPathFromIntAccess() { @Override - protected int getInt(Object store, int index) { - RIntVector vector = (RIntVector) store; + public int getIntImpl(AccessIterator accessIter, int index) { + RIntVector vector = (RIntVector) accessIter.getStore(); return NativeDataAccess.getData(vector, vector.data, index); } @Override - protected void setInt(Object store, int index, int value) { - RIntVector vector = (RIntVector) store; + protected void setIntImpl(AccessIterator accessIter, int index, int value) { + RIntVector vector = (RIntVector) accessIter.getStore(); NativeDataAccess.setData(vector, vector.data, index, value); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RInteger.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RInteger.java index 65b53d5257e8a411fc4bd15ebf9531cbb6768ee1..9809835273e6f8afda7cf99481603286bb16d7fb 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RInteger.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RInteger.java @@ -107,9 +107,9 @@ public final class RInteger extends RScalarVector implements RAbstractIntVector } @Override - protected int getInt(Object store, int index) { + public int getIntImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RInteger) store).value; + return ((RInteger) accessIter.getStore()).value; } } @@ -120,9 +120,9 @@ public final class RInteger extends RScalarVector implements RAbstractIntVector private static final SlowPathFromIntAccess SLOW_PATH_ACCESS = new SlowPathFromIntAccess() { @Override - protected int getInt(Object store, int index) { + public int getIntImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RInteger) store).value; + return ((RInteger) accessIter.getStore()).value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java index 56c828ceeca5447bb9b08ef1727f211593cefa91..25f8af5e9ddafe30173fbab2e2eb623d30d0b758 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RList.java @@ -105,13 +105,13 @@ public final class RList extends RListBase implements RAbstractListVector { } @Override - protected Object getListElement(Object store, int index) { - return ((Object[]) store)[index]; + protected Object getListElementImpl(AccessIterator accessIter, int index) { + return ((Object[]) accessIter.getStore())[index]; } @Override - protected void setListElement(Object store, int index, Object value) { - ((Object[]) store)[index] = value; + protected void setListElementImpl(AccessIterator accessIter, int index, Object value) { + ((Object[]) accessIter.getStore())[index] = value; } } @@ -127,13 +127,13 @@ public final class RList extends RListBase implements RAbstractListVector { } @Override - protected Object getListElement(Object store, int index) { - return ((RList) store).data[index]; + protected Object getListElementImpl(AccessIterator accessIter, int index) { + return ((RList) accessIter.getStore()).data[index]; } @Override - protected void setListElement(Object store, int index, Object value) { - ((RList) store).data[index] = value; + protected void setListElementImpl(AccessIterator accessIter, int index, Object value) { + ((RList) accessIter.getStore()).data[index] = value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogical.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogical.java index 06d75e55ba314706474f369c138673b73d4a18e4..fad3456263160c191a1f91ffb87e2524076e4f83 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogical.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogical.java @@ -117,9 +117,9 @@ public final class RLogical extends RScalarVector implements RAbstractLogicalVec } @Override - protected byte getLogical(Object store, int index) { + protected byte getLogicalImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RLogical) store).value; + return ((RLogical) accessIter.getStore()).value; } } @@ -130,9 +130,9 @@ public final class RLogical extends RScalarVector implements RAbstractLogicalVec private static final SlowPathFromLogicalAccess SLOW_PATH_ACCESS = new SlowPathFromLogicalAccess() { @Override - protected byte getLogical(Object store, int index) { + protected byte getLogicalImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RLogical) store).value; + return ((RLogical) accessIter.getStore()).value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogicalVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogicalVector.java index 89d03dfac1a254400404933c8e645b6e6c867158..f8b7cd4daa119bc61d6842990910e442e6937144 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogicalVector.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RLogicalVector.java @@ -271,16 +271,16 @@ public final class RLogicalVector extends RVector<byte[]> implements RAbstractLo } @Override - protected byte getLogical(Object store, int index) { - return hasStore ? ((byte[]) store)[index] : NativeDataAccess.getLogicalNativeMirrorData(store, index); + protected byte getLogicalImpl(AccessIterator accessIter, int index) { + return hasStore ? ((byte[]) accessIter.getStore())[index] : NativeDataAccess.getLogicalNativeMirrorData(accessIter.getStore(), index); } @Override - protected void setLogical(Object store, int index, byte value) { + protected void setLogicalImpl(AccessIterator accessIter, int index, byte value) { if (hasStore) { - ((byte[]) store)[index] = value; + ((byte[]) accessIter.getStore())[index] = value; } else { - NativeDataAccess.setNativeMirrorLogicalData(store, index, value); + NativeDataAccess.setNativeMirrorLogicalData(accessIter.getStore(), index, value); } } } @@ -292,14 +292,14 @@ public final class RLogicalVector extends RVector<byte[]> implements RAbstractLo private static final SlowPathFromLogicalAccess SLOW_PATH_ACCESS = new SlowPathFromLogicalAccess() { @Override - protected byte getLogical(Object store, int index) { - RLogicalVector vector = (RLogicalVector) store; + protected byte getLogicalImpl(AccessIterator accessIter, int index) { + RLogicalVector vector = (RLogicalVector) accessIter.getStore(); return NativeDataAccess.getData(vector, vector.data, index); } @Override - protected void setLogical(Object store, int index, byte value) { - RLogicalVector vector = (RLogicalVector) store; + protected void setLogicalImpl(AccessIterator accessIter, int index, byte value) { + RLogicalVector vector = (RLogicalVector) accessIter.getStore(); NativeDataAccess.setData(vector, vector.data, index, value); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java index 0224299f8a08818b746759b29db0fee17bacf8a5..98a32869ba67c3ab6759f08d0714f19225b4aaa4 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java @@ -907,8 +907,8 @@ public final class RPairList extends RSharingAttributeStorage implements RAbstra @TruffleBoundary @Override - protected Object getListElement(Object store, int index) { - return ((RPairList) store).getDataAtAsObject(index); + protected Object getListElementImpl(AccessIterator accessIter, int index) { + return ((RPairList) accessIter.getStore()).getDataAtAsObject(index); } } @@ -925,8 +925,8 @@ public final class RPairList extends RSharingAttributeStorage implements RAbstra @TruffleBoundary @Override - protected Object getListElement(Object store, int index) { - return ((RPairList) store).getDataAtAsObject(index); + protected Object getListElementImpl(AccessIterator accessIter, int index) { + return ((RPairList) accessIter.getStore()).getDataAtAsObject(index); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRaw.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRaw.java index 6c446e393eeb1f4e62936353a57d5723fe57bc9e..ef67dbd5f1700c9fca6dd9a287ee276fe019c1db 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRaw.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRaw.java @@ -111,9 +111,9 @@ public final class RRaw extends RScalarVector implements RAbstractRawVector { } @Override - protected byte getRaw(Object store, int index) { + protected byte getRawImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RRaw) store).value; + return ((RRaw) accessIter.getStore()).value; } } @@ -124,9 +124,9 @@ public final class RRaw extends RScalarVector implements RAbstractRawVector { private static final SlowPathFromRawAccess SLOW_PATH_ACCESS = new SlowPathFromRawAccess() { @Override - protected byte getRaw(Object store, int index) { + protected byte getRawImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RRaw) store).value; + return ((RRaw) accessIter.getStore()).value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRawVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRawVector.java index 63515865275ec68c0017ab29250ba461ef9e503f..eab92e79000926dd4acbbc2a2937062807f297da 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRawVector.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RRawVector.java @@ -224,16 +224,16 @@ public final class RRawVector extends RVector<byte[]> implements RAbstractRawVec } @Override - protected byte getRaw(Object store, int index) { - return hasStore ? ((byte[]) store)[index] : NativeDataAccess.getRawNativeMirrorData(store, index); + protected byte getRawImpl(AccessIterator accessIter, int index) { + return hasStore ? ((byte[]) accessIter.getStore())[index] : NativeDataAccess.getRawNativeMirrorData(accessIter.getStore(), index); } @Override - protected void setRaw(Object store, int index, byte value) { + protected void setRawImpl(AccessIterator accessIter, int index, byte value) { if (hasStore) { - ((byte[]) store)[index] = value; + ((byte[]) accessIter.getStore())[index] = value; } else { - NativeDataAccess.setNativeMirrorRawData(store, index, value); + NativeDataAccess.setNativeMirrorRawData(accessIter.getStore(), index, value); } } } @@ -245,14 +245,14 @@ public final class RRawVector extends RVector<byte[]> implements RAbstractRawVec private static final SlowPathFromRawAccess SLOW_PATH_ACCESS = new SlowPathFromRawAccess() { @Override - protected byte getRaw(Object store, int index) { - RRawVector vector = (RRawVector) store; + protected byte getRawImpl(AccessIterator accessIter, int index) { + RRawVector vector = (RRawVector) accessIter.getStore(); return NativeDataAccess.getData(vector, vector.data, index); } @Override - protected void setRaw(Object store, int index, byte value) { - RRawVector vector = (RRawVector) store; + protected void setRawImpl(AccessIterator accessIter, int index, byte value) { + RRawVector vector = (RRawVector) accessIter.getStore(); NativeDataAccess.setData(vector, vector.data, index, value); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RScalarList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RScalarList.java index da6bd5251abfa59d982b541b8056f212607d51e2..d29dfd45d6be0888b5dbd369ff6d86d10350d116 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RScalarList.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RScalarList.java @@ -104,9 +104,9 @@ public final class RScalarList extends RScalarVector implements RAbstractListVec } @Override - protected Object getListElement(Object store, int index) { + protected Object getListElementImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RScalarList) store).value; + return ((RScalarList) accessIter.getStore()).value; } } @@ -122,9 +122,9 @@ public final class RScalarList extends RScalarVector implements RAbstractListVec } @Override - protected Object getListElement(Object store, int index) { + protected Object getListElementImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RScalarList) store).value; + return ((RScalarList) accessIter.getStore()).value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RString.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RString.java index c1df09a38ec1d80bda575ffcaf60b6ce8587d030..cd3f0f98f136c8c1bd879a2f53df222b5780047a 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RString.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RString.java @@ -107,9 +107,9 @@ public final class RString extends RScalarVector implements RAbstractStringVecto } @Override - protected String getString(Object store, int index) { + protected String getStringImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RString) store).value; + return ((RString) accessIter.getStore()).value; } } @@ -120,9 +120,9 @@ public final class RString extends RScalarVector implements RAbstractStringVecto private static final SlowPathFromStringAccess SLOW_PATH_ACCESS = new SlowPathFromStringAccess() { @Override - protected String getString(Object store, int index) { + protected String getStringImpl(AccessIterator accessIter, int index) { assert index == 0; - return ((RString) store).value; + return ((RString) accessIter.getStore()).value; } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringSequence.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringSequence.java index 41fd741fb878615d3bfc394eb3ef1f33ffa61cfb..bf7a8cfb42f1f3750094cfb7769254c3c059c2b1 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringSequence.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringSequence.java @@ -180,8 +180,8 @@ public final class RStringSequence extends RSequence implements RAbstractStringV } @Override - protected String getString(Object store, int index) { - RStringSequence vector = (RStringSequence) store; + protected String getStringImpl(AccessIterator accessIter, int index) { + RStringSequence vector = (RStringSequence) accessIter.getStore(); assert index >= 0 && index < vector.getLength(); return vector.prefix + (vector.start + vector.stride * index) + vector.suffix; } @@ -194,8 +194,8 @@ public final class RStringSequence extends RSequence implements RAbstractStringV private static final SlowPathFromStringAccess SLOW_PATH_ACCESS = new SlowPathFromStringAccess() { @Override - protected String getString(Object store, int index) { - RStringSequence vector = (RStringSequence) store; + protected String getStringImpl(AccessIterator accessIter, int index) { + RStringSequence vector = (RStringSequence) accessIter.getStore(); assert index >= 0 && index < vector.getLength(); return vector.prefix + (vector.start + vector.stride * index) + vector.suffix; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringVector.java index 88e9d0147a06a7d9e9ae299006868c919dbdf5c6..4978a564fd453de2a174faa609b1da3282973dcf 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringVector.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RStringVector.java @@ -39,6 +39,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.nodes.FastPathVectorAccess.FastPathFromStringAccess; import com.oracle.truffle.r.runtime.data.nodes.SlowPathVectorAccess.SlowPathFromStringAccess; import com.oracle.truffle.r.runtime.data.nodes.VectorAccess; +import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.AccessIterator; import com.oracle.truffle.r.runtime.ops.na.NACheck; public final class RStringVector extends RVector<Object[]> implements RAbstractStringVector { @@ -345,22 +346,22 @@ public final class RStringVector extends RVector<Object[]> implements RAbstractS } @Override - protected String getString(Object store, int index) { + protected String getStringImpl(AccessIterator accessIter, int index) { assert hasStore; if (containsWrappers) { - return ((CharSXPWrapper[]) store)[index].getContents(); + return ((CharSXPWrapper[]) accessIter.getStore())[index].getContents(); } else { - return ((String[]) store)[index]; + return ((String[]) accessIter.getStore())[index]; } } @Override - protected void setString(Object store, int index, String value) { + protected void setStringImpl(AccessIterator accessIter, int index, String value) { assert hasStore; if (containsWrappers) { - ((CharSXPWrapper[]) store)[index] = CharSXPWrapper.create(value); + ((CharSXPWrapper[]) accessIter.getStore())[index] = CharSXPWrapper.create(value); } else { - ((String[]) store)[index] = value; + ((String[]) accessIter.getStore())[index] = value; } } } @@ -372,12 +373,13 @@ public final class RStringVector extends RVector<Object[]> implements RAbstractS private static final SlowPathFromStringAccess SLOW_PATH_ACCESS = new SlowPathFromStringAccess() { @Override - protected String getString(Object store, int index) { - return ((RStringVector) store).getDataAt(index); + protected String getStringImpl(AccessIterator accessIter, int index) { + return ((RStringVector) accessIter.getStore()).getDataAt(index); } @Override - protected void setString(Object store, int index, String value) { + protected void setStringImpl(AccessIterator accessIter, int index, String value) { + Object store = accessIter.getStore(); ((RStringVector) store).setDataAt(((RStringVector) store).getInternalStore(), index, value); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToComplexVectorClosure.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToComplexVectorClosure.java index dad86be84d9b2e0f48234443dcb21a91faa4bbdd..fe362d62d4902704bbafa58d5157e5b972a6af78 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToComplexVectorClosure.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToComplexVectorClosure.java @@ -35,6 +35,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.nodes.FastPathVectorAccess.FastPathFromComplexAccess; import com.oracle.truffle.r.runtime.data.nodes.SlowPathVectorAccess.SlowPathFromComplexAccess; import com.oracle.truffle.r.runtime.data.nodes.VectorAccess; +import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.AccessIterator; class RToComplexVectorClosure extends RToVectorClosure implements RAbstractComplexVector { @@ -89,26 +90,26 @@ class RToComplexVectorClosure extends RToVectorClosure implements RAbstractCompl private static final SlowPathFromComplexAccess SLOW_PATH_ACCESS = new SlowPathFromComplexAccess() { @Override - protected RComplex getComplex(Object store, int index) { - RToComplexVectorClosure vector = (RToComplexVectorClosure) store; + protected RComplex getComplexImpl(AccessIterator accessIter, int index) { + RToComplexVectorClosure vector = (RToComplexVectorClosure) accessIter.getStore(); return vector.getDataAt(index); } @Override - protected double getComplexR(Object store, int index) { - RToComplexVectorClosure vector = (RToComplexVectorClosure) store; + protected double getComplexRImpl(AccessIterator accessIter, int index) { + RToComplexVectorClosure vector = (RToComplexVectorClosure) accessIter.getStore(); return vector.getDataAt(index).getRealPart(); } @Override - protected double getComplexI(Object store, int index) { - RToComplexVectorClosure vector = (RToComplexVectorClosure) store; + protected double getComplexIImpl(AccessIterator accessIter, int index) { + RToComplexVectorClosure vector = (RToComplexVectorClosure) accessIter.getStore(); return vector.getDataAt(index).getImaginaryPart(); } @Override - protected void setComplex(Object store, int index, double real, double imaginary) { - RToComplexVectorClosure vector = (RToComplexVectorClosure) store; + protected void setComplexImpl(AccessIterator accessIter, int index, double real, double imaginary) { + RToComplexVectorClosure vector = (RToComplexVectorClosure) accessIter.getStore(); vector.setDataAt(vector.getInternalStore(), index, RComplex.valueOf(real, imaginary)); } }; @@ -163,22 +164,22 @@ class RToComplexVectorClosure extends RToVectorClosure implements RAbstractCompl } @Override - protected RComplex getComplex(Object store, int index) { + protected RComplex getComplexImpl(AccessIterator accessIterator, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected double getComplexR(Object store, int index) { + protected double getComplexRImpl(AccessIterator accessIterator, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected double getComplexI(Object store, int index) { + protected double getComplexIImpl(AccessIterator accessIterator, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected void setComplex(Object store, int index, double real, double imaginary) { + protected void setComplexImpl(AccessIterator accessIterator, int index, double real, double imaginary) { throw RInternalError.shouldNotReachHere(); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java index 226a1ae9af55d5e69ea8f30e827fe9fb3a364702..42296c572c03216ac81013c17b548e906a6b6f11 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java @@ -33,8 +33,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.nodes.FastPathVectorAccess.FastPathFromDoubleAccess; import com.oracle.truffle.r.runtime.data.nodes.SlowPathVectorAccess.SlowPathFromDoubleAccess; import com.oracle.truffle.r.runtime.data.nodes.VectorAccess; -import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.SequentialIterator; -import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.RandomIterator; +import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.AccessIterator; class RToDoubleVectorClosure extends RToVectorClosure implements RAbstractDoubleVector { @@ -86,14 +85,14 @@ class RToDoubleVectorClosure extends RToVectorClosure implements RAbstractDouble private static final SlowPathFromDoubleAccess SLOW_PATH_ACCESS = new SlowPathFromDoubleAccess() { @Override - protected double getDouble(Object store, int index) { - RToDoubleVectorClosure vector = (RToDoubleVectorClosure) store; + protected double getDoubleImpl(AccessIterator accessIter, int index) { + RToDoubleVectorClosure vector = (RToDoubleVectorClosure) accessIter.getStore(); return vector.getDataAt(index); } @Override - protected void setDouble(Object store, int index, double value) { - RToDoubleVectorClosure vector = (RToDoubleVectorClosure) store; + protected void setDoubleImpl(AccessIterator accessIter, int index, double value) { + RToDoubleVectorClosure vector = (RToDoubleVectorClosure) accessIter.getStore(); vector.setDataAt(vector.getInternalStore(), index, value); } }; @@ -128,12 +127,12 @@ class RToDoubleVectorClosure extends RToVectorClosure implements RAbstractDouble } @Override - protected double getDouble(Object store, int index) { + protected double getDoubleImpl(AccessIterator accessIterator, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected void setDouble(Object store, int index, double value) { + protected void setDoubleImpl(AccessIterator accessIterator, int index, double value) { throw RInternalError.shouldNotReachHere(); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToIntVectorClosure.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToIntVectorClosure.java index 25f34d447e8fd43aa5287623dfe469aa4e1e5276..c1b8ab60c45ed8a923b42705104443c77dd30b77 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToIntVectorClosure.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToIntVectorClosure.java @@ -34,8 +34,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.nodes.FastPathVectorAccess.FastPathFromIntAccess; import com.oracle.truffle.r.runtime.data.nodes.SlowPathVectorAccess.SlowPathFromIntAccess; import com.oracle.truffle.r.runtime.data.nodes.VectorAccess; -import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.RandomIterator; -import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.SequentialIterator; +import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.AccessIterator; class RToIntVectorClosure extends RToVectorClosure implements RAbstractIntVector { @@ -87,14 +86,14 @@ class RToIntVectorClosure extends RToVectorClosure implements RAbstractIntVector private static final SlowPathFromIntAccess SLOW_PATH_ACCESS = new SlowPathFromIntAccess() { @Override - protected int getInt(Object store, int index) { - RToIntVectorClosure vector = (RToIntVectorClosure) store; + protected int getIntImpl(AccessIterator accessIter, int index) { + RToIntVectorClosure vector = (RToIntVectorClosure) accessIter.getStore(); return vector.getDataAt(index); } @Override - protected void setInt(Object store, int index, int value) { - RToIntVectorClosure vector = (RToIntVectorClosure) store; + protected void setIntImpl(AccessIterator accessIter, int index, int value) { + RToIntVectorClosure vector = (RToIntVectorClosure) accessIter.getStore(); vector.setDataAt(vector.getInternalStore(), index, value); } }; @@ -129,12 +128,12 @@ class RToIntVectorClosure extends RToVectorClosure implements RAbstractIntVector } @Override - protected int getInt(Object store, int index) { + protected int getIntImpl(AccessIterator accessIterator, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected void setInt(Object store, int index, int value) { + protected void setIntImpl(AccessIterator accessIterator, int index, int value) { throw RInternalError.shouldNotReachHere(); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToStringVectorClosure.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToStringVectorClosure.java index 05009742e2e573a0fcf88eb0c44d353a8c4e6416..a4f6f45dbe6732c8e36c22e8612485eb8ce5b242 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToStringVectorClosure.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToStringVectorClosure.java @@ -38,8 +38,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.data.nodes.FastPathVectorAccess.FastPathFromStringAccess; import com.oracle.truffle.r.runtime.data.nodes.SlowPathVectorAccess.SlowPathFromStringAccess; import com.oracle.truffle.r.runtime.data.nodes.VectorAccess; -import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.RandomIterator; -import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.SequentialIterator; +import com.oracle.truffle.r.runtime.data.nodes.VectorAccess.AccessIterator; class RToStringVectorClosure extends RToVectorClosure implements RAbstractStringVector { @@ -90,14 +89,14 @@ class RToStringVectorClosure extends RToVectorClosure implements RAbstractString private static final SlowPathFromStringAccess SLOW_PATH_ACCESS = new SlowPathFromStringAccess() { @Override - protected String getString(Object store, int index) { - RToStringVectorClosure vector = (RToStringVectorClosure) store; + protected String getStringImpl(AccessIterator accessIter, int index) { + RToStringVectorClosure vector = (RToStringVectorClosure) accessIter.getStore(); return vector.getDataAt(index); } @Override - protected void setString(Object store, int index, String value) { - RToStringVectorClosure vector = (RToStringVectorClosure) store; + protected void setStringImpl(AccessIterator accessIter, int index, String value) { + RToStringVectorClosure vector = (RToStringVectorClosure) accessIter.getStore(); vector.setDataAt(vector.getInternalStore(), index, value); } }; @@ -132,12 +131,12 @@ class RToStringVectorClosure extends RToVectorClosure implements RAbstractString } @Override - protected String getString(Object store, int index) { + protected String getStringImpl(AccessIterator accessIterator, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected void setString(Object store, int index, String value) { + protected void setStringImpl(AccessIterator accessIterator, int index, String value) { throw RInternalError.shouldNotReachHere(); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java index f2d7af69d3f497bb3e4fac697303dc377c2bc135..a661fce629476f7c80e43ad3aacacc2d1ef154c9 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/FastPathVectorAccess.java @@ -23,7 +23,6 @@ package com.oracle.truffle.r.runtime.data.nodes; import com.oracle.truffle.api.profiles.BranchProfile; -import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError.Message; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; @@ -42,8 +41,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; */ public abstract class FastPathVectorAccess extends VectorAccess { - protected boolean naReported; // TODO: move this into the iterator - private final BranchProfile warningReportedProfile = BranchProfile.create(); + protected final BranchProfile warningReportedProfile = BranchProfile.create(); protected FastPathVectorAccess(Object value) { super(value.getClass(), value instanceof RAbstractContainer ? ((RAbstractContainer) value).getInternalStore() != null : true); @@ -54,14 +52,6 @@ public abstract class FastPathVectorAccess extends VectorAccess { return hasStore ? vector.getInternalStore() : ((RVector<?>) vector).getNativeMirror(); } - protected final void warning(RError.Message message) { - if (!naReported) { - warningReportedProfile.enter(); - RError.warning(RError.SHOW_CALLER, message); - naReported = true; - } - } - public abstract static class FastPathFromIntAccess extends FastPathVectorAccess { public FastPathFromIntAccess(Object value) { @@ -74,75 +64,77 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final double getDouble(Object store, int index) { - int value = getInt(store, index); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.DOUBLE_NA : RRuntime.int2doubleNoCheck(value); } @Override - protected final byte getRaw(Object store, int index) { - int value = getInt(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); byte result = (byte) value; if ((result & 0xff) != value) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } return result; } @Override - protected final byte getLogical(Object store, int index) { - int value = getInt(store, index); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.LOGICAL_NA : RRuntime.int2logicalNoCheck(value); } @Override - protected final RComplex getComplex(Object store, int index) { - int value = getInt(store, index); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RComplex.createNA() : RRuntime.int2complexNoCheck(value); } @Override - protected final double getComplexR(Object store, int index) { - int value = getInt(store, index); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_REAL_PART : value; } @Override - protected final double getComplexI(Object store, int index) { - int value = getInt(store, index); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_IMAGINARY_PART : 0; } @Override - protected final String getString(Object store, int index) { - int value = getInt(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RRuntime.intToStringNoCheck(value); } @Override - protected final Object getListElement(Object store, int index) { - return getInt(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getIntImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setInt(store, index, sourceAccess.getInt(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setIntImpl(accessIter, index, sourceAccess.getInt(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setInt(store, index, sourceAccess.getInt(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setIntImpl(accessIter, index, sourceAccess.getInt(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setInt(store, index, RRuntime.INT_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setIntImpl(accessIter, index, RRuntime.INT_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getInt(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getIntImpl(accessIter, index)); } } @@ -158,84 +150,88 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - double value = getDouble(store, index); + protected final int getIntImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); if (Double.isNaN(value)) { na.enable(true); return RRuntime.INT_NA; } if (value > Integer.MAX_VALUE || value <= Integer.MIN_VALUE) { na.enable(true); - warning(Message.NA_INTRODUCED_COERCION_INT); + if (accessIter.warning(Message.NA_INTRODUCED_COERCION_INT)) { + warningReportedProfile.enter(); + } return RRuntime.INT_NA; } return (int) value; } @Override - protected final byte getRaw(Object store, int index) { - int value = (int) getDouble(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + int value = (int) getDoubleImpl(accessIter, index); byte result = (byte) value; if ((result & 0xff) != value) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } return result; } @Override - protected final byte getLogical(Object store, int index) { - double value = getDouble(store, index); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.LOGICAL_NA : RRuntime.double2logicalNoCheck(value); } @Override - protected final RComplex getComplex(Object store, int index) { - double value = getDouble(store, index); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RComplex.createNA() : RRuntime.double2complexNoCheck(value); } @Override - protected final double getComplexR(Object store, int index) { - double value = getDouble(store, index); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_REAL_PART : value; } @Override - protected final double getComplexI(Object store, int index) { - double value = getDouble(store, index); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_IMAGINARY_PART : 0; } @Override - protected final String getString(Object store, int index) { - double value = getDouble(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RContext.getRRuntimeASTAccess().encodeDouble(value); } @Override - protected final Object getListElement(Object store, int index) { - return getDouble(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getDoubleImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setDouble(store, index, sourceAccess.getDouble(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setDoubleImpl(accessIter, index, sourceAccess.getDouble(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setDouble(store, index, sourceAccess.getDouble(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setDoubleImpl(accessIter, index, sourceAccess.getDouble(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setDouble(store, index, RRuntime.DOUBLE_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setDoubleImpl(accessIter, index, RRuntime.DOUBLE_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getDouble(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getDoubleImpl(accessIter, index)); } } @@ -251,74 +247,76 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - byte value = getLogical(store, index); + protected final int getIntImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.INT_NA : RRuntime.logical2intNoCheck(value); } @Override - protected final double getDouble(Object store, int index) { - byte value = getLogical(store, index); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.DOUBLE_NA : RRuntime.logical2doubleNoCheck(value); } @Override - protected final byte getRaw(Object store, int index) { - byte value = getLogical(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); if (na.check(value)) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } return value; } @Override - protected final RComplex getComplex(Object store, int index) { - byte value = getLogical(store, index); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RComplex.createNA() : RRuntime.logical2complexNoCheck(value); } @Override - protected final double getComplexR(Object store, int index) { - byte value = getLogical(store, index); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_REAL_PART : value; } @Override - protected final double getComplexI(Object store, int index) { - byte value = getLogical(store, index); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_IMAGINARY_PART : 0; } @Override - protected final String getString(Object store, int index) { - byte value = getLogical(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RRuntime.logicalToStringNoCheck(value); } @Override - protected final Object getListElement(Object store, int index) { - return getLogical(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getLogicalImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setLogical(store, index, sourceAccess.getLogical(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setLogicalImpl(accessIter, index, sourceAccess.getLogical(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setLogical(store, index, sourceAccess.getLogical(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setLogicalImpl(accessIter, index, sourceAccess.getLogical(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setLogical(store, index, RRuntime.LOGICAL_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setLogicalImpl(accessIter, index, RRuntime.LOGICAL_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getLogical(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getLogicalImpl(accessIter, index)); } } @@ -334,65 +332,65 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - return getRaw(store, index) & 0xff; + protected final int getIntImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) & 0xff; } @Override - protected final double getDouble(Object store, int index) { - return getRaw(store, index) & 0xff; + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) & 0xff; } @Override - protected final byte getLogical(Object store, int index) { - return getRaw(store, index) == 0 ? RRuntime.LOGICAL_FALSE : RRuntime.LOGICAL_TRUE; + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) == 0 ? RRuntime.LOGICAL_FALSE : RRuntime.LOGICAL_TRUE; } @Override - protected final RComplex getComplex(Object store, int index) { - return RComplex.valueOf(getRaw(store, index) & 0xff, 0); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + return RComplex.valueOf(getRawImpl(accessIter, index) & 0xff, 0); } @Override - protected final double getComplexR(Object store, int index) { - return getRaw(store, index) & 0xff; + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) & 0xff; } @Override - protected final double getComplexI(Object store, int index) { + protected final double getComplexIImpl(AccessIterator accessIter, int index) { return 0; } @Override - protected final String getString(Object store, int index) { - return RRuntime.rawToHexString(getRaw(store, index)); + protected final String getStringImpl(AccessIterator accessIter, int index) { + return RRuntime.rawToHexString(getRawImpl(accessIter, index)); } @Override - protected final Object getListElement(Object store, int index) { - return RRaw.valueOf(getRaw(store, index)); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return RRaw.valueOf(getRawImpl(accessIter, index)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setRaw(store, index, sourceAccess.getRaw(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setRawImpl(accessIter, index, sourceAccess.getRaw(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setRaw(store, index, sourceAccess.getRaw(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setRawImpl(accessIter, index, sourceAccess.getRaw(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { + protected void setNAImpl(AccessIterator accessIter, int index) { /* * There is no raw NA, but places that write NA for other types usually write 0 for raw. */ - setRaw(store, index, (byte) 0); + setRawImpl(accessIter, index, (byte) 0); } @Override - protected boolean isNA(Object store, int index) { + protected boolean isNAImpl(AccessIterator accessIter, int index) { return false; } } @@ -409,84 +407,94 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - double value = getComplexR(store, index); + protected final int getIntImpl(AccessIterator accessIter, int index) { + double value = getComplexRImpl(accessIter, index); if (Double.isNaN(value)) { na.enable(true); return RRuntime.INT_NA; } if (value > Integer.MAX_VALUE || value <= Integer.MIN_VALUE) { na.enable(true); - warning(Message.NA_INTRODUCED_COERCION_INT); + if (accessIter.warning(Message.NA_INTRODUCED_COERCION_INT)) { + warningReportedProfile.enter(); + } return RRuntime.INT_NA; } - if (getComplexI(store, index) != 0) { - warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION); + if (getComplexIImpl(accessIter, index) != 0) { + if (accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION)) { + warningReportedProfile.enter(); + } } return (int) value; } @Override - protected final double getDouble(Object store, int index) { - double value = getComplexR(store, index); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + double value = getComplexRImpl(accessIter, index); if (Double.isNaN(value)) { na.enable(true); return RRuntime.DOUBLE_NA; } - if (getComplexI(store, index) != 0) { - warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION); + if (getComplexIImpl(accessIter, index) != 0) { + if (accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION)) { + warningReportedProfile.enter(); + } } return value; } @Override - protected final byte getRaw(Object store, int index) { - double value = getComplexR(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + double value = getComplexRImpl(accessIter, index); if (Double.isNaN(value) || value < 0 || value >= 256) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } - if (getComplexI(store, index) != 0) { - warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION); + if (getComplexIImpl(accessIter, index) != 0) { + if (accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION)) { + warningReportedProfile.enter(); + } } return (byte) value; } @Override - protected final byte getLogical(Object store, int index) { - RComplex value = getComplex(store, index); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + RComplex value = getComplexImpl(accessIter, index); return na.check(value) ? RRuntime.LOGICAL_NA : RRuntime.complex2logicalNoCheck(value); } @Override - protected final String getString(Object store, int index) { - RComplex value = getComplex(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + RComplex value = getComplexImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RContext.getRRuntimeASTAccess().encodeComplex(value); } @Override - protected final Object getListElement(Object store, int index) { - return getComplex(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getComplexImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setComplex(store, index, sourceAccess.getComplexR(sourceIter), sourceAccess.getComplexI(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setComplexImpl(accessIter, index, sourceAccess.getComplexR(sourceIter), sourceAccess.getComplexI(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setComplex(store, index, sourceAccess.getComplexR(sourceIter, sourceIndex), sourceAccess.getComplexI(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setComplexImpl(accessIter, index, sourceAccess.getComplexR(sourceIter, sourceIndex), sourceAccess.getComplexI(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setComplex(store, index, RRuntime.COMPLEX_NA_REAL_PART, RRuntime.COMPLEX_NA_IMAGINARY_PART); + protected void setNAImpl(AccessIterator accessIter, int index) { + setComplexImpl(accessIter, index, RRuntime.COMPLEX_NA_REAL_PART, RRuntime.COMPLEX_NA_IMAGINARY_PART); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getComplexR(store, index), getComplexI(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getComplexRImpl(accessIter, index), getComplexIImpl(accessIter, index)); } } @@ -502,64 +510,64 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - return na.convertStringToInt(getString(store, index)); + protected final int getIntImpl(AccessIterator accessIter, int index) { + return na.convertStringToInt(getStringImpl(accessIter, index)); } @Override - protected final double getDouble(Object store, int index) { - return na.convertStringToDouble(getString(store, index)); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + return na.convertStringToDouble(getStringImpl(accessIter, index)); } @Override - protected final byte getRaw(Object store, int index) { - int value = na.convertStringToInt(getString(store, index)); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + int value = na.convertStringToInt(getStringImpl(accessIter, index)); return value >= 0 && value <= 255 ? (byte) value : 0; } @Override - protected final byte getLogical(Object store, int index) { - return na.convertStringToLogical(getString(store, index)); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + return na.convertStringToLogical(getStringImpl(accessIter, index)); } @Override - protected final RComplex getComplex(Object store, int index) { - return na.convertStringToComplex(getString(store, index)); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + return na.convertStringToComplex(getStringImpl(accessIter, index)); } @Override - protected final double getComplexR(Object store, int index) { - return na.convertStringToComplex(getString(store, index)).getRealPart(); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + return na.convertStringToComplex(getStringImpl(accessIter, index)).getRealPart(); } @Override - protected final double getComplexI(Object store, int index) { - return na.convertStringToComplex(getString(store, index)).getImaginaryPart(); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + return na.convertStringToComplex(getStringImpl(accessIter, index)).getImaginaryPart(); } @Override - protected final Object getListElement(Object store, int index) { - return getString(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getStringImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setString(store, index, sourceAccess.getString(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setStringImpl(accessIter, index, sourceAccess.getString(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setString(store, index, sourceAccess.getString(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setStringImpl(accessIter, index, sourceAccess.getString(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setString(store, index, RRuntime.STRING_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setStringImpl(accessIter, index, RRuntime.STRING_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getString(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getStringImpl(accessIter, index)); } } @@ -570,67 +578,67 @@ public abstract class FastPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { + protected final int getIntImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final double getDouble(Object store, int index) { + protected final double getDoubleImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final byte getRaw(Object store, int index) { + protected final byte getRawImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final byte getLogical(Object store, int index) { + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final RComplex getComplex(Object store, int index) { + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final double getComplexR(Object store, int index) { + protected final double getComplexRImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final double getComplexI(Object store, int index) { + protected final double getComplexIImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final String getString(Object store, int index) { + protected final String getStringImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setListElement(store, index, sourceAccess.getListElement(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setListElementImpl(accessIter, index, sourceAccess.getListElement(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setListElement(store, index, sourceAccess.getListElement(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setListElementImpl(accessIter, index, sourceAccess.getListElement(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { + protected void setNAImpl(AccessIterator accessIter, int index) { /* * There is no list NA, but places that write NA for other types usually write NULL for * lists. */ - setListElement(store, index, RNull.instance); + setListElementImpl(accessIter, index, RNull.instance); } @Override - protected boolean isNA(Object store, int index) { - return na.checkListElement(getListElement(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.checkListElement(getListElementImpl(accessIter, index)); } } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/PrimitiveVectorAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/PrimitiveVectorAccess.java index a35e5d98aeae95a22821c7cc4c6547749c7218dd..8cf5ed631e1896f69c901491698d16817bda2b68 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/PrimitiveVectorAccess.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/PrimitiveVectorAccess.java @@ -42,29 +42,29 @@ public abstract class PrimitiveVectorAccess { if (value instanceof Integer) { return new FastPathFromIntAccess(value) { @Override - protected int getInt(Object store, int index) { - return (Integer) store; + public int getIntImpl(AccessIterator accessIter, int index) { + return (Integer) accessIter.getStore(); } }; } else if (value instanceof Double) { return new FastPathFromDoubleAccess(value) { @Override - protected double getDouble(Object store, int index) { - return (Double) store; + public double getDoubleImpl(AccessIterator accessIter, int index) { + return (Double) accessIter.getStore(); } }; } else if (value instanceof Byte) { return new FastPathFromLogicalAccess(value) { @Override - protected byte getLogical(Object store, int index) { - return (Byte) store; + public byte getLogicalImpl(AccessIterator accessIter, int index) { + return (Byte) accessIter.getStore(); } }; } else if (value instanceof String) { return new FastPathFromStringAccess(value) { @Override - protected String getString(Object store, int index) { - return (String) store; + public String getStringImpl(AccessIterator accessIter, int index) { + return (String) accessIter.getStore(); } }; } else if (value instanceof RNull) { @@ -80,7 +80,7 @@ public abstract class PrimitiveVectorAccess { } @Override - protected Object getListElement(Object store, int index) { + public Object getListElementImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } }; @@ -91,26 +91,26 @@ public abstract class PrimitiveVectorAccess { private static final SlowPathFromIntAccess SLOW_PATH_INT = new SlowPathFromIntAccess() { @Override - protected int getInt(Object store, int index) { - return (Integer) store; + public int getIntImpl(AccessIterator accessIter, int index) { + return (Integer) accessIter.getStore(); } }; private static final SlowPathFromDoubleAccess SLOW_PATH_DOUBLE = new SlowPathFromDoubleAccess() { @Override - protected double getDouble(Object store, int index) { - return (Double) store; + public double getDoubleImpl(AccessIterator accessIter, int index) { + return (Double) accessIter.getStore(); } }; private static final SlowPathFromLogicalAccess SLOW_PATH_LOGICAL = new SlowPathFromLogicalAccess() { @Override - protected byte getLogical(Object store, int index) { - return (Byte) store; + public byte getLogicalImpl(AccessIterator accessIter, int index) { + return (Byte) accessIter.getStore(); } }; private static final SlowPathFromStringAccess SLOW_PATH_STRING = new SlowPathFromStringAccess() { @Override - protected String getString(Object store, int index) { - return (String) store; + public String getStringImpl(AccessIterator accessIter, int index) { + return (String) accessIter.getStore(); } }; private static final SlowPathFromListAccess SLOW_PATH_NULL = new SlowPathFromListAccess() { @@ -125,7 +125,7 @@ public abstract class PrimitiveVectorAccess { } @Override - protected Object getListElement(Object store, int index) { + public Object getListElementImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } }; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/SlowPathVectorAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/SlowPathVectorAccess.java index e92817c90aad16725459c2d1a63298e6f832954a..d224f2759f0989932ff970f036dab4a7b0bc50cb 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/SlowPathVectorAccess.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/SlowPathVectorAccess.java @@ -23,7 +23,6 @@ package com.oracle.truffle.r.runtime.data.nodes; import com.oracle.truffle.api.profiles.BranchProfile; -import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError.Message; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; @@ -40,8 +39,7 @@ import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; */ public abstract class SlowPathVectorAccess extends VectorAccess { - protected boolean naReported; // TODO: move this into the iterator - private final BranchProfile warningReportedProfile = BranchProfile.create(); + protected final BranchProfile warningReportedProfile = BranchProfile.create(); protected SlowPathVectorAccess() { // VectorAccess.supports has an assertion that relies on this being Object.class @@ -53,14 +51,6 @@ public abstract class SlowPathVectorAccess extends VectorAccess { return vector; } - protected final void warning(RError.Message message) { - if (!naReported) { - warningReportedProfile.enter(); - RError.warning(RError.SHOW_CALLER, message); - naReported = true; - } - } - public abstract static class SlowPathFromIntAccess extends SlowPathVectorAccess { @Override @@ -69,75 +59,77 @@ public abstract class SlowPathVectorAccess extends VectorAccess { } @Override - protected final double getDouble(Object store, int index) { - int value = getInt(store, index); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.DOUBLE_NA : RRuntime.int2doubleNoCheck(value); } @Override - protected final byte getRaw(Object store, int index) { - int value = getInt(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); byte result = (byte) value; if ((result & 0xff) != value) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } return result; } @Override - protected final byte getLogical(Object store, int index) { - int value = getInt(store, index); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.LOGICAL_NA : RRuntime.int2logicalNoCheck(value); } @Override - protected final RComplex getComplex(Object store, int index) { - int value = getInt(store, index); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RComplex.createNA() : RRuntime.int2complexNoCheck(value); } @Override - protected final double getComplexR(Object store, int index) { - int value = getInt(store, index); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_REAL_PART : value; } @Override - protected final double getComplexI(Object store, int index) { - int value = getInt(store, index); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_IMAGINARY_PART : 0; } @Override - protected final String getString(Object store, int index) { - int value = getInt(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + int value = getIntImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RRuntime.intToStringNoCheck(value); } @Override - protected final Object getListElement(Object store, int index) { - return getInt(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getIntImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setInt(store, index, sourceAccess.getInt(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setIntImpl(accessIter, index, sourceAccess.getInt(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setInt(store, index, sourceAccess.getInt(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setIntImpl(accessIter, index, sourceAccess.getInt(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setInt(store, index, RRuntime.INT_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setIntImpl(accessIter, index, RRuntime.INT_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getInt(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getIntImpl(accessIter, index)); } } @@ -149,84 +141,88 @@ public abstract class SlowPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - double value = getDouble(store, index); + protected final int getIntImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); if (Double.isNaN(value)) { na.enable(true); return RRuntime.INT_NA; } if (value > Integer.MAX_VALUE || value <= Integer.MIN_VALUE) { na.enable(true); - warning(Message.NA_INTRODUCED_COERCION_INT); + if (accessIter.warning(Message.NA_INTRODUCED_COERCION_INT)) { + warningReportedProfile.enter(); + } return RRuntime.INT_NA; } return (int) value; } @Override - protected final byte getRaw(Object store, int index) { - int value = (int) getDouble(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + int value = (int) getDoubleImpl(accessIter, index); byte result = (byte) value; if ((result & 0xff) != value) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } return result; } @Override - protected final byte getLogical(Object store, int index) { - double value = getDouble(store, index); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.LOGICAL_NA : RRuntime.double2logicalNoCheck(value); } @Override - protected final RComplex getComplex(Object store, int index) { - double value = getDouble(store, index); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RComplex.createNA() : RRuntime.double2complexNoCheck(value); } @Override - protected final double getComplexR(Object store, int index) { - double value = getDouble(store, index); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_REAL_PART : value; } @Override - protected final double getComplexI(Object store, int index) { - double value = getDouble(store, index); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_IMAGINARY_PART : 0; } @Override - protected final String getString(Object store, int index) { - double value = getDouble(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + double value = getDoubleImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RContext.getRRuntimeASTAccess().encodeDouble(value); } @Override - protected final Object getListElement(Object store, int index) { - return getDouble(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getDoubleImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setDouble(store, index, sourceAccess.getDouble(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setDoubleImpl(accessIter, index, sourceAccess.getDouble(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setDouble(store, index, sourceAccess.getDouble(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setDoubleImpl(accessIter, index, sourceAccess.getDouble(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setDouble(store, index, RRuntime.DOUBLE_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setDoubleImpl(accessIter, index, RRuntime.DOUBLE_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getDouble(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getDoubleImpl(accessIter, index)); } } @@ -238,74 +234,76 @@ public abstract class SlowPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - byte value = getLogical(store, index); + protected final int getIntImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.INT_NA : RRuntime.logical2intNoCheck(value); } @Override - protected final double getDouble(Object store, int index) { - byte value = getLogical(store, index); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.DOUBLE_NA : RRuntime.logical2doubleNoCheck(value); } @Override - protected final byte getRaw(Object store, int index) { - byte value = getLogical(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); if (na.check(value)) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } return value; } @Override - protected final RComplex getComplex(Object store, int index) { - byte value = getLogical(store, index); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RComplex.createNA() : RRuntime.logical2complexNoCheck(value); } @Override - protected final double getComplexR(Object store, int index) { - byte value = getLogical(store, index); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_REAL_PART : value; } @Override - protected final double getComplexI(Object store, int index) { - byte value = getLogical(store, index); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.COMPLEX_NA_IMAGINARY_PART : 0; } @Override - protected final String getString(Object store, int index) { - byte value = getLogical(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + byte value = getLogicalImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RRuntime.logicalToStringNoCheck(value); } @Override - protected final Object getListElement(Object store, int index) { - return getLogical(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getLogicalImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setLogical(store, index, sourceAccess.getLogical(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setLogicalImpl(accessIter, index, sourceAccess.getLogical(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setLogical(store, index, sourceAccess.getLogical(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setLogicalImpl(accessIter, index, sourceAccess.getLogical(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setLogical(store, index, RRuntime.LOGICAL_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setLogicalImpl(accessIter, index, RRuntime.LOGICAL_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getLogical(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getLogicalImpl(accessIter, index)); } } @@ -317,65 +315,65 @@ public abstract class SlowPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - return getRaw(store, index) & 0xff; + protected final int getIntImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) & 0xff; } @Override - protected final double getDouble(Object store, int index) { - return getRaw(store, index) & 0xff; + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) & 0xff; } @Override - protected final byte getLogical(Object store, int index) { - return getRaw(store, index) == 0 ? RRuntime.LOGICAL_FALSE : RRuntime.LOGICAL_TRUE; + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) == 0 ? RRuntime.LOGICAL_FALSE : RRuntime.LOGICAL_TRUE; } @Override - protected final RComplex getComplex(Object store, int index) { - return RComplex.valueOf(getRaw(store, index) & 0xff, 0); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + return RComplex.valueOf(getRawImpl(accessIter, index) & 0xff, 0); } @Override - protected final double getComplexR(Object store, int index) { - return getRaw(store, index) & 0xff; + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index) & 0xff; } @Override - protected final double getComplexI(Object store, int index) { + protected final double getComplexIImpl(AccessIterator accessIter, int index) { return 0; } @Override - protected final String getString(Object store, int index) { - return RRuntime.rawToHexString(getRaw(store, index)); + protected final String getStringImpl(AccessIterator accessIter, int index) { + return RRuntime.rawToHexString(getRawImpl(accessIter, index)); } @Override - protected final Object getListElement(Object store, int index) { - return getRaw(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getRawImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setRaw(store, index, sourceAccess.getRaw(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setRawImpl(accessIter, index, sourceAccess.getRaw(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setRaw(store, index, sourceAccess.getRaw(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setRawImpl(accessIter, index, sourceAccess.getRaw(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { + protected void setNAImpl(AccessIterator accessIter, int index) { /* * There is no raw NA, but places that write NA for other types usually write 0 for raw. */ - setRaw(store, index, (byte) 0); + setRawImpl(accessIter, index, (byte) 0); } @Override - protected boolean isNA(Object store, int index) { + protected boolean isNAImpl(AccessIterator accessIter, int index) { return false; } } @@ -388,84 +386,94 @@ public abstract class SlowPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - double value = getComplexR(store, index); + protected final int getIntImpl(AccessIterator accessIter, int index) { + double value = getComplexRImpl(accessIter, index); if (Double.isNaN(value)) { na.enable(true); return RRuntime.INT_NA; } if (value > Integer.MAX_VALUE || value <= Integer.MIN_VALUE) { na.enable(true); - warning(Message.NA_INTRODUCED_COERCION_INT); + if (accessIter.warning(Message.NA_INTRODUCED_COERCION_INT)) { + warningReportedProfile.enter(); + } return RRuntime.INT_NA; } - if (getComplexI(store, index) != 0) { - warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION); + if (getComplexIImpl(accessIter, index) != 0) { + if (accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION)) { + warningReportedProfile.enter(); + } } return (int) value; } @Override - protected final double getDouble(Object store, int index) { - double value = getComplexR(store, index); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + double value = getComplexRImpl(accessIter, index); if (Double.isNaN(value)) { na.enable(true); return RRuntime.DOUBLE_NA; } - if (getComplexI(store, index) != 0) { - warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION); + if (getComplexIImpl(accessIter, index) != 0) { + if (accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION)) { + warningReportedProfile.enter(); + } } return value; } @Override - protected final byte getRaw(Object store, int index) { - double value = getComplexR(store, index); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + double value = getComplexRImpl(accessIter, index); if (Double.isNaN(value) || value < 0 || value >= 256) { - warning(Message.OUT_OF_RANGE); + if (accessIter.warning(Message.OUT_OF_RANGE)) { + warningReportedProfile.enter(); + } return 0; } - if (getComplexI(store, index) != 0) { - warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION); + if (getComplexIImpl(accessIter, index) != 0) { + if (accessIter.warning(Message.IMAGINARY_PARTS_DISCARDED_IN_COERCION)) { + warningReportedProfile.enter(); + } } return (byte) value; } @Override - protected final byte getLogical(Object store, int index) { - RComplex value = getComplex(store, index); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + RComplex value = getComplexImpl(accessIter, index); return na.check(value) ? RRuntime.LOGICAL_NA : RRuntime.complex2logicalNoCheck(value); } @Override - protected final String getString(Object store, int index) { - RComplex value = getComplex(store, index); + protected final String getStringImpl(AccessIterator accessIter, int index) { + RComplex value = getComplexImpl(accessIter, index); return na.check(value) ? RRuntime.STRING_NA : RContext.getRRuntimeASTAccess().encodeComplex(value); } @Override - protected final Object getListElement(Object store, int index) { - return getComplex(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getComplexImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setComplex(store, index, sourceAccess.getComplexR(sourceIter), sourceAccess.getComplexI(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setComplexImpl(accessIter, index, sourceAccess.getComplexR(sourceIter), sourceAccess.getComplexI(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setComplex(store, index, sourceAccess.getComplexR(sourceIter, sourceIndex), sourceAccess.getComplexI(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setComplexImpl(accessIter, index, sourceAccess.getComplexR(sourceIter, sourceIndex), sourceAccess.getComplexI(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setComplex(store, index, RRuntime.COMPLEX_NA_REAL_PART, RRuntime.COMPLEX_NA_IMAGINARY_PART); + protected void setNAImpl(AccessIterator accessIter, int index) { + setComplexImpl(accessIter, index, RRuntime.COMPLEX_NA_REAL_PART, RRuntime.COMPLEX_NA_IMAGINARY_PART); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getComplexR(store, index), getComplexI(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getComplexRImpl(accessIter, index), getComplexIImpl(accessIter, index)); } } @@ -477,131 +485,131 @@ public abstract class SlowPathVectorAccess extends VectorAccess { } @Override - protected final int getInt(Object store, int index) { - return na.convertStringToInt(getString(store, index)); + protected final int getIntImpl(AccessIterator accessIter, int index) { + return na.convertStringToInt(getStringImpl(accessIter, index)); } @Override - protected final double getDouble(Object store, int index) { - return na.convertStringToDouble(getString(store, index)); + protected final double getDoubleImpl(AccessIterator accessIter, int index) { + return na.convertStringToDouble(getStringImpl(accessIter, index)); } @Override - protected final byte getRaw(Object store, int index) { - int value = na.convertStringToInt(getString(store, index)); + protected final byte getRawImpl(AccessIterator accessIter, int index) { + int value = na.convertStringToInt(getStringImpl(accessIter, index)); return value >= 0 && value <= 255 ? (byte) value : 0; } @Override - protected final byte getLogical(Object store, int index) { - return na.convertStringToLogical(getString(store, index)); + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { + return na.convertStringToLogical(getStringImpl(accessIter, index)); } @Override - protected final RComplex getComplex(Object store, int index) { - return na.convertStringToComplex(getString(store, index)); + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { + return na.convertStringToComplex(getStringImpl(accessIter, index)); } @Override - protected final double getComplexR(Object store, int index) { - return na.convertStringToComplex(getString(store, index)).getRealPart(); + protected final double getComplexRImpl(AccessIterator accessIter, int index) { + return na.convertStringToComplex(getStringImpl(accessIter, index)).getRealPart(); } @Override - protected final double getComplexI(Object store, int index) { - return na.convertStringToComplex(getString(store, index)).getImaginaryPart(); + protected final double getComplexIImpl(AccessIterator accessIter, int index) { + return na.convertStringToComplex(getStringImpl(accessIter, index)).getImaginaryPart(); } @Override - protected final Object getListElement(Object store, int index) { - return getString(store, index); + protected final Object getListElementImpl(AccessIterator accessIter, int index) { + return getStringImpl(accessIter, index); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setString(store, index, sourceAccess.getString(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setStringImpl(accessIter, index, sourceAccess.getString(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setString(store, index, sourceAccess.getString(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setStringImpl(accessIter, index, sourceAccess.getString(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { - setString(store, index, RRuntime.STRING_NA); + protected void setNAImpl(AccessIterator accessIter, int index) { + setStringImpl(accessIter, index, RRuntime.STRING_NA); } @Override - protected boolean isNA(Object store, int index) { - return na.check(getString(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.check(getStringImpl(accessIter, index)); } } public abstract static class SlowPathFromListAccess extends SlowPathVectorAccess { @Override - protected final int getInt(Object store, int index) { + protected final int getIntImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final double getDouble(Object store, int index) { + protected final double getDoubleImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final byte getRaw(Object store, int index) { + protected final byte getRawImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final byte getLogical(Object store, int index) { + protected final byte getLogicalImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final RComplex getComplex(Object store, int index) { + protected final RComplex getComplexImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final double getComplexR(Object store, int index) { + protected final double getComplexRImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final double getComplexI(Object store, int index) { + protected final double getComplexIImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final String getString(Object store, int index) { + protected final String getStringImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setListElement(store, index, sourceAccess.getListElement(sourceIter)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + setListElementImpl(accessIter, index, sourceAccess.getListElement(sourceIter)); } @Override - protected final void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setListElement(store, index, sourceAccess.getListElement(sourceIter, sourceIndex)); + protected final void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + setListElementImpl(accessIter, index, sourceAccess.getListElement(sourceIter, sourceIndex)); } @Override - protected void setNA(Object store, int index) { + protected void setNAImpl(AccessIterator accessIter, int index) { /* * There is no list NA, but places that write NA for other types usually write NULL for * lists. */ - setListElement(store, index, RNull.instance); + setListElementImpl(accessIter, index, RNull.instance); } @Override - protected boolean isNA(Object store, int index) { - return na.checkListElement(getListElement(store, index)); + protected boolean isNAImpl(AccessIterator accessIter, int index) { + return na.checkListElement(getListElementImpl(accessIter, index)); } } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/VectorAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/VectorAccess.java index d9f5e3ad479183e40cc52f105b9b27e462f0fbf5..6746845f06a51e4a627735c0154312e0e315b21c 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/VectorAccess.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/VectorAccess.java @@ -27,6 +27,7 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.nodes.Node; +import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; @@ -42,6 +43,8 @@ import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractContainer; import com.oracle.truffle.r.runtime.nodes.RBaseNode; import com.oracle.truffle.r.runtime.ops.na.NACheck; +import java.util.HashSet; +import java.util.Set; /** * This class is the main access point for reading and writing vectors. Every implementation of @@ -79,15 +82,40 @@ public abstract class VectorAccess extends Node { this.hasStore = hasStore; } - public static final class SequentialIterator implements AutoCloseable { + public abstract static class AccessIterator { + private Set<RError.Message> reportedWarnings; protected final Object store; // internal store, native mirror or vector protected final int length; - protected int index; - private SequentialIterator(Object store, int length) { + protected AccessIterator(Object store, int length) { this.store = store; this.length = length; + } + + public final Object getStore() { + return store; + } + + @TruffleBoundary + public final boolean warning(RError.Message message) { + if (reportedWarnings == null) { + reportedWarnings = new HashSet<>(); + } + if (reportedWarnings.add(message)) { + RError.warning(RError.SHOW_CALLER, message); + return true; + } + return false; + } + } + + public static final class SequentialIterator extends AccessIterator implements AutoCloseable { + + protected int index; + + private SequentialIterator(Object store, int length) { + super(store, length); this.index = -1; } @@ -100,24 +128,16 @@ public abstract class VectorAccess extends Node { return index; } - Object getStore() { - return store; - } - @Override public String toString() { return String.format("<iterator %d of %d, %s>", index, length, store == null ? "null" : store.getClass().getSimpleName()); } } - public static final class RandomIterator implements AutoCloseable { - - protected final Object store; // internal store, native mirror or vector - protected final int length; + public static final class RandomIterator extends AccessIterator implements AutoCloseable { private RandomIterator(Object store, int length) { - this.store = store; - this.length = length; + super(store, length); } @Override @@ -125,85 +145,81 @@ public abstract class VectorAccess extends Node { // nothing to do } - Object getStore() { - return store; - } - @Override public String toString() { return String.format("<random access %s>", store == null ? "null" : store.getClass().getSimpleName()); } } - protected abstract int getInt(Object store, int index); + protected abstract int getIntImpl(AccessIterator accessIter, int index); - protected abstract double getDouble(Object store, int index); + protected abstract double getDoubleImpl(AccessIterator accessIter, int index); - protected abstract RComplex getComplex(Object store, int index); + protected abstract RComplex getComplexImpl(AccessIterator accessIter, int index); - protected abstract double getComplexR(Object store, int index); + protected abstract double getComplexRImpl(AccessIterator accessIter, int index); - protected abstract double getComplexI(Object store, int index); + protected abstract double getComplexIImpl(AccessIterator accessIter, int index); - protected abstract byte getRaw(Object store, int index); + protected abstract byte getRawImpl(AccessIterator accessIter, int index); - protected abstract byte getLogical(Object store, int index); + protected abstract byte getLogicalImpl(AccessIterator accessIter, int index); - protected abstract String getString(Object store, int index); + protected abstract String getStringImpl(AccessIterator accessIter, int index); - protected abstract Object getListElement(Object store, int index); + protected abstract Object getListElementImpl(AccessIterator accessIter, int index); @SuppressWarnings("unused") - protected void setInt(Object store, int index, int value) { + protected void setIntImpl(AccessIterator accessIter, int index, int value) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setDouble(Object store, int index, double value) { + protected void setDoubleImpl(AccessIterator accessIter, int index, double value) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setComplex(Object store, int index, double real, double imaginary) { + protected void setComplexImpl(AccessIterator accessIter, int index, double real, double imaginary) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setRaw(Object store, int index, byte value) { + protected void setRawImpl(AccessIterator accessIter, int index, byte value) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setLogical(Object store, int index, byte value) { + protected void setLogicalImpl(AccessIterator accessIter, int index, byte value) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setString(Object store, int index, String value) { + protected void setStringImpl(AccessIterator accessIter, int index, String value) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setListElement(Object store, int index, Object value) { + protected void setListElementImpl(AccessIterator accessIter, int index, Object value) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setFromSameType(Object store, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { + protected void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setFromSameType(Object store, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { + protected void setFromSameTypeImpl(AccessIterator accessIter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { throw RInternalError.shouldNotReachHere(); } @SuppressWarnings("unused") - protected void setNA(Object store, int index) { + protected void setNAImpl(AccessIterator accessIter, int index) { throw RInternalError.shouldNotReachHere(); } - protected abstract boolean isNA(Object store, int index); + protected abstract boolean isNAImpl(AccessIterator accessIter, int index); public final Object cast(Object value) { return clazz.cast(value); @@ -276,83 +292,85 @@ public abstract class VectorAccess extends Node { public abstract RType getType(); public int getInt(SequentialIterator iter) { - return getInt(iter.store, iter.index); + return getIntImpl(iter, iter.index); } public double getDouble(SequentialIterator iter) { - return getDouble(iter.store, iter.index); + return getDoubleImpl(iter, iter.index); } public RComplex getComplex(SequentialIterator iter) { - return getComplex(iter.store, iter.index); + return getComplexImpl(iter, iter.index); } public double getComplexR(SequentialIterator iter) { - return getComplexR(iter.store, iter.index); + return getComplexRImpl(iter, iter.index); } public double getComplexI(SequentialIterator iter) { - return getComplexI(iter.store, iter.index); + return getComplexIImpl(iter, iter.index); } public final byte getRaw(SequentialIterator iter) { - return getRaw(iter.store, iter.index); + return getRawImpl(iter, iter.index); } public final byte getLogical(SequentialIterator iter) { - return getLogical(iter.store, iter.index); + return getLogicalImpl(iter, iter.index); } public String getString(SequentialIterator iter) { - return getString(iter.store, iter.index); + return getStringImpl(iter, iter.index); } public final Object getListElement(SequentialIterator iter) { - return getListElement(iter.store, iter.index); + return getListElementImpl(iter, iter.index); } public final void setInt(SequentialIterator iter, int value) { - setInt(iter.store, iter.index, value); + setIntImpl(iter, iter.index, value); } public final void setDouble(SequentialIterator iter, double value) { - setDouble(iter.store, iter.index, value); + setDoubleImpl(iter, iter.index, value); } public final void setComplex(SequentialIterator iter, double real, double imaginary) { - setComplex(iter.store, iter.index, real, imaginary); + setComplexImpl(iter, iter.index, real, imaginary); } public final void setRaw(SequentialIterator iter, byte value) { - setRaw(iter.store, iter.index, value); + setRawImpl(iter, iter.index, value); } public final void setLogical(SequentialIterator iter, byte value) { - setLogical(iter.store, iter.index, value); + setLogicalImpl(iter, iter.index, value); } public final void setString(SequentialIterator iter, String value) { - setString(iter.store, iter.index, value); + setStringImpl(iter, iter.index, value); } public final void setListElement(SequentialIterator iter, Object value) { - setListElement(iter.store, iter.index, value); + setListElementImpl(iter, iter.index, value); } - public final void setFromSameType(SequentialIterator iter, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setFromSameType(iter.store, iter.index, sourceAccess, sourceIter); + public final void setFromSameType(SequentialIterator iter, VectorAccess sourceAccess, + SequentialIterator sourceIter) { + setFromSameTypeImpl(iter, iter.index, sourceAccess, sourceIter); } - public final void setFromSameType(SequentialIterator iter, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setFromSameType(iter.store, iter.index, sourceAccess, sourceIter, sourceIndex); + public final void setFromSameType(SequentialIterator iter, VectorAccess sourceAccess, + RandomIterator sourceIter, int sourceIndex) { + setFromSameTypeImpl(iter, iter.index, sourceAccess, sourceIter, sourceIndex); } public final void setNA(SequentialIterator iter) { - setNA(iter.store, iter.index); + setNAImpl(iter, iter.index); } public final boolean isNA(SequentialIterator iter) { - return isNA(iter.store, iter.index); + return isNAImpl(iter, iter.index); } /** @@ -377,83 +395,83 @@ public abstract class VectorAccess extends Node { } public int getInt(RandomIterator iter, int index) { - return getInt(iter.store, index); + return getIntImpl(iter, index); } public double getDouble(RandomIterator iter, int index) { - return getDouble(iter.store, index); + return getDoubleImpl(iter, index); } public RComplex getComplex(RandomIterator iter, int index) { - return getComplex(iter.store, index); + return getComplexImpl(iter, index); } public double getComplexR(RandomIterator iter, int index) { - return getComplexR(iter.store, index); + return getComplexRImpl(iter, index); } public double getComplexI(RandomIterator iter, int index) { - return getComplexI(iter.store, index); + return getComplexIImpl(iter, index); } public final byte getRaw(RandomIterator iter, int index) { - return getRaw(iter.store, index); + return getRawImpl(iter, index); } public final byte getLogical(RandomIterator iter, int index) { - return getLogical(iter.store, index); + return getLogicalImpl(iter, index); } public String getString(RandomIterator iter, int index) { - return getString(iter.store, index); + return getStringImpl(iter, index); } public final Object getListElement(RandomIterator iter, int index) { - return getListElement(iter.store, index); + return getListElementImpl(iter, index); } public final void setInt(RandomIterator iter, int index, int value) { - setInt(iter.store, index, value); + setIntImpl(iter, index, value); } public final void setDouble(RandomIterator iter, int index, double value) { - setDouble(iter.store, index, value); + setDoubleImpl(iter, index, value); } public final void setComplex(RandomIterator iter, int index, double real, double imaginary) { - setComplex(iter.store, index, real, imaginary); + setComplexImpl(iter, index, real, imaginary); } public final void setRaw(RandomIterator iter, int index, byte value) { - setRaw(iter.store, index, value); + setRawImpl(iter, index, value); } public final void setLogical(RandomIterator iter, int index, byte value) { - setLogical(iter.store, index, value); + setLogicalImpl(iter, index, value); } public final void setString(RandomIterator iter, int index, String value) { - setString(iter.store, index, value); + setStringImpl(iter, index, value); } public final void setListElement(RandomIterator iter, int index, Object value) { - setListElement(iter.store, index, value); + setListElementImpl(iter, index, value); } public final void setFromSameType(RandomIterator iter, int index, VectorAccess sourceAccess, SequentialIterator sourceIter) { - setFromSameType(iter.store, index, sourceAccess, sourceIter); + setFromSameTypeImpl(iter, index, sourceAccess, sourceIter); } public final void setFromSameType(RandomIterator iter, int index, VectorAccess sourceAccess, RandomIterator sourceIter, int sourceIndex) { - setFromSameType(iter.store, index, sourceAccess, sourceIter, sourceIndex); + setFromSameTypeImpl(iter, index, sourceAccess, sourceIter, sourceIndex); } public final void setNA(RandomIterator iter, int index) { - setNA(iter.store, index); + setNAImpl(iter, index); } public final boolean isNA(RandomIterator iter, int index) { - return isNA(iter.store, index); + return isNAImpl(iter, index); } /**