// Copyright (c) 2024, 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. // Generally, we can replace `a - b` with `a` when `a` is a number and `b` is // zero. // // The exception is when both operands are negative zero: `(-0.0) - (-0.0)` // results in a non-negative zero. // // With web numbers, the value `-0.0` is recognized as an integer so can occur // as a constant right operand, usually by constant-folding. /*member: main:ignore*/ void main() { for (final a in [ C(), 0, -0.0, 1, -1, 1.1, -1.1, double.nan, double.infinity, double.negativeInfinity, ]) { sink.add(whenDynamic(a)); if (a is int) { sink.add(whenInt1(a)); sink.add(whenInt2(a)); } if (a is double) { sink.add(whenDouble1(a)); sink.add(whenDouble2(a)); } if (a is num) { sink.add(whenNum1(a)); sink.add(whenNum2(a)); sink.add(whenNum3(a)); } } } final List sink = []; @pragma('dart2js:never-inline') /*member: whenDynamic:function(thing) { return J.$sub$n(thing, 0); }*/ whenDynamic(dynamic thing) { return thing - 0; } @pragma('dart2js:never-inline') /*member: whenInt1:function(a) { return a; }*/ int whenInt1(int a) { return a - 0; } @pragma('dart2js:never-inline') /*member: whenInt2:function(a) { return a - -0.0; }*/ int whenInt2(int a) { return a - (-0); } @pragma('dart2js:never-inline') /*member: whenDouble1:function(a) { return a; }*/ double whenDouble1(double a) { return a - 0; } @pragma('dart2js:never-inline') /*member: whenDouble2:function(a) { return a - -0.0; }*/ double whenDouble2(double a) { return a - (-0.0); } @pragma('dart2js:never-inline') /*member: whenNum1:function(a) { return a; }*/ num whenNum1(num a) { return a - 0; } @pragma('dart2js:never-inline') /*member: whenNum2:function(a) { return a - -0.0; }*/ num whenNum2(num a) { return a - (-0); } @pragma('dart2js:never-inline') /*member: whenNum3:function(a) { return a - -0.0; }*/ num whenNum3(num a) { return a - (-0.0); } class C { /*member: C.-:ignore*/ C operator -(int i) => this; }