d9878ae0da
Also refactors the code to make this sort of issue less likely. Change-Id: Iff72e53720ba78e84c3d219e69ccd0d6a47c09a0 Reviewed-on: https://dart-review.googlesource.com/47188 Commit-Queue: Jenny Messerly <jmesserly@google.com> Reviewed-by: Vijay Menon <vsm@google.com>
98 lines
2.1 KiB
Dart
98 lines
2.1 KiB
Dart
// Copyright (c) 2012, 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 "package:expect/expect.dart";
|
|
|
|
class A {
|
|
var __PROTO__ = 499;
|
|
var constructor = 1;
|
|
var prototype = 2;
|
|
}
|
|
|
|
// TODO(jmesserly): changed this test to avoid shadowing a field with a getter,
|
|
// which DDC doesn't currently support, see:
|
|
// https://github.com/dart-lang/dev_compiler/issues/52
|
|
class A2 {
|
|
get __PROTO__ => 499;
|
|
get constructor => 1;
|
|
get prototype => 2;
|
|
}
|
|
|
|
class B extends A2 {
|
|
get __PROTO__ => 42;
|
|
get constructor => 3;
|
|
get prototype => 4;
|
|
}
|
|
|
|
class P {
|
|
m() => 42;
|
|
}
|
|
|
|
class C {
|
|
m() => 777;
|
|
static get prototype => new P();
|
|
static get name => 'hello from C.name';
|
|
static void _check(obj) {
|
|
Expect.equals(obj, 'hello');
|
|
check_++;
|
|
}
|
|
|
|
static void as(obj) {
|
|
Expect.equals(obj, 'world');
|
|
as_++;
|
|
}
|
|
|
|
static int as_ = 0;
|
|
static int check_ = 0;
|
|
}
|
|
|
|
// Regression test for https://github.com/dart-lang/sdk/issues/31049
|
|
regress31049() {
|
|
dynamic d = new C();
|
|
C c = d; // implicit cast
|
|
d as C; // explicit cast
|
|
C._check('hello');
|
|
Expect.equals(C.check_, 1);
|
|
C.as('world');
|
|
Expect.equals(C.as_, 1);
|
|
}
|
|
|
|
// Regression test for https://github.com/dart-lang/sdk/issues/31050
|
|
regress31050() {
|
|
Expect.isFalse((C).toString().contains('C.name'), 'should not call C.name');
|
|
Expect.equals(C.name, 'hello from C.name');
|
|
Expect.equals(C.prototype.m(), 42);
|
|
Expect.equals(new C().m(), 777);
|
|
}
|
|
|
|
var name = 42;
|
|
regress31117() {
|
|
Expect.equals(name, 42);
|
|
}
|
|
|
|
main() {
|
|
var a = new A();
|
|
var a2 = new A2();
|
|
var b = new B();
|
|
var list = <dynamic>[a, a2, b];
|
|
for (int i = 0; i < list.length; i++) {
|
|
var proto = list[i].__PROTO__;
|
|
var constructor = list[i].constructor;
|
|
var prototype = list[i].prototype;
|
|
if (i < 2) {
|
|
Expect.equals(499, proto);
|
|
Expect.equals(1, constructor);
|
|
Expect.equals(2, prototype);
|
|
} else {
|
|
Expect.equals(42, proto);
|
|
Expect.equals(3, constructor);
|
|
Expect.equals(4, prototype);
|
|
}
|
|
}
|
|
|
|
regress31049();
|
|
regress31050();
|
|
regress31117();
|
|
}
|