-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Change-Id: Ib250117553b2e22c6c71b78bf354be1162bc9981 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151235 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
- Loading branch information
1 parent
fefcac4
commit 45af991
Showing
32 changed files
with
965 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -751,6 +751,7 @@ os | |
outputting | ||
overlap | ||
overloader | ||
overlooked | ||
overshadowed | ||
overwrite | ||
overwriting | ||
|
24 changes: 24 additions & 0 deletions
24
pkg/front_end/testcases/general/abstract_operator_override.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Copyright (c) 2020, 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 A { | ||
A operator +(B b) => new A(); | ||
A operator -() => new A(); | ||
A operator [](B b) => new A(); | ||
void operator []=(B b1, B b2) {} | ||
} | ||
|
||
class B extends A { | ||
A operator +(A a); | ||
B operator -(); | ||
A operator [](A a); | ||
void operator []=(A a, B b); | ||
} | ||
|
||
class C extends A { | ||
B operator [](B b); | ||
void operator []=(B b, A a); | ||
} | ||
|
||
main() {} |
123 changes: 123 additions & 0 deletions
123
pkg/front_end/testcases/general/abstract_operator_override.dart.outline.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
library; | ||
// | ||
// Problems in library: | ||
// | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of '+' in the non-abstract class 'B' does not conform to its interface. | ||
// class B extends A { | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:6:18: Context: The parameter 'b' of the method 'A.+' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'B.+'. | ||
// - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// Change to a supertype of 'A', or, for a covariant parameter, a subtype. | ||
// A operator +(B b) => new A(); | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:13:14: Context: This is the overridden method ('+'). | ||
// A operator +(A a); | ||
// ^ | ||
// | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of 'unary-' in the non-abstract class 'B' does not conform to its interface. | ||
// class B extends A { | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:7:14: Context: The return type of the method 'A.unary-' is 'A', which does not match the return type, 'B', of the overridden method, 'B.unary-'. | ||
// - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// Change to a subtype of 'B'. | ||
// A operator -() => new A(); | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:14:14: Context: This is the overridden method ('unary-'). | ||
// B operator -(); | ||
// ^ | ||
// | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of '[]' in the non-abstract class 'B' does not conform to its interface. | ||
// class B extends A { | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:8:19: Context: The parameter 'b' of the method 'A.[]' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'B.[]'. | ||
// - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// Change to a supertype of 'A', or, for a covariant parameter, a subtype. | ||
// A operator [](B b) => new A(); | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:15:14: Context: This is the overridden method ('[]'). | ||
// A operator [](A a); | ||
// ^ | ||
// | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of '[]=' in the non-abstract class 'B' does not conform to its interface. | ||
// class B extends A { | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:9:23: Context: The parameter 'b1' of the method 'A.[]=' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'B.[]='. | ||
// - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// Change to a supertype of 'A', or, for a covariant parameter, a subtype. | ||
// void operator []=(B b1, B b2) {} | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:16:17: Context: This is the overridden method ('[]='). | ||
// void operator []=(A a, B b); | ||
// ^ | ||
// | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:19:7: Error: The implementation of '[]' in the non-abstract class 'C' does not conform to its interface. | ||
// class C extends A { | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:8:14: Context: The return type of the method 'A.[]' is 'A', which does not match the return type, 'B', of the overridden method, 'C.[]'. | ||
// - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// Change to a subtype of 'B'. | ||
// A operator [](B b) => new A(); | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:20:14: Context: This is the overridden method ('[]'). | ||
// B operator [](B b); | ||
// ^ | ||
// | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:19:7: Error: The implementation of '[]=' in the non-abstract class 'C' does not conform to its interface. | ||
// class C extends A { | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:9:29: Context: The parameter 'b2' of the method 'A.[]=' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.[]='. | ||
// - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'. | ||
// Change to a supertype of 'A', or, for a covariant parameter, a subtype. | ||
// void operator []=(B b1, B b2) {} | ||
// ^ | ||
// pkg/front_end/testcases/general/abstract_operator_override.dart:21:17: Context: This is the overridden method ('[]='). | ||
// void operator []=(B b, A a); | ||
// ^ | ||
// | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class A extends core::Object { | ||
synthetic constructor •() → self::A* | ||
; | ||
operator +(self::B* b) → self::A* | ||
; | ||
operator unary-() → self::A* | ||
; | ||
operator [](self::B* b) → self::A* | ||
; | ||
operator []=(self::B* b1, self::B* b2) → void | ||
; | ||
abstract member-signature get _identityHashCode() → core::int*; | ||
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; | ||
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; | ||
abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; | ||
abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; | ||
abstract member-signature operator ==(dynamic other) → core::bool*; | ||
abstract member-signature get hashCode() → core::int*; | ||
abstract member-signature method toString() → core::String*; | ||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; | ||
abstract member-signature get runtimeType() → core::Type*; | ||
} | ||
class B extends self::A { | ||
synthetic constructor •() → self::B* | ||
; | ||
abstract operator +(self::A* a) → self::A*; | ||
abstract operator unary-() → self::B*; | ||
abstract operator [](self::A* a) → self::A*; | ||
abstract operator []=(self::A* a, self::B* b) → void; | ||
} | ||
class C extends self::A { | ||
synthetic constructor •() → self::C* | ||
; | ||
abstract operator [](self::B* b) → self::B*; | ||
abstract operator []=(self::B* b, self::A* a) → void; | ||
} | ||
static method main() → dynamic | ||
; |
Oops, something went wrong.