Mercurial > hg > truffle
diff graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java @ 13127:f42f1f5d5ce0
Allow custom field offset providers
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Fri, 22 Nov 2013 11:59:39 -0800 |
parents | 42a60780c2c9 |
children | 3f1c70baa3bd |
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Nov 22 11:58:04 2013 -0800 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Nov 22 11:59:39 2013 -0800 @@ -158,13 +158,17 @@ */ private final boolean isSimplifiable; - private NodeClass(Class<?> clazz) { + public NodeClass(Class<?> clazz) { + this(clazz, new DefaultCalcOffset(), null, 0); + } + + public NodeClass(Class<?> clazz, CalcOffset calcOffset, int[] presetIterableIds, int presetIterableId) { super(clazz); assert NODE_CLASS.isAssignableFrom(clazz); this.isCanonicalizable = Canonicalizable.class.isAssignableFrom(clazz); this.isSimplifiable = Simplifiable.class.isAssignableFrom(clazz); - FieldScanner scanner = new FieldScanner(new DefaultCalcOffset()); + FieldScanner scanner = new FieldScanner(calcOffset); scanner.scan(clazz); directInputCount = scanner.inputOffsets.size(); @@ -200,7 +204,10 @@ } this.nameTemplate = newNameTemplate == null ? newShortName : newNameTemplate; this.shortName = newShortName; - if (IterableNodeType.class.isAssignableFrom(clazz)) { + if (presetIterableIds != null) { + this.iterableIds = presetIterableIds; + this.iterableId = presetIterableId; + } else if (IterableNodeType.class.isAssignableFrom(clazz)) { ITERABLE_NODE_TYPES.increment(); this.iterableId = nextIterableId++; List<NodeClass> existingClasses = new LinkedList<>();