Chromium Code Reviews| Index: pkg/front_end/lib/compiler_api.dart |
| diff --git a/pkg/front_end/lib/compiler_api.dart b/pkg/front_end/lib/compiler_api.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6b697768789c8e752e265ae59eac5fcdb0ef6bbe |
| --- /dev/null |
| +++ b/pkg/front_end/lib/compiler_api.dart |
| @@ -0,0 +1,92 @@ |
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +/// Defines the front end API to be used by compiler back-ends. |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:15
nit: front end => front-end ?
(that would match ba
Bob Nystrom
2016/10/13 23:56:11
/me puts on grammarian hat.
(I'm kidding, of cour
Paul Berry
2016/10/14 00:09:35
I don't have a strong preference, but in my mind t
Siggi Cherem (dart-lang)
2016/10/14 16:00:49
To make sure all options are on the table: my lean
Bob Nystrom
2016/10/14 16:12:18
"frontend" doesn't collapse well as a single word
Paul Berry
2016/10/14 21:32:34
I'm happy to defer to Kathy on this question. I'l
|
| +library front_end.compiler_api; |
| + |
| +import 'compilation_error.dart'; |
| +import 'package:analyzer/dart/ast/ast.dart' show CompilationUnit; |
| + |
| +/// Callback used by [CompilerApi] to report errors encountered during |
| +/// compilation. |
| +typedef void ErrorHandler(CompilationError); |
|
scheglov
2016/10/13 23:58:17
typedef void ErrorHandler(CompilationError error);
Paul Berry
2016/10/14 00:09:36
Oops. Thank you.
|
| + |
| +/// Front end API for use by compiler back-ends. |
| +/// |
| +/// Intended use: create a CompilerApi object, set any desired options using |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:15
since these options are just set once, could we ma
Paul Berry
2016/10/14 00:09:36
Yeah, that's a good point. Making them named argu
Brian Wilkerson
2016/10/14 14:54:45
If you intend to deprecate the sourcesToResolvedAs
Siggi Cherem (dart-lang)
2016/10/14 16:00:48
Good point. +1 on making it a single top-level fun
Paul Berry
2016/10/14 21:32:34
After further discussion, I'm going to provisional
|
| +/// setters, and then call [sourcesToKernel] to obtain a Dart Kernel |
| +/// representation of input source files. |
| +/// |
| +/// At the moment, this API only supports batch-mode compilation. Its methods |
| +/// operate on whole source files, and do not cache intermediate results between |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:16
design discussion:
I might be jumping ahead since
Paul Berry
2016/10/14 00:09:36
I don't think it's that simple, since changes to o
Siggi Cherem (dart-lang)
2016/10/14 16:00:49
Sure - let's chat sometime later, maybe after the
|
| +/// method calls. Support for incremental updates will be added in the future |
| +/// (e.g. to allow for hot reload features). |
| +/// |
| +/// All of the options have reasonable defaults, so a simple client may simply |
| +/// do: `var kernel = new CompilerApi().sourcesToKernel([Uri.parse(...)]);` |
| +abstract class CompilerApi { |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:16
minor nit: what do you think about renaming this a
Brian Wilkerson
2016/10/13 23:37:02
This doesn't provide any way to set any options, s
Paul Berry
2016/10/14 00:09:36
It's intended to be added in the future. My curre
Paul Berry
2016/10/14 00:09:36
I'd prefer not to, since the front end also needs
Siggi Cherem (dart-lang)
2016/10/14 16:00:49
Ok, makes sense.
My minor concern with [CompilerA
Paul Berry
2016/10/14 21:32:34
Good suggestions. Since I'm going to try re-worki
|
| + /// Creates an instance of [CompilerApi] with all options set to default |
| + /// values. |
| + factory CompilerApi() => throw new UnimplementedError(); |
| + |
| + /// Sets the path to the Dart SDK. |
| + /// |
| + /// If not set, the SDK will be searched for using [Platform.script] as a |
| + /// starting point. |
| + void set sdkPath(String path); |
| + |
| + /// Sets a callback to which compilation errors should be delivered. |
| + /// |
| + /// If not set, the first error will be reported by throwing an exception of |
| + /// type [CompilationError]. |
| + void set onError(ErrorHandler onError); |
| + |
| + /// Sets the path to the ".packages" file. |
| + /// |
| + /// If not set, the ".packages" file will be found via the standard search |
| + /// algorithm. |
| + void set packages(String path); |
|
Brian Wilkerson
2016/10/13 23:37:02
Analyzer currently supports setting a 'packages' d
Paul Berry
2016/10/14 00:09:36
Since the front end isn't likely to be used until
Brian Wilkerson
2016/10/14 14:54:45
I have asked several people, and as far as I can t
Paul Berry
2016/10/14 21:32:34
We had a bunch of discussion about this, and agree
|
| + |
| + /// Sets the paths to the input summary files. |
| + /// |
| + /// If not set, no input summaries will be used. |
| + void set inputSummaries(List<String> paths); |
|
Brian Wilkerson
2016/10/13 23:37:02
Does this include all summary files: sdk and non-s
scheglov
2016/10/13 23:58:17
Is using summaries for pub packages an implementat
Paul Berry
2016/10/14 00:09:35
I'm not sure. Let me think about this.
Paul Berry
2016/10/14 00:09:35
I think it should be not allowed; I don't think we
Brian Wilkerson
2016/10/14 14:54:45
While it might be reasonable for the front end to
Siggi Cherem (dart-lang)
2016/10/14 16:00:49
My assumption here was also like Brian: this list
|
| + |
| + /// Sets the URI override map. |
| + /// |
| + /// This is a map from Uri to file path which overrides the normal URI |
| + /// resolution algorithm. If not set, the normal URI resolution algorithm |
| + /// will always be used. |
| + void set uriOverride(Map<Uri, String> mapping); |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:15
is this for dart:* libraries or for mappings like
Brian Wilkerson
2016/10/13 23:37:01
What is this used for? (I don't remember seeing si
Paul Berry
2016/10/14 00:09:36
It's for the mappings we have to do for Bazel. It
Siggi Cherem (dart-lang)
2016/10/14 16:00:48
Ah - if it is mainly for bazel, this might be a go
Paul Berry
2016/10/14 21:32:34
I would like to learn more about this from you.
|
| + |
| + /// Sets the platform bit mask, which determines which patch files should be |
| + /// applied to the SDK. |
|
scheglov
2016/10/13 23:58:17
It is always a single platform, right?
The phrase
Paul Berry
2016/10/14 00:09:36
It's always a single platform, but it must be a po
Siggi Cherem (dart-lang)
2016/10/14 16:00:49
I wonder if we should add an enum to libraries.dar
Paul Berry
2016/10/14 21:32:34
That's a good idea, but I'm not sure how it would
Siggi Cherem (dart-lang)
2016/10/17 16:27:29
[sorry I forgot to send this comment earlier]:
To
|
| + /// |
| + /// The value should match the `PLATFORM` bit flags in |
| + /// sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart. If not set, no |
| + /// patch files will be applied. |
| + void set platform(int value); |
|
Brian Wilkerson
2016/10/13 23:37:02
Note that there is another definition of "platform
Paul Berry
2016/10/14 00:09:36
Acknowledged.
|
| + |
| + /// Limits the set of files which the front end is allowed to read. |
| + /// |
| + /// The front end will behave as though files not in this set do not exist. |
| + /// If not set, the front end is allowed to read all files in the filesystem. |
| + void set permittedFiles(Iterable<String> files); |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:15
is this mainly for validation in blaze? (to check
Brian Wilkerson
2016/10/13 23:37:02
What use case does this support? (I have to wonder
Paul Berry
2016/10/14 00:09:36
For the use case, see my answer to Siggi.
As to w
Paul Berry
2016/10/14 00:09:36
It's for Bazel workers. Bazel workers aren't herm
Siggi Cherem (dart-lang)
2016/10/14 16:00:49
What do you think about making the front-end herme
Paul Berry
2016/10/14 21:32:34
If we do this we won't be able to support the use
|
| + |
| + /// Sets the declared variables for use by configurable imports and constant |
| + /// evaluation. |
| + void set declaredVariables(Map<String, String> variables); |
| + |
| + /// Processes the given [sources] and converts them to Dart Kernel format. |
| + /// |
| + /// TODO(paulberry): once Dart Kernel has been merged into the SDK, set the |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:16
since it's already pulled into DEPS, you might be
Paul Berry
2016/10/14 00:09:36
Oh, I didn't realize that. I will make that chang
|
| + /// return type correctly. |
| + dynamic sourcesToKernel(List<Uri> sources); |
| + |
| + /// Processes the given [sources] and converts them to resolved ASTs. |
| + /// |
| + /// This is intended to be used by dev_compiler prior to its conversion to |
| + /// Dart Kernel. |
|
Siggi Cherem (dart-lang)
2016/10/13 23:22:16
+ and will be deperecated in the future?
OR, shou
Paul Berry
2016/10/14 00:09:36
Yes that's my intent.
Siggi Cherem (dart-lang)
2016/10/14 16:00:48
Let's keep it separate then (either on a separate
Paul Berry
2016/10/14 21:32:34
Agreed.
|
| + List<CompilationUnit> sourcesToResolvedAsts(List<Uri> sources); |
| +} |