changeset 16811:e8d9b3827d4b

Truffle-DSL: added hashing for type lookups.
author Christian Humer <christian.humer@gmail.com>
date Wed, 13 Aug 2014 18:06:18 +0200
parents f3a1020472cf
children c22fc3f48c60
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java
diffstat 2 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeData.java	Wed Aug 13 18:06:18 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeData.java	Wed Aug 13 18:06:18 2014 +0200
@@ -48,6 +48,10 @@
         this.boxedType = boxedType;
     }
 
+    public int getIndex() {
+        return index;
+    }
+
     @Override
     public Element getMessageElement() {
         return typeSystem.getMessageElement();
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java	Wed Aug 13 18:06:18 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java	Wed Aug 13 18:06:18 2014 +0200
@@ -35,6 +35,7 @@
     private List<TypeData> types;
     private List<TypeMirror> primitiveTypeMirrors = new ArrayList<>();
     private List<TypeMirror> boxedTypeMirrors = new ArrayList<>();
+    private Map<TypeMirror, TypeData> cachedTypes = new HashMap<>();
 
     private List<ImplicitCastData> implicitCasts;
     private List<TypeCastData> casts;
@@ -58,6 +59,7 @@
             for (TypeData typeData : types) {
                 primitiveTypeMirrors.add(typeData.getPrimitiveType());
                 boxedTypeMirrors.add(typeData.getBoxedType());
+                cachedTypes.put(typeData.getPrimitiveType(), typeData);
             }
         }
     }
@@ -152,10 +154,9 @@
     }
 
     public int findType(TypeMirror type) {
-        for (int i = 0; i < types.size(); i++) {
-            if (ElementUtils.typeEquals(types.get(i).getPrimitiveType(), type)) {
-                return i;
-            }
+        TypeData data = cachedTypes.get(type);
+        if (data != null) {
+            return data.getIndex();
         }
         return -1;
     }