Files
sdk/tests/language/switch_case_test.dart
T
paulberry@google.com 099f24cf0e In constant evaluation, properly handle redirecting factory constructors.
In order to unit test that this change doesn't regress the handling of
"const Symbol(...)", it was necessary to expand TestTypeProvider's
Symbol class to include the Symbol constructor.

Note: with this fix, analyzer detected a previously unknown flaw in
tests/language/switch_case_test.dart: class D didn't implement a
getter for x.  Test updated accordingly.

This change breaks test lib/_internal/compiler/samples/jsonify/jsonify
by changing analyzer's handling of bool.fromEnvironment().  I plan to
address this in a future changelist.

BUG=dartbug.com/17209
R=brianwilkerson@google.com, floitsch@google.com

Review URL: https://codereview.chromium.org//261403004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35853 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-07 16:27:03 +00:00

48 lines
1.1 KiB
Dart

// Copyright (c) 2014, 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 {
const A();
const factory A.B() = B;
const factory A.C() = C;
const factory A.C2() = D;
}
class B implements A {
const B();
operator ==(o) => true; /// 00: compile-time error
}
class C implements A {
final int x;
const C() : x = 0;
const C.fromD() : x = 1;
}
class D implements C {
int get x => 0;
const factory D() = C.fromD;
}
main() {
switch (new B()) {
case const A.B(): Expect.fail("bad switch"); break; /// 00: continued
}
switch (new C()) {
case const C(): Expect.fail("bad switch"); break;
case const A.C(): Expect.fail("bad switch"); break;
case const A.C2(): Expect.fail("bad switch"); break;
case const A(): Expect.fail("bad switch"); break; /// 01: compile-time error
}
switch (new A()) {
case const A(): Expect.fail("bad switch"); break;
case const A.B(): Expect.fail("bad switch"); break; /// 02: compile-time error
}
}