diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java index 63b11a187c3b94bd87bc60a62d6323612990d50f..600d84a3c05a608c1cfca0d6ac255d4068d88790 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java @@ -37,6 +37,7 @@ import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; +import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RAttributable; import com.oracle.truffle.r.runtime.data.RAttributes; @@ -183,7 +184,7 @@ public abstract class Identical extends RBuiltinNode { @SuppressWarnings("unused") @Specialization protected byte doInternalIdentical(RSymbol x, RSymbol y, boolean numEq, boolean singleNA, boolean attribAsSet, boolean ignoreBytecode, boolean ignoreEnvironment) { - assert x.getName() == x.getName().intern() && y.getName() == y.getName().intern(); + assert Utils.isInterned(x.getName()) && Utils.isInterned(y.getName()); return x.getName() == y.getName() ? RRuntime.LOGICAL_TRUE : RRuntime.LOGICAL_FALSE; } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Slot.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Slot.java index 2825463c7679da160107b42929f18bba1d333d5e..6c4e907480e70cdc8229dd55ea3bcca78968b29f 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Slot.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Slot.java @@ -28,6 +28,7 @@ import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.function.WrapArgumentNode; import com.oracle.truffle.r.runtime.RError; +import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RPromise; import com.oracle.truffle.r.runtime.data.RSymbol; @@ -68,7 +69,7 @@ public abstract class Slot extends RBuiltinNode { protected Object getSlot(Object object, Object nameObj, @Cached("createClassProfile()") ValueProfile nameObjProfile) { String name = getName(nameObjProfile.profile(nameObj)); - assert name == name.intern(); + assert Utils.isInterned(name); return accessSlotNode.executeAccess(object, name); } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java index c8e50f12e0e519dbabfa155a5272b278103c3f99..910e062082ce458937f3f726128fabc346fb5071 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java @@ -40,6 +40,7 @@ import com.oracle.truffle.r.nodes.function.WrapArgumentBaseNode; import com.oracle.truffle.r.nodes.function.WrapArgumentNode; import com.oracle.truffle.r.runtime.ArgumentsSignature; import com.oracle.truffle.r.runtime.RInternalError; +import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.context.RContext; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.REmpty; @@ -144,7 +145,7 @@ public class RASTUtils { return value; } else if (element instanceof RSyntaxLookup) { String id = ((RSyntaxLookup) element).getIdentifier(); - assert id == id.intern() : element; + assert Utils.isInterned(id); return RDataFactory.createSymbol(id); } else { assert element instanceof RSyntaxCall || element instanceof RSyntaxFunction; @@ -163,7 +164,7 @@ public class RASTUtils { return RDataFactory.createSymbolInterned(rvcn.getPrintForm()); } else { String id = ((ReadVariableNode) readVariableNode).getIdentifier(); - assert id == id.intern(); + assert Utils.isInterned(id); return RDataFactory.createSymbol(id); } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java index deb90eb6641880a7f0b5834f9f7ebd219453608d..697ec2da297636dae05c7880176712966b16b2a8 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessSlotNode.java @@ -69,7 +69,7 @@ public abstract class AccessSlotNode extends RNode { private Object getSlotS4Internal(RAttributable object, String name, Object value) { if (value == null) { noSlot.enter(); - assert name == name.intern(); + assert Utils.isInterned(name); if (name == RRuntime.DOT_S3_CLASS) { if (classHierarchy == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -158,7 +158,7 @@ public abstract class AccessSlotNode extends RNode { } protected boolean isDotData(String name) { - assert name == name.intern(); + assert Utils.isInterned(name); return name == RRuntime.DOT_DATA; } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java index 6b0f907f45d7d1a37561e45c411096b9a27ea8e2..a92d821b1865c6c785102e92f72e38eb570aab54 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateSlotNode.java @@ -56,7 +56,7 @@ public abstract class UpdateSlotNode extends RNode { @Specialization(contains = "updateSlotS4Cached", guards = "!isData(name)") protected Object updateSlotS4(RAttributable object, String name, Object value) { - assert name == name.intern(); + assert Utils.isInterned(name); object.setAttr(name, prepareValue(value)); return object; } @@ -75,7 +75,7 @@ public abstract class UpdateSlotNode extends RNode { } protected boolean isData(String name) { - assert name == name.intern(); + assert Utils.isInterned(name); return name == RRuntime.DOT_DATA; } } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java index bb5239193c73069347742ef0da9b75e9563bcf80..9c9ffffb388f84c5819887d65e8721dc07ed7048 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/CollectGenericArgumentsNode.java @@ -37,6 +37,7 @@ import com.oracle.truffle.r.nodes.function.ClassHierarchyScalarNode; import com.oracle.truffle.r.nodes.function.ClassHierarchyScalarNodeGen; import com.oracle.truffle.r.nodes.function.PromiseHelperNode; import com.oracle.truffle.r.nodes.function.PromiseHelperNode.PromiseCheckHelperNode; +import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RList; import com.oracle.truffle.r.runtime.data.RPromise; @@ -82,7 +83,7 @@ public abstract class CollectGenericArgumentsNode extends RBaseNode { for (int i = 0; i < argReads.length; i++) { Object cachedId = argReads[i].getIdentifier(); String id = ((RSymbol) (arguments.getDataAt(i))).getName(); - assert cachedId instanceof String && cachedId == ((String) cachedId).intern() && id == id.intern(); + assert cachedId instanceof String && Utils.isInterned((String) cachedId) && Utils.isInterned(id); if (cachedId != id) { throw new SlowPathException(); } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java index 1b5a016fd901447bcb8553800534dc14ed213a6b..aeec6146425d173a9004ff1e1e5de3a3d74edde7 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RArguments.java @@ -124,7 +124,7 @@ public final class RArguments { public S3Args(String generic, Object clazz, Object method, MaterializedFrame callEnv, MaterializedFrame defEnv, String group) { super(generic, method); assert generic != null && callEnv != null : generic + " " + callEnv; - assert generic.intern() == generic; + assert Utils.isInterned(generic); this.clazz = clazz; this.callEnv = callEnv; this.defEnv = defEnv; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java index 3e693cfc72fe03074163ea8e5beb33411a420228..d1a1a0b2098d1800ee8f43c0addb5f547be981d9 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Utils.java @@ -897,6 +897,10 @@ public final class Utils { return s.intern(); } + public static boolean isInterned(String s) { + return s == s.intern(); + } + @TruffleBoundary public static String toString(Object obj) { return obj.toString(); diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RAttributes.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RAttributes.java index b2c771cdee0e2be25ba77abd9b978c62d04e9d00..29c07ef768144d3c229eaf7d2fab6277a1b3f240 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RAttributes.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RAttributes.java @@ -33,6 +33,7 @@ import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.CompilerDirectives.ValueType; import com.oracle.truffle.api.utilities.CyclicAssumption; +import com.oracle.truffle.r.runtime.Utils; /** * Provides the generic mechanism for associating attributes with a R object. It does no special @@ -161,7 +162,7 @@ public final class RAttributes implements Iterable<RAttributes.RAttribute> { @TruffleBoundary private static boolean isInterned(String name) { - assert name == name.intern() : name; + assert Utils.isInterned(name) : name; return true; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java index 1e913660559bcba80f69f54adfa20024f8881234..4530068e0a7e9e532dc892b7799500e9b2751c78 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RDataFactory.java @@ -37,6 +37,7 @@ import com.oracle.truffle.r.runtime.FastROptions; import com.oracle.truffle.r.runtime.RCaller; import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.RRuntime; +import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.builtins.RBuiltinDescriptor; import com.oracle.truffle.r.runtime.data.RPromise.Closure; import com.oracle.truffle.r.runtime.data.RPromise.EagerFeedback; @@ -393,7 +394,7 @@ public final class RDataFactory { } public static RSymbol createSymbol(String name) { - assert name == name.intern(); + assert Utils.isInterned(name); return traceDataCreated(new RSymbol(name)); }