From cdd931db2d12e7977216e4d8d98a731db8a9c39c Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Mon, 20 Apr 2015 17:06:58 -0700 Subject: [PATCH] cleanup after fix for serializing scalar strings --- .../truffle/r/nodes/access/ConstantNode.java | 12 ++-------- .../oracle/truffle/r/runtime/RDeparse.java | 4 +--- .../oracle/truffle/r/runtime/RSerialize.java | 14 +++++------ .../truffle/r/runtime/gnur/SEXPTYPE.java | 24 ++++++------------- 4 files changed, 17 insertions(+), 37 deletions(-) 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 ab19c1bd11..f320dab988 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 9b25f060d6..bc8a6d2ff2 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 5fcc530c9a..d87c1b8fe0 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 7c4c7e3af1..99349adc40 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; -- GitLab