Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 class EnqueueTask extends CompilerTask { | 5 class EnqueueTask extends CompilerTask { |
| 6 final Enqueuer codegen; | 6 final Enqueuer codegen; |
| 7 final Enqueuer resolution; | 7 final Enqueuer resolution; |
| 8 | 8 |
| 9 String get name => 'Enqueue'; | 9 String get name => 'Enqueue'; |
| 10 | 10 |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 return true; | 156 return true; |
| 157 } | 157 } |
| 158 | 158 |
| 159 void processInstantiatedClass(ClassElement cls) { | 159 void processInstantiatedClass(ClassElement cls) { |
| 160 cls.localMembers.forEach(processInstantiatedClassMember); | 160 cls.localMembers.forEach(processInstantiatedClassMember); |
| 161 } | 161 } |
| 162 | 162 |
| 163 void processInstantiatedClassMember(Element member) { | 163 void processInstantiatedClassMember(Element member) { |
| 164 if (universe.generatedCode.containsKey(member)) return; | 164 if (universe.generatedCode.containsKey(member)) return; |
| 165 if (resolvedElements[member] !== null) return; | 165 if (resolvedElements[member] !== null) return; |
| 166 if (!member.isInstanceMember()) return; | |
| 166 | 167 |
| 167 if (!member.isInstanceMember()) return; | 168 if (member.kind === ElementKind.FIELD) { |
| 168 if (member.isField()) return; | 169 universe.instantiatedClassInstanceFields.add(member.name); |
| 170 if (compiler.enableTypeAssertions) { | |
|
ahe
2012/08/31 09:46:51
This doesn't feel like the right place for this.
| |
| 171 Type type = member.computeType(compiler); | |
| 172 registerIsCheck(type.element); | |
| 173 SourceString helper = compiler.backend.getCheckedModeHelper(type); | |
|
ahe
2012/08/31 09:46:51
And this is feeling even wronger :-)
ngeoffray
2012/09/05 13:00:29
Agree. Fix is in https://chromiumcodereview.appspo
| |
| 174 if (helper != null) { | |
| 175 Element helperElement = compiler.findHelper(helper); | |
| 176 registerStaticUse(helperElement); | |
| 177 } | |
| 178 } | |
| 179 return; | |
| 180 } | |
| 169 | 181 |
| 170 String memberName = member.name.slowToString(); | 182 String memberName = member.name.slowToString(); |
| 171 Link<Element> members = instanceMembersByName.putIfAbsent( | 183 Link<Element> members = instanceMembersByName.putIfAbsent( |
| 172 memberName, () => const EmptyLink<Element>()); | 184 memberName, () => const EmptyLink<Element>()); |
| 173 instanceMembersByName[memberName] = members.prepend(member); | 185 instanceMembersByName[memberName] = members.prepend(member); |
| 174 | 186 |
| 175 if (member.kind === ElementKind.GETTER || | |
| 176 member.kind === ElementKind.FIELD) { | |
| 177 universe.instantiatedClassInstanceFields.add(member.name); | |
| 178 } | |
| 179 | 187 |
| 180 if (member.kind == ElementKind.FUNCTION) { | 188 if (member.kind == ElementKind.FUNCTION) { |
| 181 if (member.name == Compiler.NO_SUCH_METHOD) { | 189 if (member.name == Compiler.NO_SUCH_METHOD) { |
| 182 compiler.enableNoSuchMethod(member); | 190 compiler.enableNoSuchMethod(member); |
| 183 } | 191 } |
| 184 if (universe.hasInvocation(member, compiler)) { | 192 if (universe.hasInvocation(member, compiler)) { |
| 185 return addToWorkList(member); | 193 return addToWorkList(member); |
| 186 } | 194 } |
| 187 // If there is a property access with the same name as a method we | 195 // If there is a property access with the same name as a method we |
| 188 // need to emit the method. | 196 // need to emit the method. |
| 189 if (universe.hasInvokedGetter(member, compiler)) { | 197 if (universe.hasInvokedGetter(member, compiler)) { |
| 190 // We will emit a closure, so make sure the closure class is | 198 // We will emit a closure, so make sure the closure class is |
| 191 // generated. | 199 // generated. |
| 192 compiler.closureClass.ensureResolved(compiler); | 200 compiler.closureClass.ensureResolved(compiler); |
| 193 registerInstantiatedClass(compiler.closureClass); | 201 registerInstantiatedClass(compiler.closureClass); |
| 194 return addToWorkList(member); | 202 return addToWorkList(member); |
| 195 } | 203 } |
| 196 } else if (member.kind == ElementKind.GETTER) { | 204 } else if (member.kind == ElementKind.GETTER) { |
| 205 universe.instantiatedClassInstanceFields.add(member.name); | |
| 197 if (universe.hasInvokedGetter(member, compiler)) { | 206 if (universe.hasInvokedGetter(member, compiler)) { |
| 198 return addToWorkList(member); | 207 return addToWorkList(member); |
| 199 } | 208 } |
| 200 // We don't know what selectors the returned closure accepts. If | 209 // We don't know what selectors the returned closure accepts. If |
| 201 // the set contains any selector we have to assume that it matches. | 210 // the set contains any selector we have to assume that it matches. |
| 202 if (universe.hasInvocation(member, compiler)) { | 211 if (universe.hasInvocation(member, compiler)) { |
| 203 return addToWorkList(member); | 212 return addToWorkList(member); |
| 204 } | 213 } |
| 205 } else if (member.kind === ElementKind.SETTER) { | 214 } else if (member.kind === ElementKind.SETTER) { |
| 206 if (universe.hasInvokedSetter(member, compiler)) { | 215 if (universe.hasInvokedSetter(member, compiler)) { |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 void registerIsCheck(Element element) { | 347 void registerIsCheck(Element element) { |
| 339 universe.isChecks.add(element); | 348 universe.isChecks.add(element); |
| 340 } | 349 } |
| 341 | 350 |
| 342 void forEach(f(WorkItem work)) { | 351 void forEach(f(WorkItem work)) { |
| 343 while (!queue.isEmpty()) { | 352 while (!queue.isEmpty()) { |
| 344 f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst? | 353 f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst? |
| 345 } | 354 } |
| 346 } | 355 } |
| 347 } | 356 } |
| OLD | NEW |