blob: d09eb068666c2863710bb163a542103d6e94d7f4 [file] [log] [blame]
// 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 erroneous closure situations with const functions.
// SharedOptions=--enable-experiment=const-functions
import "package:expect/expect.dart";
var varVariable = 1;
const var1 = fn();
// ^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] Constant evaluation error:
int fn() {
return varVariable;
}
final finalVariable = 1;
const var2 = fn2();
// ^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// [cfe] Constant evaluation error:
int fn2() {
return finalVariable;
}
const var3 = fn3();
// ^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
int fn3() {
int innerFn() {
return x;
// ^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
}
const x = 0;
// ^
// [cfe] Can't declare 'x' because it was already used in this scope.
return innerFn();
}
const var4 = fn4();
// ^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
int fn4() {
var a = () {
return x;
// ^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
};
var x = 1;
// ^
// [cfe] Can't declare 'x' because it was already used in this scope.
return a();
}
const var5 = fn5(1);
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
fn5(a) {
var a = () => a;
// ^
// [cfe] Can't declare 'a' because it was already used in this scope.
// ^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
return a();
}
const x = 0;
void fn6() {
var x = 1;
int a() => x;
const z = a();
// ^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
// ^
// [cfe] Constant evaluation error:
}