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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_target.dart

Issue 2704753002: Implement line and column numbers. (Closed)
Patch Set: Change message. 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
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 file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.kernel_target; 5 library fasta.kernel_target;
6 6
7 import 'dart:async' show 7 import 'dart:async' show
8 Future; 8 Future;
9 9
10 import 'dart:io' show 10 import 'dart:io' show
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 68
69 import '../ast_kind.dart' show 69 import '../ast_kind.dart' show
70 AstKind; 70 AstKind;
71 71
72 import '../errors.dart' show 72 import '../errors.dart' show
73 InputError, 73 InputError,
74 internalError, 74 internalError,
75 reportCrash, 75 reportCrash,
76 resetCrashReporting; 76 resetCrashReporting;
77 77
78 import '../util/relativize.dart' show
79 relativizeUri;
80
81 import '../compiler_context.dart' show
82 CompilerContext;
83
78 import 'kernel_builder.dart' show 84 import 'kernel_builder.dart' show
79 Builder, 85 Builder,
80 ClassBuilder, 86 ClassBuilder,
81 DynamicTypeBuilder, 87 DynamicTypeBuilder,
82 InvalidTypeBuilder, 88 InvalidTypeBuilder,
83 KernelClassBuilder, 89 KernelClassBuilder,
84 KernelLibraryBuilder, 90 KernelLibraryBuilder,
85 KernelNamedTypeBuilder, 91 KernelNamedTypeBuilder,
86 KernelProcedureBuilder, 92 KernelProcedureBuilder,
87 LibraryBuilder, 93 LibraryBuilder,
88 MixinApplicationBuilder, 94 MixinApplicationBuilder,
89 NamedMixinApplicationBuilder, 95 NamedMixinApplicationBuilder,
90 NamedTypeBuilder, 96 NamedTypeBuilder,
91 TypeBuilder; 97 TypeBuilder;
92 98
93 class KernelTarget extends TargetImplementation { 99 class KernelTarget extends TargetImplementation {
94 final DillTarget dillTarget; 100 final DillTarget dillTarget;
101
102 /// Shared with [CompilerContext].
103 final Map<String, Source> uriToSource;
104
95 SourceLoader<Library> loader; 105 SourceLoader<Library> loader;
96 Program program; 106 Program program;
97 107
98 final List errors = []; 108 final List errors = [];
99 109
100 KernelTarget(DillTarget dillTarget, TranslateUri uriTranslator) 110 KernelTarget(DillTarget dillTarget, TranslateUri uriTranslator,
111 [Map<String, Source> uriToSource])
101 : dillTarget = dillTarget, 112 : dillTarget = dillTarget,
113 uriToSource = uriToSource ?? CompilerContext.current.uriToSource,
102 super(dillTarget.ticker, uriTranslator) { 114 super(dillTarget.ticker, uriTranslator) {
103 resetCrashReporting(); 115 resetCrashReporting();
104 loader = new SourceLoader<Library>(this); 116 loader = new SourceLoader<Library>(this);
105 } 117 }
106 118
119 void addLineStarts(Uri uri, List<int> lineStarts) {
120 String fileUri = relativizeUri(uri);
121 uriToSource[fileUri] = new Source(lineStarts, fileUri);
122 }
123
107 void read(Uri uri) { 124 void read(Uri uri) {
108 loader.read(uri); 125 loader.read(uri);
109 } 126 }
110 127
111 LibraryBuilder createLibraryBuilder(Uri uri, Uri fileUri) { 128 LibraryBuilder createLibraryBuilder(Uri uri, Uri fileUri) {
112 if (dillTarget.isLoaded) { 129 if (dillTarget.isLoaded) {
113 var builder = dillTarget.loader.builders[uri]; 130 var builder = dillTarget.loader.builders[uri];
114 if (builder != null) { 131 if (builder != null) {
115 return builder; 132 return builder;
116 } 133 }
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 // that used when there's no fileUri on an element. Instead, ensure all 327 // that used when there's no fileUri on an element. Instead, ensure all
311 // elements have a fileUri. 328 // elements have a fileUri.
312 uriToSource[""] = new Source(<int>[0], ""); 329 uriToSource[""] = new Source(<int>[0], "");
313 Program program = new Program(libraries, uriToSource); 330 Program program = new Program(libraries, uriToSource);
314 if (loader.first != null) { 331 if (loader.first != null) {
315 Builder builder = loader.first.members["main"]; 332 Builder builder = loader.first.members["main"];
316 if (builder is KernelProcedureBuilder) { 333 if (builder is KernelProcedureBuilder) {
317 program.mainMethod = builder.procedure; 334 program.mainMethod = builder.procedure;
318 } 335 }
319 } 336 }
320 setup_builtin_library.transformProgram(program); 337 if (errors.isEmpty || dillTarget.isLoaded) {
338 setup_builtin_library.transformProgram(program);
339 }
321 ticker.logMs("Linked program"); 340 ticker.logMs("Linked program");
322 return program; 341 return program;
323 } 342 }
324 343
325 Future<Program> writeLinkedProgram(Uri uri, Program program, 344 Future<Program> writeLinkedProgram(Uri uri, Program program,
326 {bool isFullProgram}) async { 345 {bool isFullProgram}) async {
327 File output = new File.fromUri(uri); 346 File output = new File.fromUri(uri);
328 IOSink sink = output.openWrite(); 347 IOSink sink = output.openWrite();
329 try { 348 try {
330 new BinaryPrinter(sink).writeProgramFile(program); 349 new BinaryPrinter(sink).writeProgramFile(program);
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 superclass = superclass.superclass; 600 superclass = superclass.superclass;
582 } 601 }
583 for (Constructor constructor in superclass.constructors) { 602 for (Constructor constructor in superclass.constructors) {
584 if (constructor.name.name.isEmpty) { 603 if (constructor.name.name.isEmpty) {
585 return constructor.function.requiredParameterCount == 0 ? 604 return constructor.function.requiredParameterCount == 0 ?
586 constructor : null; 605 constructor : null;
587 } 606 }
588 } 607 }
589 return null; 608 return null;
590 } 609 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart ('k') | pkg/front_end/lib/src/fasta/messages.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698