From 0974d66e5d29275e87534f4505f067e551885b1b Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Wed, 9 Nov 2016 17:25:54 +0100 Subject: [PATCH] introduce Utils.isInterned --- .../com/oracle/truffle/r/nodes/builtin/base/Identical.java | 3 ++- .../src/com/oracle/truffle/r/nodes/builtin/base/Slot.java | 3 ++- .../src/com/oracle/truffle/r/nodes/RASTUtils.java | 5 +++-- .../com/oracle/truffle/r/nodes/access/AccessSlotNode.java | 4 ++-- .../com/oracle/truffle/r/nodes/access/UpdateSlotNode.java | 4 ++-- .../truffle/r/nodes/objects/CollectGenericArgumentsNode.java | 3 ++- .../src/com/oracle/truffle/r/runtime/RArguments.java | 2 +- .../src/com/oracle/truffle/r/runtime/Utils.java | 4 ++++ .../src/com/oracle/truffle/r/runtime/data/RAttributes.java | 3 ++- .../src/com/oracle/truffle/r/runtime/data/RDataFactory.java | 3 ++- 10 files changed, 22 insertions(+), 12 deletions(-) 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 63b11a187c..600d84a3c0 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 2825463c76..6c4e907480 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 c8e50f12e0..910e062082 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 deb90eb664..697ec2da29 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 6b0f907f45..a92d821b18 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 bb5239193c..9c9ffffb38 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 1b5a016fd9..aeec614642 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 3e693cfc72..d1a1a0b209 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 b2c771cdee..29c07ef768 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 1e91366055..4530068e0a 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)); } -- GitLab