737b6f7356
Includes several updates to tests that needed to land with this flip, as well as some other tests that needed to be updated and could land separately, but are being included here to expedite things. Removes some unnecessary experimental release versions, as well as bringing up to date the generated files, which were previously out of sync with the yaml file. TEST=bots Change-Id: I71a86d7a86190069b504bd27d687f62b97a7251e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/285080 Commit-Queue: Jake Macdonald <jakemac@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Nate Bosch <nbosch@google.com> Reviewed-by: Samuel Rawlins <srawlins@google.com>
53 lines
1.4 KiB
Dart
53 lines
1.4 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.
|
|
|
|
import 'native_testing.dart';
|
|
import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
|
|
import 'dart:_interceptors' show Interceptor, findInterceptorForType;
|
|
|
|
// Test calling convention on subclasses of native classes.
|
|
|
|
mixin M {
|
|
miz() => 'M';
|
|
}
|
|
|
|
@Native("N")
|
|
class N {}
|
|
|
|
class A extends N {}
|
|
|
|
class B extends A with M {
|
|
// The call to [miz] has a know type [B]. The call is in an intercepted
|
|
// method and to an intercepted method, so the ambient interceptor can be
|
|
// used. For correct optimization of the interceptor, the compiler needs to
|
|
// (1) correctly determine that B is an intercepted type (because it extends a
|
|
// native class) and (2) realize that the intersection of [B] and subclasses
|
|
// of mixin applications of [M] is non-empty.
|
|
callMiz() => this.miz();
|
|
}
|
|
|
|
B makeB() native;
|
|
|
|
@Creates('=Object')
|
|
getBPrototype() native;
|
|
|
|
void setup() {
|
|
JS('', r"""
|
|
(function(){
|
|
function B() {}
|
|
self.makeB = function(){return new B()};
|
|
self.getBPrototype = function(){return B.prototype;};
|
|
})()""");
|
|
}
|
|
|
|
main() {
|
|
nativeTesting();
|
|
setup();
|
|
|
|
setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B));
|
|
|
|
B b = makeB();
|
|
Expect.equals('M', b.callMiz());
|
|
}
|