Mercurial > hg > truffle
changeset 16466:d41922beb512
Truffle: use ClassValue for NodeClass
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Thu, 10 Jul 2014 18:08:29 +0200 |
parents | 456abab80eb5 |
children | 17f7331dcc4f |
files | graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java |
diffstat | 1 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Thu Jul 10 18:08:29 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Thu Jul 10 18:08:29 2014 +0200 @@ -157,8 +157,14 @@ * every subclass of {@link Node} that is used. */ public static final class NodeClass { - - private static final Map<Class<?>, NodeClass> nodeClasses = new IdentityHashMap<>(); + private static final ClassValue<NodeClass> nodeClasses = new ClassValue<NodeClass>() { + @SuppressWarnings("unchecked") + @Override + protected NodeClass computeValue(Class<?> clazz) { + assert Node.class.isAssignableFrom(clazz); + return new NodeClass((Class<? extends Node>) clazz, unsafeFieldOffsetProvider); + } + }; // The comprehensive list of all fields. private final NodeField[] fields; @@ -168,12 +174,7 @@ private final long[] childrenOffsets; public static NodeClass get(Class<? extends Node> clazz) { - NodeClass nodeClass = nodeClasses.get(clazz); - if (nodeClass == null) { - nodeClass = new NodeClass(clazz, unsafeFieldOffsetProvider); - nodeClasses.put(clazz, nodeClass); - } - return nodeClass; + return nodeClasses.get(clazz); } public NodeClass(Class<? extends Node> clazz, FieldOffsetProvider fieldOffsetProvider) {