[3.0 alpha] Move AbstractClassInstantiationError to dart:mirrors

Split off https://dart-review.googlesource.com/c/sdk/+/259041 so that
the VM changes can be landed separately.

TEST=tests/lib/mirrors/instantiate_abstract_class_test.dart

Bug: https://github.com/dart-lang/sdk/issues/49529
Change-Id: Ic06dee0dfeaea64d9d9ffd9511ec66d9d0837e7e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274383
Reviewed-by: Michael Thomsen <mit@google.com>
Reviewed-by: Tess Strickland <sstrickl@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Daco Harkes 2022-12-09 12:53:28 +00:00 committed by Commit Queue
parent 5b966a07d3
commit 56e581aa34
20 changed files with 36 additions and 66 deletions

View file

@ -2825,8 +2825,6 @@ abstract class pragma {
Object options;
}
class AbstractClassInstantiationError {}
class NoSuchMethodError {
factory NoSuchMethodError.withInvocation(receiver, invocation) => throw '';
}

View file

@ -65,7 +65,7 @@ test() {
threw = true;
new B();
threw = false;
} on AbstractClassInstantiationError catch (_) {
} on Error catch (_) {
// Ignored.
}
if (!threw) {

View file

@ -151,7 +151,7 @@ static method test() → dynamic {
invalid-expression "The class 'B' is abstract and can't be instantiated.";
threw = false;
}
on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
on core::Error catch(final core::Error _) {
}
if(!threw) {
throw "Expected an error above.";

View file

@ -151,7 +151,7 @@ static method test() → dynamic {
invalid-expression "The class 'B' is abstract and can't be instantiated.";
threw = false;
}
on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
on core::Error catch(final core::Error _) {
}
if(!threw) {
throw "Expected an error above.";

View file

@ -151,7 +151,7 @@ static method test() → dynamic {
invalid-expression "The class 'B' is abstract and can't be instantiated.";
threw = false;
}
on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
on core::Error catch(final core::Error _) {
}
if(!threw) {
throw "Expected an error above.";

View file

@ -111,7 +111,6 @@ additionalExports = (core::Deprecated,
core::RangeError,
core::IndexError,
core::FallThroughError,
core::AbstractClassInstantiationError,
core::NoSuchMethodError,
core::UnsupportedError,
core::UnimplementedError,

View file

@ -46,7 +46,6 @@ additionalExports = (core::Deprecated,
core::RangeError,
core::IndexError,
core::FallThroughError,
core::AbstractClassInstantiationError,
core::NoSuchMethodError,
core::UnsupportedError,
core::UnimplementedError,

View file

@ -107,7 +107,6 @@ additionalExports = (core::Deprecated,
core::RangeError,
core::IndexError,
core::FallThroughError,
core::AbstractClassInstantiationError,
core::NoSuchMethodError,
core::UnsupportedError,
core::UnimplementedError,

View file

@ -11,7 +11,6 @@ additionalExports = (asy::Future,
core::identityHashCode,
core::print,
core::Comparator,
core::AbstractClassInstantiationError,
core::ArgumentError,
core::AssertionError,
core::BidirectionalIterator,

View file

@ -11,7 +11,6 @@ additionalExports = (asy::Future,
core::identityHashCode,
core::print,
core::Comparator,
core::AbstractClassInstantiationError,
core::ArgumentError,
core::AssertionError,
core::BidirectionalIterator,

View file

@ -67,9 +67,6 @@ IndexError? var51 = IndexError.withLength(14, 2,
indexable: 36, name: 'V(', message: '9Jf!0\u2665');
FallThroughError var52 = FallThroughError();
FallThroughError? var53 = FallThroughError();
AbstractClassInstantiationError var54 = AbstractClassInstantiationError('J!');
AbstractClassInstantiationError? var55 =
AbstractClassInstantiationError('L48ynpV');
UnsupportedError var56 = UnsupportedError('5txzg');
UnsupportedError? var57 = UnsupportedError('W4vVdfv');
UnimplementedError var58 = UnimplementedError('pK00TI\u2665');
@ -283,5 +280,5 @@ main() {
foo1_Extension0();
print(
'$var0\n$var9\n$var11\n$var12\n$var13\n$var14\n$var15\n$var16\n$var17\n$var18\n$var19\n$var20\n$var21\n$var22\n$var23\n$var24\n$var25\n$var26\n$var27\n$var28\n$var29\n$var30\n$var31\n$var32\n$var33\n$var34\n$var35\n$var36\n$var37\n$var38\n$var39\n$var40\n$var41\n$var42\n$var43\n$var44\n$var45\n$var46\n$var47\n$var48\n$var49\n$var50\n$var51\n$var52\n$var53\n$var54\n$var55\n$var56\n$var57\n$var58\n$var59\n$var60\n$var61\n$var62\n$var63\n$var64\n$var65\n$var66\n$var67\n$var68\n$var69\n$var70\n$var71\n$var72\n$var73\n$var74\n$var75\n$var76\n$var77\n$var78\n$var79\n$var80\n$var81\n$var82\n$var83\n$var84\n$var85\n$var86\n$var87\n$var88\n$var89\n$var90\n$var91\n$var92\n$var93\n$var94\n$var95\n$var96\n$var97\n$var98\n$var99\n$var100\n$var101\n$var102\n$var103\n$var104\n$var105\n$var106\n$var107\n$var108\n$var109\n$var110\n$var111\n$var112\n$var113\n$var114\n$var115\n$var116\n$var117\n$var118\n$var119\n$var120\n$var121\n$var122\n$var123\n$var124\n$var125\n$var126\n$var127\n$var128\n$var129\n$var130\n$var131\n$var132\n');
'$var0\n$var9\n$var11\n$var12\n$var13\n$var14\n$var15\n$var16\n$var17\n$var18\n$var19\n$var20\n$var21\n$var22\n$var23\n$var24\n$var25\n$var26\n$var27\n$var28\n$var29\n$var30\n$var31\n$var32\n$var33\n$var34\n$var35\n$var36\n$var37\n$var38\n$var39\n$var40\n$var41\n$var42\n$var43\n$var44\n$var45\n$var46\n$var47\n$var48\n$var49\n$var50\n$var51\n$var52\n$var53\n$var56\n$var57\n$var58\n$var59\n$var60\n$var61\n$var62\n$var63\n$var64\n$var65\n$var66\n$var67\n$var68\n$var69\n$var70\n$var71\n$var72\n$var73\n$var74\n$var75\n$var76\n$var77\n$var78\n$var79\n$var80\n$var81\n$var82\n$var83\n$var84\n$var85\n$var86\n$var87\n$var88\n$var89\n$var90\n$var91\n$var92\n$var93\n$var94\n$var95\n$var96\n$var97\n$var98\n$var99\n$var100\n$var101\n$var102\n$var103\n$var104\n$var105\n$var106\n$var107\n$var108\n$var109\n$var110\n$var111\n$var112\n$var113\n$var114\n$var115\n$var116\n$var117\n$var118\n$var119\n$var120\n$var121\n$var122\n$var123\n$var124\n$var125\n$var126\n$var127\n$var128\n$var129\n$var130\n$var131\n$var132\n');
}

View file

@ -56,7 +56,6 @@ RangeError var26 =
IndexError var27 =
IndexError.withLength(38, 13, indexable: 29, name: 'R1Z', message: 'VnR7');
FallThroughError var28 = new FallThroughError();
AbstractClassInstantiationError var29 = AbstractClassInstantiationError('Sq');
UnsupportedError var30 = UnsupportedError('(OXv');
UnimplementedError var31 = UnimplementedError('Dt)F@\u2665');
StateError var32 = StateError('y');
@ -1300,7 +1299,7 @@ main() {
}
try {
print(
'$var0\n$var1\n$var2\n$var3\n$var4\n$var5\n$var6\n$var7\n$var8\n$var9\n$var10\n$var11\n$var12\n$var13\n$var14\n$var15\n$var16\n$var17\n$var18\n$var19\n$var20\n$var21\n$var22\n$var23\n$var24\n$var25\n$var26\n$var27\n$var28\n$var29\n$var30\n$var31\n$var32\n$var33\n$var34\n$var35\n$var36\n$var37\n$var38\n$var39\n$var40\n$var41\n$var42\n$var43\n$var44\n$var45\n$var46\n$var47\n$var48\n$var49\n$var50\n$var51\n$var52\n$var53\n$var54\n$var55\n$var56\n$var57\n$var58\n$var59\n$var60\n$var61\n$var62\n$var63\n$var64\n$var65\n$var66\n$var67\n$var68\n$var69\n$var70\n$var71\n$var72\n$var73\n$var74\n$var75\n');
'$var0\n$var1\n$var2\n$var3\n$var4\n$var5\n$var6\n$var7\n$var8\n$var9\n$var10\n$var11\n$var12\n$var13\n$var14\n$var15\n$var16\n$var17\n$var18\n$var19\n$var20\n$var21\n$var22\n$var23\n$var24\n$var25\n$var26\n$var27\n$var28\n$var30\n$var31\n$var32\n$var33\n$var34\n$var35\n$var36\n$var37\n$var38\n$var39\n$var40\n$var41\n$var42\n$var43\n$var44\n$var45\n$var46\n$var47\n$var48\n$var49\n$var50\n$var51\n$var52\n$var53\n$var54\n$var55\n$var56\n$var57\n$var58\n$var59\n$var60\n$var61\n$var62\n$var63\n$var64\n$var65\n$var66\n$var67\n$var68\n$var69\n$var70\n$var71\n$var72\n$var73\n$var74\n$var75\n');
} on OutOfMemoryError {
exit(254);
} catch (e, st) {

View file

@ -1153,10 +1153,14 @@ ObjectPtr Exceptions::Create(ExceptionType type, const Array& arguments) {
constructor_name = &Symbols::DotCreate();
break;
case kAbstractClassInstantiation:
library = Library::CoreLibrary();
#if defined(DART_PRECOMPILED_RUNTIME)
UNREACHABLE();
#else
library = Library::MirrorsLibrary();
class_name = &Symbols::AbstractClassInstantiationError();
constructor_name = &Symbols::DotCreate();
break;
#endif
case kCyclicInitializationError:
library = Library::CoreLibrary();
class_name = &Symbols::CyclicInitializationError();

View file

@ -366,12 +366,6 @@ class FallThroughError {
String toString() => super.toString();
}
@patch
class AbstractClassInstantiationError {
@patch
String toString() => "Cannot instantiate abstract class: '$_className'";
}
// Patch for DateTime implementation.
@patch
class DateTime {

View file

@ -530,10 +530,6 @@ throwRuntimeError(message) {
throw RuntimeError(message);
}
throwAbstractClassInstantiationError(className) {
throw AbstractClassInstantiationError(className);
}
throwConcurrentModificationError(collection) {
throw ConcurrentModificationError(collection);
}

View file

@ -253,12 +253,6 @@ class FallThroughError {
String toString() => super.toString();
}
@patch
class AbstractClassInstantiationError {
@patch
String toString() => "Cannot instantiate abstract class: '$_className'";
}
// Patch for DateTime implementation.
@patch
class DateTime {

View file

@ -176,24 +176,6 @@ class CyclicInitializationError {
}
}
@patch
class AbstractClassInstantiationError {
@pragma("vm:entry-point")
AbstractClassInstantiationError._create(
this._className, this._url, this._line);
@patch
String toString() {
return "Cannot instantiate abstract class $_className: "
"_url '$_url' line $_line";
}
// These new fields cannot be declared final, because a constructor exists
// in the original version of this patched class.
String? _url;
int _line = 0;
}
@patch
class NoSuchMethodError {
final Object? _receiver;

View file

@ -91,3 +91,21 @@ class MirrorSystem {
@pragma("vm:external-name", "Mirrors_mangleName")
external static _mangleName(String name, _MirrorReference lib);
}
@patch
class AbstractClassInstantiationError {
@pragma("vm:entry-point")
AbstractClassInstantiationError._create(
this._className, this._url, this._line);
@patch
String toString() {
return "Cannot instantiate abstract class $_className: "
"_url '$_url' line $_line";
}
// These new fields cannot be declared final, because a constructor exists
// in the original version of this patched class.
String? _url;
int _line = 0;
}

View file

@ -531,18 +531,6 @@ class FallThroughError extends Error {
external String toString();
}
/// Error thrown when trying to instantiate an abstract class.
///
/// No longer used in Dart 2 where it has become a compile-time error
/// to call the constructor of an abstract class.
@Deprecated("No longer relevant in Dart 2.0")
class AbstractClassInstantiationError extends Error {
final String _className;
AbstractClassInstantiationError(String className) : _className = className;
external String toString();
}
/// Error thrown when a particular method invocation is not possible.
///
/// This error is thrown by the default implementation of `noSuchMethod`

View file

@ -60,8 +60,13 @@ import "dart:core";
import 'dart:async' show Future;
import "dart:_internal" show Since;
// TODO: Move AbstractClassInstantiationError here when removed from dart:core.
export "dart:core" show AbstractClassInstantiationError;
/// Error thrown when trying to instantiate an abstract class.
class AbstractClassInstantiationError extends Error {
final String _className;
AbstractClassInstantiationError(String className) : _className = className;
external String toString();
}
/**
* A [MirrorSystem] is the main interface used to reflect on a set of