Skip to content

Commit 56e581a

Browse files
dcharkesCommit Queue
authored and
Commit Queue
committed
[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: #49529 Change-Id: Ic06dee0dfeaea64d9d9ffd9511ec66d9d0837e7e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274383 Reviewed-by: Michael Thomsen <[email protected]> Reviewed-by: Tess Strickland <[email protected]> Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 5b966a0 commit 56e581a

20 files changed

+36
-66
lines changed

pkg/front_end/lib/src/fasta/source/source_loader.dart

-2
Original file line numberDiff line numberDiff line change
@@ -2825,8 +2825,6 @@ abstract class pragma {
28252825
Object options;
28262826
}
28272827
2828-
class AbstractClassInstantiationError {}
2829-
28302828
class NoSuchMethodError {
28312829
factory NoSuchMethodError.withInvocation(receiver, invocation) => throw '';
28322830
}

pkg/front_end/testcases/general/bad_setter_abstract.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ test() {
6565
threw = true;
6666
new B();
6767
threw = false;
68-
} on AbstractClassInstantiationError catch (_) {
68+
} on Error catch (_) {
6969
// Ignored.
7070
}
7171
if (!threw) {

pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.expect

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ static method test() → dynamic {
151151
invalid-expression "The class 'B' is abstract and can't be instantiated.";
152152
threw = false;
153153
}
154-
on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
154+
on core::Error catch(final core::Error _) {
155155
}
156156
if(!threw) {
157157
throw "Expected an error above.";

pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ static method test() → dynamic {
151151
invalid-expression "The class 'B' is abstract and can't be instantiated.";
152152
threw = false;
153153
}
154-
on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
154+
on core::Error catch(final core::Error _) {
155155
}
156156
if(!threw) {
157157
throw "Expected an error above.";

pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.transformed.expect

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ static method test() → dynamic {
151151
invalid-expression "The class 'B' is abstract and can't be instantiated.";
152152
threw = false;
153153
}
154-
on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
154+
on core::Error catch(final core::Error _) {
155155
}
156156
if(!threw) {
157157
throw "Expected an error above.";

pkg/front_end/testcases/general/error_export_from_dill/main.dart.weak.expect

-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ additionalExports = (core::Deprecated,
111111
core::RangeError,
112112
core::IndexError,
113113
core::FallThroughError,
114-
core::AbstractClassInstantiationError,
115114
core::NoSuchMethodError,
116115
core::UnsupportedError,
117116
core::UnimplementedError,

pkg/front_end/testcases/general/error_export_from_dill/main.dart.weak.outline.expect

-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ additionalExports = (core::Deprecated,
4646
core::RangeError,
4747
core::IndexError,
4848
core::FallThroughError,
49-
core::AbstractClassInstantiationError,
5049
core::NoSuchMethodError,
5150
core::UnsupportedError,
5251
core::UnimplementedError,

pkg/front_end/testcases/general/error_export_from_dill/main.dart.weak.transformed.expect

-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ additionalExports = (core::Deprecated,
107107
core::RangeError,
108108
core::IndexError,
109109
core::FallThroughError,
110-
core::AbstractClassInstantiationError,
111110
core::NoSuchMethodError,
112111
core::UnsupportedError,
113112
core::UnimplementedError,

pkg/front_end/testcases/incremental/export_core.yaml.world.2.expect

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ additionalExports = (asy::Future,
1111
core::identityHashCode,
1212
core::print,
1313
core::Comparator,
14-
core::AbstractClassInstantiationError,
1514
core::ArgumentError,
1615
core::AssertionError,
1716
core::BidirectionalIterator,

pkg/front_end/testcases/incremental/export_core.yaml.world.3.expect

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ additionalExports = (asy::Future,
1111
core::identityHashCode,
1212
core::print,
1313
core::Comparator,
14-
core::AbstractClassInstantiationError,
1514
core::ArgumentError,
1615
core::AssertionError,
1716
core::BidirectionalIterator,

runtime/tests/vm/dart/regress_47010_test.dart

+1-4
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,6 @@ IndexError? var51 = IndexError.withLength(14, 2,
6767
indexable: 36, name: 'V(', message: '9Jf!0\u2665');
6868
FallThroughError var52 = FallThroughError();
6969
FallThroughError? var53 = FallThroughError();
70-
AbstractClassInstantiationError var54 = AbstractClassInstantiationError('J!');
71-
AbstractClassInstantiationError? var55 =
72-
AbstractClassInstantiationError('L48ynpV');
7370
UnsupportedError var56 = UnsupportedError('5txzg');
7471
UnsupportedError? var57 = UnsupportedError('W4vVdfv');
7572
UnimplementedError var58 = UnimplementedError('pK00TI\u2665');
@@ -283,5 +280,5 @@ main() {
283280
foo1_Extension0();
284281

285282
print(
286-
'$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');
283+
'$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');
287284
}

runtime/tests/vm/dart_2/regress_40462_test.dart

+1-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ RangeError var26 =
5656
IndexError var27 =
5757
IndexError.withLength(38, 13, indexable: 29, name: 'R1Z', message: 'VnR7');
5858
FallThroughError var28 = new FallThroughError();
59-
AbstractClassInstantiationError var29 = AbstractClassInstantiationError('Sq');
6059
UnsupportedError var30 = UnsupportedError('(OXv');
6160
UnimplementedError var31 = UnimplementedError('Dt)F@\u2665');
6261
StateError var32 = StateError('y');
@@ -1300,7 +1299,7 @@ main() {
13001299
}
13011300
try {
13021301
print(
1303-
'$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');
1302+
'$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');
13041303
} on OutOfMemoryError {
13051304
exit(254);
13061305
} catch (e, st) {

runtime/vm/exceptions.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -1153,10 +1153,14 @@ ObjectPtr Exceptions::Create(ExceptionType type, const Array& arguments) {
11531153
constructor_name = &Symbols::DotCreate();
11541154
break;
11551155
case kAbstractClassInstantiation:
1156-
library = Library::CoreLibrary();
1156+
#if defined(DART_PRECOMPILED_RUNTIME)
1157+
UNREACHABLE();
1158+
#else
1159+
library = Library::MirrorsLibrary();
11571160
class_name = &Symbols::AbstractClassInstantiationError();
11581161
constructor_name = &Symbols::DotCreate();
11591162
break;
1163+
#endif
11601164
case kCyclicInitializationError:
11611165
library = Library::CoreLibrary();
11621166
class_name = &Symbols::CyclicInitializationError();

sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart

-6
Original file line numberDiff line numberDiff line change
@@ -366,12 +366,6 @@ class FallThroughError {
366366
String toString() => super.toString();
367367
}
368368

369-
@patch
370-
class AbstractClassInstantiationError {
371-
@patch
372-
String toString() => "Cannot instantiate abstract class: '$_className'";
373-
}
374-
375369
// Patch for DateTime implementation.
376370
@patch
377371
class DateTime {

sdk/lib/_internal/js_dev_runtime/private/js_helper.dart

-4
Original file line numberDiff line numberDiff line change
@@ -530,10 +530,6 @@ throwRuntimeError(message) {
530530
throw RuntimeError(message);
531531
}
532532

533-
throwAbstractClassInstantiationError(className) {
534-
throw AbstractClassInstantiationError(className);
535-
}
536-
537533
throwConcurrentModificationError(collection) {
538534
throw ConcurrentModificationError(collection);
539535
}

sdk/lib/_internal/js_runtime/lib/core_patch.dart

-6
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,6 @@ class FallThroughError {
253253
String toString() => super.toString();
254254
}
255255

256-
@patch
257-
class AbstractClassInstantiationError {
258-
@patch
259-
String toString() => "Cannot instantiate abstract class: '$_className'";
260-
}
261-
262256
// Patch for DateTime implementation.
263257
@patch
264258
class DateTime {

sdk/lib/_internal/vm/lib/errors_patch.dart

-18
Original file line numberDiff line numberDiff line change
@@ -176,24 +176,6 @@ class CyclicInitializationError {
176176
}
177177
}
178178

179-
@patch
180-
class AbstractClassInstantiationError {
181-
@pragma("vm:entry-point")
182-
AbstractClassInstantiationError._create(
183-
this._className, this._url, this._line);
184-
185-
@patch
186-
String toString() {
187-
return "Cannot instantiate abstract class $_className: "
188-
"_url '$_url' line $_line";
189-
}
190-
191-
// These new fields cannot be declared final, because a constructor exists
192-
// in the original version of this patched class.
193-
String? _url;
194-
int _line = 0;
195-
}
196-
197179
@patch
198180
class NoSuchMethodError {
199181
final Object? _receiver;

sdk/lib/_internal/vm/lib/mirrors_patch.dart

+18
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,21 @@ class MirrorSystem {
9191
@pragma("vm:external-name", "Mirrors_mangleName")
9292
external static _mangleName(String name, _MirrorReference lib);
9393
}
94+
95+
@patch
96+
class AbstractClassInstantiationError {
97+
@pragma("vm:entry-point")
98+
AbstractClassInstantiationError._create(
99+
this._className, this._url, this._line);
100+
101+
@patch
102+
String toString() {
103+
return "Cannot instantiate abstract class $_className: "
104+
"_url '$_url' line $_line";
105+
}
106+
107+
// These new fields cannot be declared final, because a constructor exists
108+
// in the original version of this patched class.
109+
String? _url;
110+
int _line = 0;
111+
}

sdk/lib/core/errors.dart

-12
Original file line numberDiff line numberDiff line change
@@ -531,18 +531,6 @@ class FallThroughError extends Error {
531531
external String toString();
532532
}
533533

534-
/// Error thrown when trying to instantiate an abstract class.
535-
///
536-
/// No longer used in Dart 2 where it has become a compile-time error
537-
/// to call the constructor of an abstract class.
538-
@Deprecated("No longer relevant in Dart 2.0")
539-
class AbstractClassInstantiationError extends Error {
540-
final String _className;
541-
AbstractClassInstantiationError(String className) : _className = className;
542-
543-
external String toString();
544-
}
545-
546534
/// Error thrown when a particular method invocation is not possible.
547535
///
548536
/// This error is thrown by the default implementation of `noSuchMethod`

sdk/lib/mirrors/mirrors.dart

+7-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,13 @@ import "dart:core";
6060
import 'dart:async' show Future;
6161
import "dart:_internal" show Since;
6262

63-
// TODO: Move AbstractClassInstantiationError here when removed from dart:core.
64-
export "dart:core" show AbstractClassInstantiationError;
63+
/// Error thrown when trying to instantiate an abstract class.
64+
class AbstractClassInstantiationError extends Error {
65+
final String _className;
66+
AbstractClassInstantiationError(String className) : _className = className;
67+
68+
external String toString();
69+
}
6570

6671
/**
6772
* A [MirrorSystem] is the main interface used to reflect on a set of

0 commit comments

Comments
 (0)