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

Side by Side Diff: pkg/compiler/lib/src/kernel/kernel.dart

Issue 2665723002: Implement canonical name scheme in kernel. (Closed)
Patch Set: Created 3 years, 10 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
« no previous file with comments | « no previous file | pkg/front_end/lib/kernel_generator.dart » ('j') | pkg/kernel/lib/ast.dart » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:collection' show Queue; 6 import 'dart:collection' show Queue;
7 7
8 import 'package:kernel/ast.dart' as ir; 8 import 'package:kernel/ast.dart' as ir;
9 import 'package:kernel/verifier.dart' show CheckParentPointers; 9 import 'package:kernel/verifier.dart' show CheckParentPointers;
10 10
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 Future<ir.Library> loadLibrary(Uri uri) async { 145 Future<ir.Library> loadLibrary(Uri uri) async {
146 return libraryToIr(await compiler.libraryLoader.loadLibrary(uri)); 146 return libraryToIr(await compiler.libraryLoader.loadLibrary(uri));
147 } 147 }
148 148
149 ir.Library libraryToIr(LibraryElement library) { 149 ir.Library libraryToIr(LibraryElement library) {
150 library = library.declaration; 150 library = library.declaration;
151 return libraries.putIfAbsent(library, () { 151 return libraries.putIfAbsent(library, () {
152 String name = library.hasLibraryName ? library.libraryName : null; 152 String name = library.hasLibraryName ? library.libraryName : null;
153 ir.Library libraryNode = new ir.Library(library.canonicalUri, 153 ir.Library libraryNode = new ir.Library(library.canonicalUri,
154 name: name, classes: null, procedures: null, fields: null); 154 name: name, classes: null, procedures: null, fields: null);
155 new ir.CanonicalName.dummy().linkTo(libraryNode);
155 addWork(library, () { 156 addWork(library, () {
156 Queue<ir.Class> classes = new Queue<ir.Class>(); 157 Queue<ir.Class> classes = new Queue<ir.Class>();
157 Queue<ir.Member> members = new Queue<ir.Member>(); 158 Queue<ir.Member> members = new Queue<ir.Member>();
158 library.implementation.forEachLocalMember((Element e) { 159 library.implementation.forEachLocalMember((Element e) {
159 if (e.isClass) { 160 if (e.isClass) {
160 ClassElement cls = e; 161 ClassElement cls = e;
161 if (!cls.isResolved) return; 162 if (!cls.isResolved) return;
162 classes.addFirst(classToIr(cls)); 163 classes.addFirst(classToIr(cls));
163 } else if (e.isFunction || e.isAccessor) { 164 } else if (e.isFunction || e.isAccessor) {
164 if (!compiler.resolution.hasBeenResolved(e) && !e.isMalformed) { 165 if (!compiler.resolution.hasBeenResolved(e) && !e.isMalformed) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 assert(cls.isResolved); 205 assert(cls.isResolved);
205 String name = computeName(cls); 206 String name = computeName(cls);
206 ir.Class classNode = new ir.Class( 207 ir.Class classNode = new ir.Class(
207 name: name, 208 name: name,
208 isAbstract: cls.isAbstract, 209 isAbstract: cls.isAbstract,
209 typeParameters: null, 210 typeParameters: null,
210 implementedTypes: null, 211 implementedTypes: null,
211 constructors: null, 212 constructors: null,
212 procedures: null, 213 procedures: null,
213 fields: null); 214 fields: null);
215 new ir.CanonicalName.dummy().linkTo(classNode);
214 addWork(cls, () { 216 addWork(cls, () {
215 if (cls.supertype != null) { 217 if (cls.supertype != null) {
216 classNode.supertype = supertypeToIr(cls.supertype); 218 classNode.supertype = supertypeToIr(cls.supertype);
217 } 219 }
218 if (cls.isMixinApplication) { 220 if (cls.isMixinApplication) {
219 MixinApplicationElement mixinApplication = cls; 221 MixinApplicationElement mixinApplication = cls;
220 classNode.mixedInType = supertypeToIr(mixinApplication.mixinType); 222 classNode.mixedInType = supertypeToIr(mixinApplication.mixinType);
221 } 223 }
222 classNode.parent = libraryToIr(cls.library); 224 classNode.parent = libraryToIr(cls.library);
223 if (cls.isUnnamedMixinApplication) { 225 if (cls.isUnnamedMixinApplication) {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 ir.Constructor constructor; 434 ir.Constructor constructor;
433 ir.Procedure procedure; 435 ir.Procedure procedure;
434 ir.Name name = irName(function.name, function); 436 ir.Name name = irName(function.name, function);
435 bool isNative = isNativeMethod(function); 437 bool isNative = isNativeMethod(function);
436 if (function.isGenerativeConstructor) { 438 if (function.isGenerativeConstructor) {
437 member = constructor = new ir.Constructor(null, 439 member = constructor = new ir.Constructor(null,
438 name: name, 440 name: name,
439 isConst: function.isConst, 441 isConst: function.isConst,
440 isExternal: isNative || function.isExternal, 442 isExternal: isNative || function.isExternal,
441 initializers: null); 443 initializers: null);
444 new ir.CanonicalName.dummy().linkTo(constructor);
442 } else { 445 } else {
443 member = procedure = new ir.Procedure(name, null, null, 446 member = procedure = new ir.Procedure(name, null, null,
444 isAbstract: function.isAbstract, 447 isAbstract: function.isAbstract,
445 isStatic: function.isStatic || 448 isStatic: function.isStatic ||
446 function.isTopLevel || 449 function.isTopLevel ||
447 function.isFactoryConstructor, 450 function.isFactoryConstructor,
448 isExternal: isNative || function.isExternal, 451 isExternal: isNative || function.isExternal,
449 isConst: false); // TODO(ahe): When is this true? 452 isConst: false); // TODO(ahe): When is this true?
453 new ir.CanonicalName.dummy().linkTo(procedure);
450 } 454 }
451 addWork(function, () { 455 addWork(function, () {
452 setParent(member, function); 456 setParent(member, function);
453 KernelVisitor visitor = 457 KernelVisitor visitor =
454 new KernelVisitor(function, function.treeElements, this); 458 new KernelVisitor(function, function.treeElements, this);
455 beginFactoryScope(function); 459 beginFactoryScope(function);
456 IrFunction irFunction = visitor.buildFunction(); 460 IrFunction irFunction = visitor.buildFunction();
457 // TODO(ahe): Add addFunction/set function to [ir.Procedure]. 461 // TODO(ahe): Add addFunction/set function to [ir.Procedure].
458 irFunction.node.parent = member; 462 irFunction.node.parent = member;
459 if (irFunction.isConstructor) { 463 if (irFunction.isConstructor) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 538
535 field = field.implementation; 539 field = field.implementation;
536 ir.DartType type = 540 ir.DartType type =
537 field.isMalformed ? const ir.InvalidType() : typeToIr(field.type); 541 field.isMalformed ? const ir.InvalidType() : typeToIr(field.type);
538 ir.Field fieldNode = new ir.Field(irName(field.memberName.text, field), 542 ir.Field fieldNode = new ir.Field(irName(field.memberName.text, field),
539 type: type, 543 type: type,
540 initializer: null, 544 initializer: null,
541 isFinal: field.isFinal, 545 isFinal: field.isFinal,
542 isStatic: field.isStatic || field.isTopLevel, 546 isStatic: field.isStatic || field.isTopLevel,
543 isConst: field.isConst); 547 isConst: field.isConst);
548 new ir.CanonicalName.dummy().linkTo(fieldNode);
544 addWork(field, () { 549 addWork(field, () {
545 setParent(fieldNode, field); 550 setParent(fieldNode, field);
546 if (!field.isMalformed) { 551 if (!field.isMalformed) {
547 if (field.initializer != null) { 552 if (field.initializer != null) {
548 KernelVisitor visitor = 553 KernelVisitor visitor =
549 new KernelVisitor(field, field.treeElements, this); 554 new KernelVisitor(field, field.treeElements, this);
550 fieldNode.initializer = visitor.buildInitializer() 555 fieldNode.initializer = visitor.buildInitializer()
551 ..parent = fieldNode; 556 ..parent = fieldNode;
552 } else if (!field.isInstanceMember) { 557 } else if (!field.isInstanceMember) {
553 fieldNode.initializer = new ir.NullLiteral()..parent = fieldNode; 558 fieldNode.initializer = new ir.NullLiteral()..parent = fieldNode;
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 } 789 }
785 790
786 class ConstructorTarget { 791 class ConstructorTarget {
787 final ConstructorElement element; 792 final ConstructorElement element;
788 final ResolutionDartType type; 793 final ResolutionDartType type;
789 794
790 ConstructorTarget(this.element, this.type); 795 ConstructorTarget(this.element, this.type);
791 796
792 String toString() => "ConstructorTarget($element, $type)"; 797 String toString() => "ConstructorTarget($element, $type)";
793 } 798 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/kernel_generator.dart » ('j') | pkg/kernel/lib/ast.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698