081e2acf29
Bug: https://github.com/dart-lang/sdk/issues/40045 Change-Id: Ic0f62843d61b613e61f434b72b9553dd1e6897af Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132441 Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
65 lines
1.8 KiB
Dart
65 lines
1.8 KiB
Dart
// Copyright (c) 2013, 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.
|
|
|
|
// Ensure that objects handled specially by dart2js can be reflected on.
|
|
|
|
library test.intercepted_object_test;
|
|
|
|
import 'dart:mirrors';
|
|
|
|
import 'stringify.dart' show stringify, expect;
|
|
|
|
import 'intercepted_class_test.dart' show checkClassMirrorMethods;
|
|
|
|
checkImplements(object, String name) {
|
|
ClassMirror cls = reflect(object).type;
|
|
checkClassMirrorMethods(cls);
|
|
|
|
// The VM implements List via a mixin, so check for that.
|
|
if (cls.superinterfaces.isEmpty && object is List) {
|
|
cls = cls.superclass!.superclass!.mixin;
|
|
}
|
|
|
|
// The VM implements String through an intermediate abstract
|
|
// class.
|
|
if (cls.superinterfaces.isEmpty && object is String) {
|
|
cls = cls.superclass!;
|
|
}
|
|
|
|
// The VM implements int through an intermediate abstract
|
|
// class.
|
|
if (object is int &&
|
|
stringify(cls.superclass!.simpleName) == 's(_IntegerImplementation)') {
|
|
cls = cls.superclass!;
|
|
}
|
|
|
|
List<ClassMirror> superinterfaces = cls.superinterfaces;
|
|
String symName = 's($name)';
|
|
for (ClassMirror superinterface in superinterfaces) {
|
|
print(superinterface.simpleName);
|
|
if (symName == stringify(superinterface.simpleName)) {
|
|
checkClassMirrorMethods(superinterface);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// A class implements itself, even if not explicitly declared.
|
|
if (symName == stringify(cls.simpleName)) {
|
|
checkClassMirrorMethods(cls);
|
|
return;
|
|
}
|
|
|
|
// TODO(floitsch): use correct fail
|
|
expect(name, "super interface not found");
|
|
}
|
|
|
|
main() {
|
|
checkImplements('', 'String');
|
|
checkImplements(1, 'int');
|
|
checkImplements(1.5, 'double');
|
|
checkImplements(true, 'bool');
|
|
checkImplements(false, 'bool');
|
|
checkImplements([], 'List');
|
|
}
|