| // Copyright (c) 2017, 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.7 |
| |
| // Tests for the heuristics on conditional expression whose condition is a |
| // parameter for which the max, instead of the sum, of the branch sizes is used. |
| |
| /*member: main:[]*/ |
| main() { |
| conditionalField(); |
| conditionalParameter(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Conditional expression on a non-parameter (here a top-level field). The |
| // size of the condition is the sum of the nodes in the conditional expression. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: _method1:[_conditionalField]*/ |
| _method1() => 42; |
| |
| bool _field1; |
| |
| /*member: _conditionalField:[]*/ |
| _conditionalField() { |
| return _field1 |
| ? _method1() + _method1() + _method1() |
| : _method1() + _method1() + _method1(); |
| } |
| |
| /*member: conditionalField:[]*/ |
| @pragma('dart2js:noInline') |
| conditionalField() { |
| _field1 = false; |
| _conditionalField(); |
| _field1 = true; |
| _conditionalField(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Conditional expression on a parameter. The size of the condition is the |
| // max of the branches + the condition itself. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: _method2:[conditionalParameter]*/ |
| _method2() => 42; |
| |
| /*member: _conditionalParameter:[conditionalParameter]*/ |
| _conditionalParameter(bool o) { |
| return o |
| ? _method2() + _method2() + _method2() |
| : _method2() + _method2() + _method2(); |
| } |
| |
| /*member: conditionalParameter:[]*/ |
| @pragma('dart2js:noInline') |
| conditionalParameter() { |
| _conditionalParameter(true); |
| _conditionalParameter(false); |
| } |