Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(948)

Side by Side Diff: pkg/compiler/lib/src/js_model/js_strategy.dart

Issue 2981673002: Register created closure class with the world. (Closed)
Patch Set: . Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 library dart2js.js_model.strategy; 5 library dart2js.js_model.strategy;
6 6
7 import '../closure.dart' show ClosureConversionTask; 7 import '../closure.dart' show ClosureConversionTask;
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/tasks.dart'; 9 import '../common/tasks.dart';
10 import '../common_elements.dart'; 10 import '../common_elements.dart';
11 import '../compiler.dart'; 11 import '../compiler.dart';
12 import '../constants/constant_system.dart'; 12 import '../constants/constant_system.dart';
13 import '../elements/elements.dart' show ClassElement, TypedefElement; 13 import '../elements/elements.dart' show TypedefElement;
14 import '../elements/entities.dart'; 14 import '../elements/entities.dart';
15 import '../elements/types.dart'; 15 import '../elements/types.dart';
16 import '../enqueue.dart'; 16 import '../enqueue.dart';
17 import '../io/source_information.dart'; 17 import '../io/source_information.dart';
18 import '../js_emitter/sorter.dart'; 18 import '../js_emitter/sorter.dart';
19 import '../js/js_source_mapping.dart'; 19 import '../js/js_source_mapping.dart';
20 import '../js_backend/backend.dart'; 20 import '../js_backend/backend.dart';
21 import '../js_backend/backend_usage.dart'; 21 import '../js_backend/backend_usage.dart';
22 import '../js_backend/constant_system_javascript.dart'; 22 import '../js_backend/constant_system_javascript.dart';
23 import '../js_backend/interceptor_data.dart'; 23 import '../js_backend/interceptor_data.dart';
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 liveNativeClasses, 377 liveNativeClasses,
378 liveInstanceMembers, 378 liveInstanceMembers,
379 assignedInstanceMembers, 379 assignedInstanceMembers,
380 allTypedefs, 380 allTypedefs,
381 mixinUses, 381 mixinUses,
382 typesImplementedBySubclasses, 382 typesImplementedBySubclasses,
383 classHierarchyNodes, 383 classHierarchyNodes,
384 classSets); 384 classSets);
385 385
386 @override 386 @override
387 void registerClosureClass(ClassElement cls) { 387 void registerClosureClass(ClassEntity cls, bool fromInstanceMember) {
388 throw new UnimplementedError('JsClosedWorld.registerClosureClass'); 388 // Tell the hierarchy that this is the super class. then we can use
389 // .getSupertypes(class)
390 ClassEntity superclass = fromInstanceMember
391 ? commonElements.boundClosureClass
392 : commonElements.closureClass;
393 ClassHierarchyNode parentNode = getClassHierarchyNode(superclass);
394 ClassHierarchyNode node = new ClassHierarchyNode(
395 parentNode, cls, getHierarchyDepth(superclass) + 1);
396 addClassHierarchyNode(cls, node);
397 for (InterfaceType type in getOrderedTypeSet(superclass).types) {
398 // TODO(efortuna): assert that the FunctionClass is in this ordered set.
399 // If not, we need to explicitly add node as a subtype of FunctionClass.
400 ClassSet subtypeSet = getClassSet(type.element);
401 subtypeSet.addSubtype(node);
402 }
403 addClassSet(cls, new ClassSet(node));
404 elementMap.addClosureClass(cls, new InterfaceType(superclass, const []));
405 node.isDirectlyInstantiated = true;
389 } 406 }
390 } 407 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/element_map_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698