Files
sdk/tests/web/native/subclassing_4_test.dart
Jake Macdonald 737b6f7356 [flip-modifiers]: flip the flags for sealed classes and class modifiers
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>
2023-03-10 05:27:57 +00:00

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());
}