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<>();