| // Copyright (c) 2020, 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. |
| |
| //@dart=2.14 |
| |
| /*member: main:ignore*/ |
| void main() { |
| for (var a in [false, true]) { |
| sink = cannotRecognize(a ? 10 : C()); |
| sink = unspecialized(a ? -1 : 1); |
| sink = otherPositive2(a); |
| sink = shiftBySix(a); |
| sink = shiftByMasked(a, 9); |
| sink = shiftByMasked(a, -9); |
| } |
| |
| sink = cannotConstantFold(); |
| sink = constantFoldPositive(); |
| sink = constantFoldNegative(); |
| test6(); |
| } |
| |
| Object? sink; |
| |
| @pragma('dart2js:noInline') |
| /*spec|canary.member: cannotRecognize:function(thing) { |
| return A._asInt(J.$shru$n(thing, 1)); |
| }*/ |
| /*prod.member: cannotRecognize:function(thing) { |
| return J.$shru$n(thing, 1); |
| }*/ |
| int cannotRecognize(dynamic thing) { |
| return thing >>> 1; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: cannotConstantFold:function() { |
| return B.JSInt_methods.$shru(1, -1); |
| }*/ |
| int cannotConstantFold() { |
| var a = 1; |
| return a >>> -1; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: constantFoldPositive:function() { |
| return 25; |
| }*/ |
| int constantFoldPositive() { |
| var a = 100; |
| return a >>> 2; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: constantFoldNegative:function() { |
| return 3; |
| }*/ |
| int constantFoldNegative() { |
| var a = -1; |
| return a >>> 30; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: unspecialized:function(a) { |
| return B.JSInt_methods.$shru(1, a); |
| }*/ |
| int unspecialized(int a) { |
| return 1 >>> a; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: otherPositive2:function(param) { |
| return B.JSInt_methods._shruOtherPositive$1(1, param ? 1 : 2); |
| }*/ |
| int otherPositive2(bool param) { |
| var a = param ? 1 : 2; |
| return 1 >>> a; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: shiftBySix:function(param) { |
| return (param ? 4294967295 : -1) >>> 6; |
| }*/ |
| int shiftBySix(bool param) { |
| var a = param ? 0xFFFFFFFF : -1; |
| return a >>> 6; |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: shiftByMasked:function(param1, shift) { |
| var a = param1 ? 4294967295 : 0; |
| return a >>> (shift & 31); |
| }*/ |
| int shiftByMasked(bool param1, int shift) { |
| var a = param1 ? 0xFFFFFFFF : 0; |
| return a >>> (shift & 31); |
| } |
| |
| @pragma('dart2js:noInline') |
| /*member: otherPositive6:function(a, b) { |
| return B.JSInt_methods._shruOtherPositive$1(a, b); |
| }*/ |
| int otherPositive6(int a, int b) { |
| return a >>> b; |
| } |
| |
| void test6() { |
| sink = otherPositive6(1, 3); |
| sink = otherPositive6(0, 4); |
| sink = otherPositive6(-1, 2); |
| } |
| |
| class C { |
| /*member: C.>>>:ignore*/ |
| C operator >>>(int i) => this; |
| } |