mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 13:08:01 +00:00
[cfe,vm,wasm] Handle private injected members like augmentations
This changes the way the CFE handled private injected members. Previously these were "hidden" within the patch library in which they were declared. Now they are, like with members injected in augmentation libraries, fully integrated and accessible within the origin library and all its patches. This change revealed that the vm and wasm platforms had some inconsistently declared classes in which injected private members that were not implemented by all implementing classes. For these, throwing stubs have been added. Cq-Include-Trybots: luci.dart.try:dart2wasm-linux-x64-d8-try Change-Id: I330eade944964ef43b83aa416baef75e3649d023 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/262340 Reviewed-by: Jens Johansen <jensj@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
b7debf00f7
commit
5b2e23eab0
|
@ -1282,8 +1282,8 @@ abstract class MergedScope<T extends Builder> {
|
|||
void _addBuilderToMergedScope(T parentBuilder, String name,
|
||||
Builder newBuilder, Builder? existingBuilder,
|
||||
{required bool setter}) {
|
||||
if (parentBuilder.isAugmentation) {
|
||||
if (existingBuilder != null) {
|
||||
if (existingBuilder != null) {
|
||||
if (parentBuilder.isAugmentation) {
|
||||
if (newBuilder.isAugmentation) {
|
||||
existingBuilder.applyPatch(newBuilder);
|
||||
} else {
|
||||
|
@ -1322,24 +1322,33 @@ abstract class MergedScope<T extends Builder> {
|
|||
]);
|
||||
}
|
||||
} else {
|
||||
if (newBuilder.isAugmentation) {
|
||||
Message message;
|
||||
if (newBuilder is SourceMemberBuilder) {
|
||||
if (_origin is SourceLibraryBuilder) {
|
||||
message = templateUnmatchedAugmentationLibraryMember
|
||||
.withArguments(name);
|
||||
} else {
|
||||
message =
|
||||
templateUnmatchedAugmentationClassMember.withArguments(name);
|
||||
}
|
||||
} else if (newBuilder is SourceClassBuilder) {
|
||||
message = templateUnmatchedAugmentationClass.withArguments(name);
|
||||
// Patch libraries implicitly assume matching members are patch
|
||||
// members.
|
||||
existingBuilder.applyPatch(newBuilder);
|
||||
}
|
||||
} else {
|
||||
if (newBuilder.isAugmentation) {
|
||||
Message message;
|
||||
if (newBuilder is SourceMemberBuilder) {
|
||||
if (_origin is SourceLibraryBuilder) {
|
||||
message =
|
||||
templateUnmatchedAugmentationLibraryMember.withArguments(name);
|
||||
} else {
|
||||
message =
|
||||
templateUnmatchedAugmentationDeclaration.withArguments(name);
|
||||
templateUnmatchedAugmentationClassMember.withArguments(name);
|
||||
}
|
||||
originLibrary.addProblem(
|
||||
message, newBuilder.charOffset, name.length, newBuilder.fileUri);
|
||||
} else if (newBuilder is SourceClassBuilder) {
|
||||
message = templateUnmatchedAugmentationClass.withArguments(name);
|
||||
} else {
|
||||
message =
|
||||
templateUnmatchedAugmentationDeclaration.withArguments(name);
|
||||
}
|
||||
originLibrary.addProblem(
|
||||
message, newBuilder.charOffset, name.length, newBuilder.fileUri);
|
||||
} else {
|
||||
if (!parentBuilder.isAugmentation && !name.startsWith('_')) {
|
||||
// We special-case public members injected in patch libraries.
|
||||
_addInjectedPatchMember(name, newBuilder);
|
||||
} else {
|
||||
_originScope.addLocalMember(name, newBuilder, setter: setter);
|
||||
for (Scope augmentationScope in _augmentationScopes.values) {
|
||||
|
@ -1348,14 +1357,6 @@ abstract class MergedScope<T extends Builder> {
|
|||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (existingBuilder != null) {
|
||||
// Patch libraries implicitly assume matching members are patch
|
||||
// members.
|
||||
existingBuilder.applyPatch(newBuilder);
|
||||
} else {
|
||||
_addInjectedPatchMember(name, newBuilder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1419,29 +1420,8 @@ class MergedLibraryScope extends MergedScope<SourceLibraryBuilder> {
|
|||
|
||||
@override
|
||||
void _addInjectedPatchMember(String name, Builder newBuilder) {
|
||||
if (name.startsWith('_')) {
|
||||
injectMemberFromPatch(name, newBuilder);
|
||||
} else {
|
||||
exportMemberFromPatch(name, newBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
void injectMemberFromPatch(String name, Builder member) {
|
||||
if (member.isSetter) {
|
||||
assert(
|
||||
_originScope.lookupLocalMember(name, setter: true) == null,
|
||||
"Setter $name already bound to "
|
||||
"${_originScope.lookupLocalMember(name, setter: true)}, "
|
||||
"trying to add $member.");
|
||||
_originScope.addLocalMember(name, member as MemberBuilder, setter: true);
|
||||
} else {
|
||||
assert(
|
||||
_originScope.lookupLocalMember(name, setter: false) == null,
|
||||
"Member $name already bound to "
|
||||
"${_originScope.lookupLocalMember(name, setter: false)}, "
|
||||
"trying to add $member.");
|
||||
_originScope.addLocalMember(name, member, setter: false);
|
||||
}
|
||||
assert(!name.startsWith('_'), "Unexpected private member $newBuilder");
|
||||
exportMemberFromPatch(name, newBuilder);
|
||||
}
|
||||
|
||||
void exportMemberFromPatch(String name, Builder member) {
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
|
||||
/*class: PatchedClass:
|
||||
kernel-members=[
|
||||
PatchedClass.,
|
||||
_field
|
||||
]
|
||||
PatchedClass.,
|
||||
_field],
|
||||
scope=[_field]
|
||||
*/
|
||||
class PatchedClass {
|
||||
external const PatchedClass({int field});
|
||||
|
|
|
@ -10,7 +10,9 @@
|
|||
PatchedClass.,
|
||||
_privateField,
|
||||
publicField],
|
||||
scope=[publicField]
|
||||
scope=[
|
||||
_privateField,
|
||||
publicField]
|
||||
*/
|
||||
class PatchedClass {
|
||||
int publicField;
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"none": {
|
||||
"libraries": {
|
||||
"test": {
|
||||
"patches": [
|
||||
"patch_lib1.dart",
|
||||
"patch_lib2.dart"
|
||||
],
|
||||
"uri": "origin_lib.dart"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
import 'dart:test';
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,3 @@
|
|||
import 'dart:test';
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,3 @@
|
|||
import 'dart:test';
|
||||
|
||||
main() {}
|
|
@ -0,0 +1,144 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
|
||||
import "dart:test";
|
||||
|
||||
static method main() → dynamic {}
|
||||
|
||||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:35:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
|
||||
// - Class._privateInjectedInstanceMember1
|
||||
// - Class._privateInjectedInstanceMember2
|
||||
// Try to either
|
||||
// - provide an implementation,
|
||||
// - inherit an implementation from a superclass or mixin,
|
||||
// - mark the class as abstract, or
|
||||
// - provide a 'noSuchMethod' implementation.
|
||||
//
|
||||
// class ClassImplements
|
||||
// ^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib1.dart:10:8: Context: 'Class._privateInjectedInstanceMember1' is defined here.
|
||||
// void _privateInjectedInstanceMember1(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib2.dart:10:8: Context: 'Class._privateInjectedInstanceMember2' is defined here.
|
||||
// void _privateInjectedInstanceMember2(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:32:8: Error: The method 'ClassExtends._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:37:8: Error: The method 'ClassImplements._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
import self as self2;
|
||||
import "dart:_internal" as _in;
|
||||
import "dart:core" as core;
|
||||
|
||||
import "dart:_internal";
|
||||
import "dart:_internal";
|
||||
|
||||
@#C1
|
||||
@#C1
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self2::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method _privateInstanceMember(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method _privateStaticMember() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedInstanceMember1(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedStaticMember1() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedInstanceMember2(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedStaticMember2() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
}
|
||||
class ClassExtends extends self2::Class {
|
||||
synthetic constructor •() → self2::ClassExtends
|
||||
: super self2::Class::•()
|
||||
;
|
||||
method _privateInstanceMember() → void {}
|
||||
}
|
||||
class ClassImplements extends core::Object implements self2::Class {
|
||||
synthetic constructor •() → self2::ClassImplements
|
||||
: super core::Object::•()
|
||||
;
|
||||
method _privateInstanceMember() → void {}
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember1(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[c]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember2(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[c]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
|
||||
}
|
||||
static method _privateTopLevelMember() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedTopLevelMember1() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedTopLevelMember2() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = _in::_Patch {}
|
||||
#C2 = #dart:test::_privateInjectedInstanceMember1
|
||||
#C3 = <core::Type*>[]
|
||||
#C4 = <core::Symbol*, dynamic>{)
|
||||
#C5 = #dart:test::_privateInjectedInstanceMember2
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
|
||||
import "dart:test";
|
||||
|
||||
static method main() → dynamic {}
|
||||
|
||||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:35:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
|
||||
// - Class._privateInjectedInstanceMember1
|
||||
// - Class._privateInjectedInstanceMember2
|
||||
// Try to either
|
||||
// - provide an implementation,
|
||||
// - inherit an implementation from a superclass or mixin,
|
||||
// - mark the class as abstract, or
|
||||
// - provide a 'noSuchMethod' implementation.
|
||||
//
|
||||
// class ClassImplements
|
||||
// ^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib1.dart:10:8: Context: 'Class._privateInjectedInstanceMember1' is defined here.
|
||||
// void _privateInjectedInstanceMember1(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib2.dart:10:8: Context: 'Class._privateInjectedInstanceMember2' is defined here.
|
||||
// void _privateInjectedInstanceMember2(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:32:8: Error: The method 'ClassExtends._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:37:8: Error: The method 'ClassImplements._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
import self as self2;
|
||||
import "dart:_internal" as _in;
|
||||
import "dart:core" as core;
|
||||
|
||||
import "dart:_internal";
|
||||
import "dart:_internal";
|
||||
|
||||
@#C1
|
||||
@#C1
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self2::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method _privateInstanceMember(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method _privateStaticMember() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedInstanceMember1(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedStaticMember1() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedInstanceMember2(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedStaticMember2() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
}
|
||||
class ClassExtends extends self2::Class {
|
||||
synthetic constructor •() → self2::ClassExtends
|
||||
: super self2::Class::•()
|
||||
;
|
||||
method _privateInstanceMember() → void {}
|
||||
}
|
||||
class ClassImplements extends core::Object implements self2::Class {
|
||||
synthetic constructor •() → self2::ClassImplements
|
||||
: super core::Object::•()
|
||||
;
|
||||
method _privateInstanceMember() → void {}
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember1(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[c]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember2(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[c]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
|
||||
}
|
||||
static method _privateTopLevelMember() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedTopLevelMember1() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedTopLevelMember2() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = _in::_Patch {}
|
||||
#C2 = #dart:test::_privateInjectedInstanceMember1
|
||||
#C3 = <core::Type*>[]
|
||||
#C4 = <core::Symbol*, dynamic>{)
|
||||
#C5 = #dart:test::_privateInjectedInstanceMember2
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
|
||||
import "dart:test";
|
||||
|
||||
static method main() → dynamic
|
||||
;
|
||||
|
||||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:35:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
|
||||
// - Class._privateInjectedInstanceMember1
|
||||
// - Class._privateInjectedInstanceMember2
|
||||
// Try to either
|
||||
// - provide an implementation,
|
||||
// - inherit an implementation from a superclass or mixin,
|
||||
// - mark the class as abstract, or
|
||||
// - provide a 'noSuchMethod' implementation.
|
||||
//
|
||||
// class ClassImplements
|
||||
// ^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib1.dart:10:8: Context: 'Class._privateInjectedInstanceMember1' is defined here.
|
||||
// void _privateInjectedInstanceMember1(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib2.dart:10:8: Context: 'Class._privateInjectedInstanceMember2' is defined here.
|
||||
// void _privateInjectedInstanceMember2(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:32:8: Error: The method 'ClassExtends._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:37:8: Error: The method 'ClassImplements._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
import self as self2;
|
||||
import "dart:_internal" as _in;
|
||||
import "dart:core" as core;
|
||||
|
||||
import "dart:_internal";
|
||||
import "dart:_internal";
|
||||
|
||||
@_in::patch
|
||||
@_in::patch
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self2::Class
|
||||
;
|
||||
method _privateInstanceMember(self2::Class c) → void
|
||||
;
|
||||
static method _privateStaticMember() → void
|
||||
;
|
||||
method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedInstanceMember1(self2::Class c) → void
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedStaticMember1() → void
|
||||
;
|
||||
method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedInstanceMember2(self2::Class c) → void
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedStaticMember2() → void
|
||||
;
|
||||
}
|
||||
class ClassExtends extends self2::Class {
|
||||
synthetic constructor •() → self2::ClassExtends
|
||||
;
|
||||
method _privateInstanceMember() → void
|
||||
;
|
||||
}
|
||||
class ClassImplements extends core::Object implements self2::Class {
|
||||
synthetic constructor •() → self2::ClassImplements
|
||||
;
|
||||
method _privateInstanceMember() → void
|
||||
;
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember1(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateInjectedInstanceMember1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[c]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember2(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_privateInjectedInstanceMember2, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[c]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
|
||||
}
|
||||
static method _privateTopLevelMember() → void
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedTopLevelMember1() → void
|
||||
;
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedTopLevelMember2() → void
|
||||
;
|
||||
|
||||
|
||||
Extra constant evaluation status:
|
||||
Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:8 -> InstanceConstant(const _Patch{})
|
||||
Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:8 -> InstanceConstant(const _Patch{})
|
||||
Evaluated: SymbolLiteral @ org-dartlang-testcase:///origin_lib.dart:35:7 -> SymbolConstant(#_privateInjectedInstanceMember1)
|
||||
Evaluated: ListLiteral @ org-dartlang-testcase:///origin_lib.dart:35:7 -> ListConstant(const <Type*>[])
|
||||
Evaluated: MapLiteral @ org-dartlang-testcase:///origin_lib.dart:35:7 -> MapConstant(const <Symbol*, dynamic>{})
|
||||
Evaluated: SymbolLiteral @ org-dartlang-testcase:///origin_lib.dart:35:7 -> SymbolConstant(#_privateInjectedInstanceMember2)
|
||||
Evaluated: ListLiteral @ org-dartlang-testcase:///origin_lib.dart:35:7 -> ListConstant(const <Type*>[])
|
||||
Evaluated: MapLiteral @ org-dartlang-testcase:///origin_lib.dart:35:7 -> MapConstant(const <Symbol*, dynamic>{})
|
||||
Extra constant evaluation: evaluated: 22, effectively constant: 8
|
|
@ -0,0 +1,144 @@
|
|||
library /*isNonNullableByDefault*/;
|
||||
import self as self;
|
||||
|
||||
import "dart:test";
|
||||
|
||||
static method main() → dynamic {}
|
||||
|
||||
library /*isNonNullableByDefault*/;
|
||||
//
|
||||
// Problems in library:
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:35:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
|
||||
// - Class._privateInjectedInstanceMember1
|
||||
// - Class._privateInjectedInstanceMember2
|
||||
// Try to either
|
||||
// - provide an implementation,
|
||||
// - inherit an implementation from a superclass or mixin,
|
||||
// - mark the class as abstract, or
|
||||
// - provide a 'noSuchMethod' implementation.
|
||||
//
|
||||
// class ClassImplements
|
||||
// ^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib1.dart:10:8: Context: 'Class._privateInjectedInstanceMember1' is defined here.
|
||||
// void _privateInjectedInstanceMember1(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/patch_lib2.dart:10:8: Context: 'Class._privateInjectedInstanceMember2' is defined here.
|
||||
// void _privateInjectedInstanceMember2(Class c) {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:32:8: Error: The method 'ClassExtends._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:37:8: Error: The method 'ClassImplements._privateInstanceMember' has fewer positional arguments than those of overridden method 'Class._privateInstanceMember'.
|
||||
// void _privateInstanceMember() {}
|
||||
// ^
|
||||
// pkg/front_end/testcases/general/inject_private_patch/origin_lib.dart:6:8: Context: This is the overridden method ('_privateInstanceMember').
|
||||
// void _privateInstanceMember(Class c) {
|
||||
// ^
|
||||
//
|
||||
import self as self2;
|
||||
import "dart:_internal" as _in;
|
||||
import "dart:core" as core;
|
||||
|
||||
import "dart:_internal";
|
||||
import "dart:_internal";
|
||||
|
||||
@#C1
|
||||
@#C1
|
||||
class Class extends core::Object {
|
||||
synthetic constructor •() → self2::Class
|
||||
: super core::Object::•()
|
||||
;
|
||||
method _privateInstanceMember(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method _privateStaticMember() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedInstanceMember1(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedStaticMember1() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedInstanceMember2(self2::Class c) → void {
|
||||
this.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
this.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInstanceMember}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember1}(c){(self2::Class) → void};
|
||||
c.{self2::Class::_privateInjectedInstanceMember2}(c){(self2::Class) → void};
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedStaticMember2() → void {
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
self2::Class::_privateStaticMember();
|
||||
self2::Class::_privateInjectedStaticMember1();
|
||||
self2::Class::_privateInjectedStaticMember2();
|
||||
}
|
||||
}
|
||||
class ClassExtends extends self2::Class {
|
||||
synthetic constructor •() → self2::ClassExtends
|
||||
: super self2::Class::•()
|
||||
;
|
||||
method _privateInstanceMember() → void {}
|
||||
}
|
||||
class ClassImplements extends core::Object implements self2::Class {
|
||||
synthetic constructor •() → self2::ClassImplements
|
||||
: super core::Object::•()
|
||||
;
|
||||
method _privateInstanceMember() → void {}
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember1(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
|
||||
no-such-method-forwarder method _privateInjectedInstanceMember2(self2::Class c) → void
|
||||
return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(c)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
|
||||
}
|
||||
static method _privateTopLevelMember() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib1.dart */ _privateInjectedTopLevelMember1() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
static method /* from org-dartlang-testcase:///patch_lib2.dart */ _privateInjectedTopLevelMember2() → void {
|
||||
self2::_privateTopLevelMember();
|
||||
self2::_privateInjectedTopLevelMember1();
|
||||
self2::_privateInjectedTopLevelMember2();
|
||||
}
|
||||
|
||||
constants {
|
||||
#C1 = _in::_Patch {}
|
||||
#C2 = #dart:test::_privateInjectedInstanceMember1
|
||||
#C3 = <core::Type*>[]
|
||||
#C4 = <core::Symbol*, dynamic>{)
|
||||
#C5 = #dart:test::_privateInjectedInstanceMember2
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
class Class {
|
||||
void _privateInstanceMember(Class c) {
|
||||
_privateInstanceMember(c);
|
||||
_privateInjectedInstanceMember1(c);
|
||||
_privateInjectedInstanceMember2(c);
|
||||
c._privateInstanceMember(c);
|
||||
c._privateInjectedInstanceMember1(c);
|
||||
c._privateInjectedInstanceMember2(c);
|
||||
}
|
||||
|
||||
static void _privateStaticMember() {
|
||||
_privateStaticMember();
|
||||
_privateInjectedStaticMember1();
|
||||
_privateInjectedStaticMember2();
|
||||
Class._privateStaticMember();
|
||||
Class._privateInjectedStaticMember1();
|
||||
Class._privateInjectedStaticMember2();
|
||||
}
|
||||
}
|
||||
|
||||
void _privateTopLevelMember() {
|
||||
_privateTopLevelMember();
|
||||
_privateInjectedTopLevelMember1();
|
||||
_privateInjectedTopLevelMember2();
|
||||
}
|
||||
|
||||
class ClassExtends extends Class /* Ok */ {
|
||||
void _privateInstanceMember() {}
|
||||
}
|
||||
|
||||
class ClassImplements
|
||||
implements Class /* // Error, missing (injected) members. */ {
|
||||
void _privateInstanceMember() {}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
// ignore: import_internal_library
|
||||
import 'dart:_internal';
|
||||
|
||||
@patch
|
||||
class Class {
|
||||
void _privateInjectedInstanceMember1(Class c) {
|
||||
_privateInstanceMember(c);
|
||||
_privateInjectedInstanceMember1(c);
|
||||
_privateInjectedInstanceMember2(c);
|
||||
c._privateInstanceMember(c);
|
||||
c._privateInjectedInstanceMember1(c);
|
||||
c._privateInjectedInstanceMember2(c);
|
||||
}
|
||||
|
||||
static void _privateInjectedStaticMember1() {
|
||||
_privateStaticMember();
|
||||
_privateInjectedStaticMember1();
|
||||
_privateInjectedStaticMember2();
|
||||
Class._privateStaticMember();
|
||||
Class._privateInjectedStaticMember1();
|
||||
Class._privateInjectedStaticMember2();
|
||||
}
|
||||
}
|
||||
|
||||
void _privateInjectedTopLevelMember1() {
|
||||
_privateTopLevelMember();
|
||||
_privateInjectedTopLevelMember1();
|
||||
_privateInjectedTopLevelMember2();
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
// ignore: import_internal_library
|
||||
import 'dart:_internal';
|
||||
|
||||
@patch
|
||||
class Class {
|
||||
void _privateInjectedInstanceMember2(Class c) {
|
||||
_privateInstanceMember(c);
|
||||
_privateInjectedInstanceMember1(c);
|
||||
_privateInjectedInstanceMember2(c);
|
||||
c._privateInstanceMember(c);
|
||||
c._privateInjectedInstanceMember1(c);
|
||||
c._privateInjectedInstanceMember2(c);
|
||||
}
|
||||
|
||||
static void _privateInjectedStaticMember2() {
|
||||
_privateStaticMember();
|
||||
_privateInjectedStaticMember1();
|
||||
_privateInjectedStaticMember2();
|
||||
Class._privateStaticMember();
|
||||
Class._privateInjectedStaticMember1();
|
||||
Class._privateInjectedStaticMember2();
|
||||
}
|
||||
}
|
||||
|
||||
void _privateInjectedTopLevelMember2() {
|
||||
_privateTopLevelMember();
|
||||
_privateInjectedTopLevelMember1();
|
||||
_privateInjectedTopLevelMember2();
|
||||
}
|
|
@ -517,3 +517,33 @@ class _DuplicatedFieldInitializerError extends Error {
|
|||
|
||||
toString() => "Error: field '$_name' is already initialized.";
|
||||
}
|
||||
|
||||
// Implementations needed to implement the `_stackTrace` member added
|
||||
// in the @patch class of [Error].
|
||||
|
||||
@patch
|
||||
class OutOfMemoryError {
|
||||
StackTrace? get _stackTrace =>
|
||||
throw UnsupportedError('OutOfMemoryError._stackTrace');
|
||||
void set _stackTrace(StackTrace? _) {
|
||||
throw UnsupportedError('OutOfMemoryError._stackTrace');
|
||||
}
|
||||
}
|
||||
|
||||
@patch
|
||||
class StackOverflowError {
|
||||
StackTrace? get _stackTrace =>
|
||||
throw UnsupportedError('StackOverflowError._stackTrace');
|
||||
void set _stackTrace(StackTrace? _) {
|
||||
throw UnsupportedError('StackOverflowError._stackTrace');
|
||||
}
|
||||
}
|
||||
|
||||
@patch
|
||||
class IntegerDivisionByZeroException {
|
||||
StackTrace? get _stackTrace =>
|
||||
throw UnsupportedError('IntegerDivisionByZeroException._stackTrace');
|
||||
void set _stackTrace(StackTrace? _) {
|
||||
throw UnsupportedError('IntegerDivisionByZeroException._stackTrace');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1076,3 +1076,49 @@ abstract class NativeApi {
|
|||
static Pointer<Void> get initializeApiDLData =>
|
||||
Pointer.fromAddress(_initializeApiDLData());
|
||||
}
|
||||
|
||||
// Implementations needed to implement the private member added in the
|
||||
// patch class of [Array].
|
||||
|
||||
@patch
|
||||
class _ArraySize<T extends NativeType> implements Array<T> {
|
||||
_checkIndex(int index) => throw UnsupportedError('_ArraySize._checkIndex');
|
||||
|
||||
List<int> get _nestedDimensions =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensions');
|
||||
|
||||
int get _nestedDimensionsFirst =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsFirst');
|
||||
|
||||
int? get _nestedDimensionsFirstCache =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsFirstCache');
|
||||
|
||||
void set _nestedDimensionsFirstCache(int? _) {
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsFirstCache');
|
||||
}
|
||||
|
||||
int get _nestedDimensionsFlattened =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsFlattened');
|
||||
|
||||
int? get _nestedDimensionsFlattenedCache =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsFlattenedCache');
|
||||
|
||||
void set _nestedDimensionsFlattenedCache(int? _) {
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsFlattenedCache');
|
||||
}
|
||||
|
||||
List<int> get _nestedDimensionsRest =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsRest');
|
||||
|
||||
List<int>? get _nestedDimensionsRestCache =>
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsRestCache');
|
||||
|
||||
void set _nestedDimensionsRestCache(List<int>? _) {
|
||||
throw UnsupportedError('_ArraySize._nestedDimensionsRestCache');
|
||||
}
|
||||
|
||||
int get _size => throw UnsupportedError('_ArraySize._size');
|
||||
|
||||
Object get _typedDataBase =>
|
||||
throw UnsupportedError('_ArraySize._typedDataBase');
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ class int {
|
|||
external const factory int.fromEnvironment(String name,
|
||||
{int defaultValue = 0});
|
||||
|
||||
int _bitAndFromSmi(_Smi other);
|
||||
int _bitAndFromInteger(int other);
|
||||
int _bitOrFromInteger(int other);
|
||||
int _bitXorFromInteger(int other);
|
||||
|
|
|
@ -31,6 +31,14 @@ class _DeferredNotLoadedError extends Error implements NoSuchMethodError {
|
|||
String toString() {
|
||||
return "Deferred library $prefix was not loaded.";
|
||||
}
|
||||
|
||||
// Implementations needed to implement the `_receiver` and `_invocation`
|
||||
// members added in the @patch class of [NoSuchMethodError].
|
||||
|
||||
Object? get _receiver =>
|
||||
throw UnsupportedError('_DeferredNotLoadedError._receiver');
|
||||
Invocation get _invocation =>
|
||||
throw UnsupportedError('_DeferredNotLoadedError._invocation');
|
||||
}
|
||||
|
||||
@pragma("vm:entry-point")
|
||||
|
|
|
@ -167,3 +167,33 @@ class StateError {
|
|||
throw new StateError(msg);
|
||||
}
|
||||
}
|
||||
|
||||
// Implementations needed to implement the `_stackTrace` member added
|
||||
// in the @patch class of [Error].
|
||||
|
||||
@patch
|
||||
class OutOfMemoryError {
|
||||
StackTrace? get _stackTrace =>
|
||||
throw UnsupportedError('OutOfMemoryError._stackTrace');
|
||||
void set _stackTrace(StackTrace? _) {
|
||||
throw UnsupportedError('OutOfMemoryError._stackTrace');
|
||||
}
|
||||
}
|
||||
|
||||
@patch
|
||||
class StackOverflowError {
|
||||
StackTrace? get _stackTrace =>
|
||||
throw UnsupportedError('StackOverflowError._stackTrace');
|
||||
void set _stackTrace(StackTrace? _) {
|
||||
throw UnsupportedError('StackOverflowError._stackTrace');
|
||||
}
|
||||
}
|
||||
|
||||
@patch
|
||||
class IntegerDivisionByZeroException {
|
||||
StackTrace? get _stackTrace =>
|
||||
throw UnsupportedError('IntegerDivisionByZeroException._stackTrace');
|
||||
void set _stackTrace(StackTrace? _) {
|
||||
throw UnsupportedError('IntegerDivisionByZeroException._stackTrace');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,14 +12,6 @@ class int {
|
|||
external const factory int.fromEnvironment(String name,
|
||||
{int defaultValue = 0});
|
||||
|
||||
int _bitAndFromSmi(_Smi other);
|
||||
int _bitAndFromInteger(int other);
|
||||
int _bitOrFromInteger(int other);
|
||||
int _bitXorFromInteger(int other);
|
||||
int _shlFromInteger(int other);
|
||||
int _shrFromInteger(int other);
|
||||
int _ushrFromInteger(int other);
|
||||
|
||||
static int? _tryParseSmi(String str, int first, int last) {
|
||||
assert(first <= last);
|
||||
var ix = first;
|
||||
|
|
Loading…
Reference in a new issue