Files
sdk/tests/language/const_map3_test.dart
T
paulberry@google.com f49b1f0caf Check const map literal keys and switch case exprs using type of constant.
The following type rules are defined based on the actual type of the
const object:

- CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
- INCONSISTENT_CASE_EXPRESSION_TYPES
- CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS

Previously, we were using the propagated type for the case expression
checks, and the static type for the const map check.

BUG=dartbug.com/11697
R=brianwilkerson@google.com, scheglov@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35723 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-03 17:14:08 +00:00

25 lines
612 B
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 {
static const b = const B();
}
class B implements A {
const B();
operator ==(o) => true; /// 00: compile-time error
}
main() {
// It is a compile-time error if the key type overrides operator ==.
var m = const { A.b: 42 };
Expect.equals(42, m[const B()]);
m = const { "foo": 99, A.b: 499 };
Expect.equals(499, m[const B()]);
}