| Index: pkg/front_end/lib/src/fasta/target_implementation.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/target_implementation.dart b/pkg/front_end/lib/src/fasta/target_implementation.dart
|
| index 6d3ef741747c5e420f9a1ebab28b1ec377616b19..ecccfa33db84322fb138e36a575fdb16942969e9 100644
|
| --- a/pkg/front_end/lib/src/fasta/target_implementation.dart
|
| +++ b/pkg/front_end/lib/src/fasta/target_implementation.dart
|
| @@ -6,6 +6,8 @@ library fasta.target_implementation;
|
|
|
| import 'package:kernel/target/targets.dart' as backend show Target;
|
|
|
| +import 'package:kernel/ast.dart' show Arguments, Expression, Member;
|
| +
|
| import 'builder/builder.dart' show Builder, ClassBuilder, LibraryBuilder;
|
|
|
| import 'parser/dart_vm_native.dart' as vm show skipNativeClause;
|
| @@ -28,9 +30,13 @@ abstract class TargetImplementation extends Target {
|
|
|
| final backend.Target backendTarget;
|
|
|
| - Builder cachedCompileTimeError;
|
| Builder cachedAbstractClassInstantiationError;
|
| + Builder cachedCompileTimeError;
|
| + Builder cachedDuplicatedFieldInitializerError;
|
| + Builder cachedFallThroughError;
|
| + Builder cachedInvocation;
|
| Builder cachedNativeAnnotation;
|
| + Builder cachedNoSuchMethodError;
|
|
|
| TargetImplementation(Ticker ticker, this.uriTranslator, this.backendTarget)
|
| : super(ticker);
|
| @@ -52,15 +58,6 @@ abstract class TargetImplementation extends Target {
|
|
|
| Uri translateUri(Uri uri) => uriTranslator.translate(uri);
|
|
|
| - /// Returns a reference to the constructor used for creating a compile-time
|
| - /// error. The constructor is expected to accept a single argument of type
|
| - /// String, which is the compile-time error message.
|
| - Builder getCompileTimeError(Loader loader) {
|
| - if (cachedCompileTimeError != null) return cachedCompileTimeError;
|
| - return cachedCompileTimeError =
|
| - loader.coreLibrary.getConstructor("_CompileTimeError", isPrivate: true);
|
| - }
|
| -
|
| /// Returns a reference to the constructor of
|
| /// [AbstractClassInstantiationError] error. The constructor is expected to
|
| /// accept a single argument of type String, which is the name of the
|
| @@ -73,6 +70,51 @@ abstract class TargetImplementation extends Target {
|
| loader.coreLibrary.getConstructor("AbstractClassInstantiationError");
|
| }
|
|
|
| + /// Returns a reference to the constructor used for creating a compile-time
|
| + /// error. The constructor is expected to accept a single argument of type
|
| + /// String, which is the compile-time error message.
|
| + Builder getCompileTimeError(Loader loader) {
|
| + if (cachedCompileTimeError != null) return cachedCompileTimeError;
|
| + return cachedCompileTimeError =
|
| + loader.coreLibrary.getConstructor("_CompileTimeError", isPrivate: true);
|
| + }
|
| +
|
| + /// Returns a reference to the constructor used for creating a runtime error
|
| + /// when a final field is initialized twice. The constructor is expected to
|
| + /// accept a single argument which is the name of the field.
|
| + Builder getDuplicatedFieldInitializerError(Loader loader) {
|
| + if (cachedDuplicatedFieldInitializerError != null) {
|
| + return cachedDuplicatedFieldInitializerError;
|
| + }
|
| + return cachedDuplicatedFieldInitializerError = loader.coreLibrary
|
| + .getConstructor("_DuplicatedFieldInitializerError", isPrivate: true);
|
| + }
|
| +
|
| + /// Returns a reference to the constructor of [FallThroughError] error. The
|
| + /// constructor is expected to accept no arguments.
|
| + Builder getFallThroughError(Loader loader) {
|
| + if (cachedFallThroughError != null) {
|
| + return cachedFallThroughError;
|
| + }
|
| + return cachedFallThroughError =
|
| + loader.coreLibrary.getConstructor("FallThroughError");
|
| + }
|
| +
|
| + /// Returns a reference to the constructor of [Invocation]. The
|
| + /// constructor is expected to accept these arguments:
|
| + ///
|
| + /// String functionName,
|
| + /// List argumentsDescriptor,
|
| + /// List arguments,
|
| + /// bool isSuperInvocation
|
| + Builder getInvocation(Loader loader) {
|
| + if (cachedInvocation != null) {
|
| + return cachedInvocation;
|
| + }
|
| + return cachedInvocation =
|
| + loader.coreLibrary.getConstructor("_InvocationMirror", isPrivate: true);
|
| + }
|
| +
|
| /// Returns a reference to the constructor used for creating `native`
|
| /// annotations. The constructor is expected to accept a single argument of
|
| /// type String, which is the name of the native method.
|
| @@ -82,6 +124,22 @@ abstract class TargetImplementation extends Target {
|
| return cachedNativeAnnotation = internal.getConstructor("ExternalName");
|
| }
|
|
|
| + /// Returns a reference to the constructor of [NoSuchMethodError] error. The
|
| + /// constructor is expected to accept these arguments:
|
| + ///
|
| + /// Object receiver, // A class literal for static methods.
|
| + /// Symbol memberName,
|
| + /// int type, // [computeNoSuchMethodType](kernel/kernel_builder.dart).
|
| + /// List positionalArguments,
|
| + /// Map<Symbol, dynamic> namedArguments,
|
| + Builder getNoSuchMethodError(Loader loader) {
|
| + if (cachedNoSuchMethodError != null) {
|
| + return cachedNoSuchMethodError;
|
| + }
|
| + return cachedNoSuchMethodError = loader.coreLibrary
|
| + .getConstructor("NoSuchMethodError", constructorName: "_withType");
|
| + }
|
| +
|
| void loadExtraRequiredLibraries(Loader loader) {
|
| for (String uri in backendTarget.extraRequiredLibraries) {
|
| loader.read(Uri.parse(uri), -1);
|
| @@ -119,4 +177,10 @@ abstract class TargetImplementation extends Target {
|
| }
|
| }
|
| }
|
| +
|
| + Expression instantiateInvocation(Member target, Expression receiver,
|
| + String name, Arguments arguments, int offset, bool isSuper) {
|
| + return backendTarget.instantiateInvocation(
|
| + target, receiver, name, arguments, offset, isSuper);
|
| + }
|
| }
|
|
|