| Index: lib/kernel.dart
|
| diff --git a/lib/kernel.dart b/lib/kernel.dart
|
| index cdbbeb98f177f62d8218204df092ac013270471b..a79ff230174ba50a30d965c5ac94d31c038d1260 100644
|
| --- a/lib/kernel.dart
|
| +++ b/lib/kernel.dart
|
| @@ -94,6 +94,9 @@ class Kernel {
|
| /// nodes are correct.
|
| final Queue<WorkItem> workQueue = new Queue<WorkItem>();
|
|
|
| + // TODO(ahe): this should be pruned when unloading libraries.
|
| + final Map<String, List<int>> lineStarts = <String, List<int>>{};
|
| +
|
| Kernel(this.compiler);
|
|
|
| bool hasMainMethod(Uri uri) {
|
| @@ -153,6 +156,16 @@ class Kernel {
|
| return libraryToIr(await compiler.libraryLoader.loadLibrary(uri));
|
| }
|
|
|
| + String fileUri(Element element) {
|
| + String fileUri = "${element.compilationUnit.script.resourceUri}";
|
| + lineStarts[fileUri] = <int>[0];
|
| + return fileUri;
|
| + }
|
| +
|
| + void addLineStartsTo(ir.Program program) {
|
| + program.uriToLineStarts.addAll(lineStarts);
|
| + }
|
| +
|
| ir.Library libraryToIr(LibraryElement library) {
|
| library = library.declaration;
|
| return libraries.putIfAbsent(library, () {
|
| @@ -160,6 +173,7 @@ class Kernel {
|
| ir.Library libraryNode = new ir.Library(
|
| library.canonicalUri, name: name, classes: null, procedures: null,
|
| fields: null);
|
| + libraryNode.fileUri = fileUri(library);
|
| addWork(library, () {
|
| Queue<ir.Class> classes = new Queue<ir.Class>();
|
| Queue<ir.Member> members = new Queue<ir.Member>();
|
| @@ -208,7 +222,7 @@ class Kernel {
|
| ir.Class classNode = new ir.Class(
|
| name: name, isAbstract: cls.isAbstract,
|
| typeParameters: null, implementedTypes: null, constructors: null,
|
| - procedures: null, fields: null);
|
| + procedures: null, fields: null, fileUri: fileUri(cls));
|
| addWork(cls, () {
|
| if (cls.supertype != null) {
|
| classNode.supertype = interfaceTypeToIr(cls.supertype);
|
| @@ -376,6 +390,7 @@ class Kernel {
|
| isStatic: function.isStatic || function.isTopLevel
|
| || function.isFactoryConstructor,
|
| isExternal: isNative || function.isExternal,
|
| + fileUri: fileUri(function),
|
| isConst: false); // TODO(ahe): When is this true?
|
| }
|
| addWork(function, () {
|
| @@ -456,7 +471,7 @@ class Kernel {
|
| ir.Field fieldNode = new ir.Field(
|
| irName(field.memberName.text, field), type: type, initializer: null,
|
| isFinal: field.isFinal, isStatic: field.isStatic || field.isTopLevel,
|
| - isConst: field.isConst);
|
| + isConst: field.isConst, fileUri: fileUri(field));
|
| addWork(field, () {
|
| setParent(fieldNode, field);
|
| if (!field.isMalformed && !field.isInstanceMember &&
|
|
|