diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java index ab19c1bd1135aad9ce711cd1c4d9a6bffeb791ff..f320dab9880ceb19da2841f08e7012e84dde29b8 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java @@ -44,11 +44,7 @@ public abstract class ConstantNode extends RNode implements VisibilityController @TruffleBoundary public void deparse(RDeparse.State state) { if (!(this instanceof ConstantMissingNode)) { - Object val = getValue(); - if (this instanceof ConstantStringScalarNode) { - val = new SEXPTYPE.FastRString((String) val); - } - RDeparse.deparse2buff(state, val); + RDeparse.deparse2buff(state, getValue()); } } @@ -62,11 +58,7 @@ public abstract class ConstantNode extends RNode implements VisibilityController if (this instanceof ConstantMissingNode) { state.setCar(RMissing.instance); } else { - Object val = getValue(); - if (this instanceof ConstantStringScalarNode) { - val = new SEXPTYPE.FastRString((String) val); - } - state.setCar(val); + state.setCar(getValue()); } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java index 9b25f060d68ea08788c27e8512369eb9c6c6edbe..bc8a6d2ff211ccc7148a56f8c9de870639870d2e 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java @@ -742,7 +742,6 @@ public class RDeparse { case FASTR_DOUBLE: case FASTR_INT: case FASTR_BYTE: - case FASTR_STRING: vecElement2buff(state, SEXPTYPE.convertFastRScalarType(type), obj); break; @@ -974,11 +973,10 @@ public class RDeparse { private static State vecElement2buff(State state, SEXPTYPE type, Object element) { switch (type) { - case FASTR_STRING: case STRSXP: // TODO encoding state.append('"'); - String s = type == SEXPTYPE.STRSXP ? (String) element : ((SEXPTYPE.FastRString) element).value; + String s = (String) element; for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); int charInt = ch; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java index 5fcc530c9acdb05b171db53cbb6bbb9b507cca98..d87c1b8fe04d84e6624bbe48fa72100126fb05d9 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java @@ -22,7 +22,6 @@ import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.RAttributes.RAttribute; import com.oracle.truffle.r.runtime.env.*; import com.oracle.truffle.r.runtime.gnur.*; -import com.oracle.truffle.r.runtime.gnur.SEXPTYPE.FastRString; // Code loosely transcribed from GnuR serialize.c. @@ -1021,13 +1020,13 @@ public class RSerialize { return SEXPTYPE.INTSXP; case FASTR_DOUBLE: return SEXPTYPE.REALSXP; - case FASTR_STRING: - return SEXPTYPE.STRSXP; case FASTR_BYTE: return SEXPTYPE.LGLSXP; + case FASTR_COMPLEX: + return SEXPTYPE.CPLXSXP; case FASTR_DATAFRAME: + case FASTR_FACTOR: return SEXPTYPE.VECSXP; - default: return type; } @@ -1208,10 +1207,11 @@ public class RSerialize { break; } - case FASTR_STRING: { - String value = ((FastRString) obj).value; + case FASTR_COMPLEX: { + RComplex value = (RComplex) obj; stream.writeInt(1); - writeItem(value); + stream.writeDouble(value.getRealPart()); + stream.writeDouble(value.getImaginaryPart()); break; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/gnur/SEXPTYPE.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/gnur/SEXPTYPE.java index 7c4c7e3af1681dcb9edc7cadf2a43a8f2b9e1a51..99349adc40e2516d7da472c8a7d9c6f4b1611da0 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/gnur/SEXPTYPE.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/gnur/SEXPTYPE.java @@ -69,14 +69,18 @@ public enum SEXPTYPE { ATTRLANGSXP(240), ATTRLISTSXP(239), - // FastR scalar variants of GnuR vector types - // TODO remove these + /* + * FastR scalar variants of GnuR vector types (other than String) These could be removed in a + * similar way to String, but there is no pressing need. + */ FASTR_DOUBLE(300, Double.class), FASTR_INT(301, Integer.class), FASTR_BYTE(302, Byte.class), - FASTR_STRING(303, FastRString.class), + FASTR_COMPLEX(303, RComplex.class), + // FastR special "vector" types FASTR_DATAFRAME(304, RDataFrame.class), FASTR_FACTOR(305, RFactor.class), + // very special case FASTR_SOURCESECTION(306, SourceSection.class); public final int code; @@ -125,18 +129,6 @@ public enum SEXPTYPE { throw RInternalError.shouldNotReachHere(fastRClass.getName()); } - /** - * A wrapper class that allows {@link RDeparse} to distinguish {@link SEXPTYPE#CHARSXP} and - * {@link SEXPTYPE#FASTR_STRING}. - */ - public static class FastRString { - public final String value; - - public FastRString(String value) { - this.value = value; - } - } - public static SEXPTYPE convertFastRScalarType(SEXPTYPE type) { switch (type) { case FASTR_DOUBLE: @@ -145,8 +137,6 @@ public enum SEXPTYPE { return SEXPTYPE.INTSXP; case FASTR_BYTE: return SEXPTYPE.LGLSXP; - case FASTR_STRING: - return type; default: assert false; return null;