Chromium Code Reviews| Index: lib/compiler/implementation/universe.dart |
| diff --git a/lib/compiler/implementation/universe.dart b/lib/compiler/implementation/universe.dart |
| index 635cd737cf1c19b9d2425842d930e1644221f751..609df3c3745953551b7d1d14777103311996cb3f 100644 |
| --- a/lib/compiler/implementation/universe.dart |
| +++ b/lib/compiler/implementation/universe.dart |
| @@ -13,6 +13,7 @@ class Universe { |
| final Map<SourceString, Set<Selector>> invokedSetters; |
| final Map<SourceString, Set<Selector>> fieldGetters; |
| final Map<SourceString, Set<Selector>> fieldSetters; |
| + final Map<Element, Map<SourceString, bool>> fieldIntegerSetters; |
| // TODO(ngeoffray): This should be a Set<Type>. |
| final Set<Element> isChecks; |
| final RuntimeTypeInformation rti; |
| @@ -27,6 +28,8 @@ class Universe { |
| invokedSetters = new Map<SourceString, Set<Selector>>(), |
| fieldGetters = new Map<SourceString, Set<Selector>>(), |
| fieldSetters = new Map<SourceString, Set<Selector>>(), |
| + fieldIntegerSetters = |
| + new Map<Element, Map<SourceString, bool>>(), |
| isChecks = new Set<Element>(), |
| rti = new RuntimeTypeInformation(); |
| @@ -67,6 +70,25 @@ class Universe { |
| bool hasFieldSetter(Element member, Compiler compiler) { |
| return hasMatchingSelector(fieldSetters[member.name], member, compiler); |
| } |
| + |
| + void updateFieldIntegerSetters( |
| + Type type, SourceString name, bool isInteger) { |
| + Map<SourceString, bool> fields = |
| + fieldIntegerSetters.putIfAbsent(type.element, () => new Map<SourceString, bool>()); |
|
ngeoffray
2012/06/14 13:01:21
line too long
Søren Gjesse
2012/06/15 13:19:59
Done.
|
| + if (!fields.containsKey(name)) { |
| + fields[name] = isInteger; |
| + } else { |
| + fields[name] = fields[name] && isInteger; |
| + } |
| + } |
| + |
| + bool hasFieldOnlyIntegerSetters(Type type, SourceString name) { |
| + if (type == null) return false; |
| + if (!fieldIntegerSetters.containsKey(type.element)) return false; |
| + Map<SourceString, bool> fields = fieldIntegerSetters[type.element]; |
| + if (!fields.containsKey(name)) return false; |
| + return fields[name]; |
| + } |
| } |
| class SelectorKind { |