diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java @ 10596:f43eb2f1bbbc

Truffle-DSL: code-generation of polymorphic caching
author Christian Humer <christian.humer@gmail.com>
date Mon, 01 Jul 2013 20:32:20 +0200
parents 3cc5fb59916e
children
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java	Mon Jul 01 20:31:30 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java	Mon Jul 01 20:32:20 2013 +0200
@@ -46,12 +46,14 @@
     private ParameterSpec instanceParameterSpec;
 
     private List<SpecializationData> specializations;
+    private List<SpecializationData> polymorphicSpecializations;
     private List<SpecializationListenerData> specializationListeners;
     private Map<Integer, List<ExecutableTypeData>> executableTypes;
     private List<ShortCircuitData> shortCircuits;
     private List<String> assumptions;
     private List<CreateCastData> casts;
 
+    private int polymorphicDepth = -1;
     private String shortName;
 
     public NodeData(TypeElement type, String id) {
@@ -75,6 +77,14 @@
         this.assumptions = splitSource.assumptions;
     }
 
+    public int getPolymorphicDepth() {
+        return polymorphicDepth;
+    }
+
+    void setPolymorphicDepth(int polymorphicDepth) {
+        this.polymorphicDepth = polymorphicDepth;
+    }
+
     public List<CreateCastData> getCasts() {
         return casts;
     }
@@ -272,6 +282,10 @@
                 return type;
             }
         }
+
+        for (ExecutableTypeData type : types) {
+            return type;
+        }
         return null;
     }
 
@@ -358,6 +372,15 @@
         return null;
     }
 
+    public SpecializationData getUninitializedSpecialization() {
+        for (SpecializationData specialization : specializations) {
+            if (specialization.isUninitialized()) {
+                return specialization;
+            }
+        }
+        return null;
+    }
+
     @Override
     public TypeSystemData getTypeSystem() {
         return typeSystem;
@@ -381,6 +404,8 @@
         dumpProperty(builder, indent, "fields", getChildren());
         dumpProperty(builder, indent, "executableTypes", getExecutableTypes());
         dumpProperty(builder, indent, "specializations", getSpecializations());
+        dumpProperty(builder, indent, "polymorphicDepth", getPolymorphicDepth());
+        dumpProperty(builder, indent, "polymorphic", getPolymorphicSpecializations());
         dumpProperty(builder, indent, "assumptions", getAssumptions());
         dumpProperty(builder, indent, "casts", getCasts());
         dumpProperty(builder, indent, "messages", collectMessages());
@@ -488,6 +513,14 @@
         }
     }
 
+    void setPolymorphicSpecializations(List<SpecializationData> polymorphicSpecializations) {
+        this.polymorphicSpecializations = polymorphicSpecializations;
+    }
+
+    public List<SpecializationData> getPolymorphicSpecializations() {
+        return polymorphicSpecializations;
+    }
+
     void setSpecializationListeners(List<SpecializationListenerData> specializationListeners) {
         this.specializationListeners = specializationListeners;
     }