// Copyright (c) 2019, 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. // Tests that a dynamic type does not affect whether an expression is // potentially constant, the actual type of the value of an experssion // only matters if the expression is evaluated as a constant. main() { Object c = C(); T.test01(c); T.test02(c, c); T.test03(c, c); T.test04(c, c); T.test05(c, c); T.test06(c, c); T.test07(c, c); T.test08(c, c); T.test09(c, c); T.test10(c, c); //# sh3: ok T.test11(c, c); T.test12(c, c); T.test13(c, c); T.test14(c); T.test15(c, c); T.test16(c, c); T.test17(c, c); T.test18(c, c); T.test19(c); } class T { const T(Object o); const T.test01(dynamic x) : this(-x); const T.test02(dynamic x, dynamic y) : this(x + y); const T.test03(dynamic x, dynamic y) : this(x - y); const T.test04(dynamic x, dynamic y) : this(x * y); const T.test05(dynamic x, dynamic y) : this(x / y); const T.test06(dynamic x, dynamic y) : this(x ~/ y); const T.test07(dynamic x, dynamic y) : this(x % y); const T.test08(dynamic x, dynamic y) : this(x << y); const T.test09(dynamic x, dynamic y) : this(x >> y); const T.test10(dynamic x, dynamic y) : this(x >>> y); //# sh3: continued const T.test11(dynamic x, dynamic y) : this(x & y); const T.test12(dynamic x, dynamic y) : this(x | y); const T.test13(dynamic x, dynamic y) : this(x ^ y); const T.test14(dynamic x) : this(~x); const T.test15(dynamic x, dynamic y) : this(x < y); const T.test16(dynamic x, dynamic y) : this(x > y); const T.test17(dynamic x, dynamic y) : this(x <= y); const T.test18(dynamic x, dynamic y) : this(x >= y); const T.test19(dynamic x) : this(x.length); } class C { const C(); dynamic operator -() => this; dynamic operator +(dynamic other) => this; dynamic operator -(dynamic other) => this; dynamic operator *(dynamic other) => this; dynamic operator /(dynamic other) => this; dynamic operator ~/(dynamic other) => this; dynamic operator %(dynamic other) => this; dynamic operator <<(dynamic other) => this; dynamic operator >>(dynamic other) => this; dynamic operator >>>(dynamic other) => this; //# sh3: continued dynamic operator &(dynamic other) => this; dynamic operator |(dynamic other) => this; dynamic operator ^(dynamic other) => this; dynamic operator ~() => this; dynamic operator <(dynamic other) => this; dynamic operator >(dynamic other) => this; dynamic operator <=(dynamic other) => this; dynamic operator >=(dynamic other) => this; dynamic get length => this; }