// Copyright (c) 2021, 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 while statements for const functions. // SharedOptions=--enable-experiment=const-functions import "package:expect/expect.dart"; const var1 = fn(2); // ^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE const var2 = fn(3); // ^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE int fn(int a) { int b = a; int i = 0; while (i < 2) { b += a; i++; } return b; } const var3 = fn1(2); // ^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE const var4 = fn1(3); // ^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE int fn1(int a) { int b = a; while (true) { b *= 3; if (b > 10) return b; } } const var5 = fnContinue(); // ^^^^^^^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE int fnContinue() { int a = 0; int i = 0; while (i < 5) { if (i % 2 == 1) { i++; continue; } a += i; i++; } return a; } const var6 = fnBreak(2); // ^^^^^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE const var7 = fnBreak(3); // ^^^^^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE int fnBreak(int a) { int b = a; int i = 0; while (i < 2) { if (b == 2) break; b += a; i++; } return b; } const var8 = fnNestedWhile(); // ^^^^^^^^^^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE int fnNestedWhile() { int a = 0; while (true) { while (true) { break; } return 1; } } const var9 = fnBreakLabel(); // ^^^^^^^^^^^^^^ // [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE int fnBreakLabel() { foo: while (true) { while (true) { break foo; } } return 3; } void main() { Expect.equals(var1, 6); Expect.equals(var2, 9); Expect.equals(var3, 18); Expect.equals(var4, 27); Expect.equals(var5, 6); Expect.equals(var6, 2); Expect.equals(var7, 9); Expect.equals(var8, 1); Expect.equals(var9, 3); }