// 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.

// This test verifies that when a late variable might be read prior to its first
// assignment, but the semantics of local functions allow for the possibility
// that the assignment might occur before the read, that there is no
// compile-time error.

import 'package:expect/expect.dart';

// First scenario: the variable is written inside the function, and the read
// happens after the function is created.
void writeInFunction() {
  late int x;
  void f() {
    x = 10;
  }

  f();
  Expect.equals(x, 10);
}

void writeInClosure() {
  late int x;
  var f = () {
    x = 10;
  };
  f();
  Expect.equals(x, 10);
}

// Second scenario: the variable is written outside the function, and the read
// happens inside the function.
void readInFunction() {
  late int x;
  void f() {
    Expect.equals(x, 10);
  }

  x = 10;
  f();
}

void readInClosure() {
  late int x;
  var f = () {
    Expect.equals(x, 10);
  };
  x = 10;
  f();
}

main() {
  writeInFunction();
  writeInClosure();
  readInFunction();
  readInClosure();
}
