Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Unified Diff: tests/language/const_qq_test.dart

Issue 1493693002: Make ?? a compile-time constant operator. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Move VM/analyzer parts to separate CLs. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/js_backend/constant_system_javascript.dart ('k') | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/language/const_qq_test.dart
diff --git a/tests/language/const_qq_test.dart b/tests/language/const_qq_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..d1c16422b9fe69b5fd34cb9ef1a1e97b22548806
--- /dev/null
+++ b/tests/language/const_qq_test.dart
@@ -0,0 +1,136 @@
+// Copyright (c) 2015, 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.
+
+// Check that ?? is compile-time constant.
+
+import "package:expect/expect.dart";
+
+const theNull = null;
+const notNull = const Object();
+
+// Top-level const field initializer.
+const test1 = theNull ?? notNull;
+const test2 = notNull ?? theNull;
+const test3 = theNull ?? theNull ?? notNull;
+const test4 = theNull ?? theNull ?? theNull;
+
+class P {
+ final v;
+ const P(this.v);
+}
+
+// Annotation parameter (not checked by test!)
+@P(theNull ?? notNull)
+@P(notNull ?? theNull)
+@P(theNull ?? theNull ?? notNull)
+@P(theNull ?? theNull ?? theNull)
+class C {
+ // Static const field initializer.
+ static const test5 = theNull ?? notNull;
+ static const test6 = notNull ?? theNull;
+ static const test7 = theNull ?? theNull ?? notNull;
+ static const test8 = theNull ?? theNull ?? theNull;
+
+ // (Constructor) parameter defaults.
+ final test9;
+ final test10;
+ final test11;
+ final test12;
+
+ // Const constructor initializer list.
+ final test13;
+ final test14;
+ final test15;
+ final test16;
+ final test17;
+
+ const C(x,
+ [this.test9 = theNull ?? notNull,
+ this.test10 = notNull ?? theNull,
+ this.test11 = theNull ?? theNull ?? notNull,
+ this.test12 = theNull ?? theNull ?? theNull])
+ : test13 = theNull ?? x,
+ test14 = notNull ?? x,
+ test15 = x ?? notNull,
+ test16 = theNull ?? theNull ?? x,
+ test17 = theNull ?? x ?? notNull;
+
+ List methodLocal() {
+ // Method local const variable initializer.
+ const test18 = theNull ?? notNull;
+ const test19 = notNull ?? theNull;
+ const test20 = theNull ?? theNull ?? notNull;
+ const test21 = theNull ?? theNull ?? theNull;
+
+ return const [test18, test19, test20, test21];
+ }
+
+ List expressionLocal() {
+ // Constant expression sub-expression.
+ return const [theNull ?? notNull,
+ notNull ?? theNull,
+ theNull ?? theNull ?? notNull,
+ theNull ?? theNull ?? theNull];
+ }
+}
+
+main() {
+ Expect.identical(notNull, test1, "test1");
+ Expect.identical(notNull, test2, "test2");
+ Expect.identical(notNull, test3, "test3");
+ Expect.identical(theNull, test4, "test4");
+
+ Expect.identical(notNull, C.test5, "test5");
+ Expect.identical(notNull, C.test6, "test6");
+ Expect.identical(notNull, C.test7, "test7");
+ Expect.identical(theNull, C.test8, "test8");
+
+ const c1 = const C(null);
+ Expect.identical(notNull, c1.test9, "test9");
+ Expect.identical(notNull, c1.test10, "test10");
+ Expect.identical(notNull, c1.test11, "test11");
+ Expect.identical(theNull, c1.test12, "test12");
+
+ Expect.identical(theNull, c1.test13, "test13");
+ Expect.identical(notNull, c1.test14, "test14");
+ Expect.identical(notNull, c1.test15, "test15");
+ Expect.identical(theNull, c1.test16, "test16");
+ Expect.identical(notNull, c1.test17, "test17");
+
+ var list = c1.methodLocal();
+ Expect.identical(notNull, list[0], "test18");
+ Expect.identical(notNull, list[1], "test19");
+ Expect.identical(notNull, list[2], "test20");
+ Expect.identical(theNull, list[3], "test21");
+
+ list = c1.expressionLocal();
+ Expect.identical(notNull, list[0], "test22");
+ Expect.identical(notNull, list[1], "test23");
+ Expect.identical(notNull, list[2], "test24");
+ Expect.identical(theNull, list[3], "test25");
+
+ const c2 = const C(42);
+ Expect.identical(notNull, c2.test9, "test26");
+ Expect.identical(notNull, c2.test10, "test27");
+ Expect.identical(notNull, c2.test11, "test28");
+ Expect.identical(theNull, c2.test12, "test29");
+
+ Expect.identical(42 , c2.test13, "test30");
+ Expect.identical(notNull, c2.test14, "test31");
+ Expect.identical(42 , c2.test15, "test32");
+ Expect.identical(42 , c2.test16, "test33");
+ Expect.identical(42 , c2.test17, "test34");
+
+ list = c2.methodLocal();
+ Expect.identical(notNull, list[0], "test35");
+ Expect.identical(notNull, list[1], "test36");
+ Expect.identical(notNull, list[2], "test37");
+ Expect.identical(theNull, list[3], "test38");
+
+ list = c2.expressionLocal();
+ Expect.identical(notNull, list[0], "test39");
+ Expect.identical(notNull, list[1], "test40");
+ Expect.identical(notNull, list[2], "test41");
+ Expect.identical(theNull, list[3], "test42");
+}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/constant_system_javascript.dart ('k') | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698