// 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. import "package:expect/expect.dart"; // Test re-entrant initializer - calls throw StackOverflowError. var trace; var foo = bar; var recursionDepth = 0; get bar { if (recursionDepth > 3) throw "recursed"; recursionDepth++; trace.add(recursionDepth); try { return foo ?? 1; } catch (e) { trace.add(e); } return 42; } void testTopLevel() { trace = []; recursionDepth = 0; var result = foo; Expect.equals(42, result); Expect.equals('1,2,3,4,recursed', trace.join(',')); trace = []; recursionDepth = 0; result = foo; Expect.equals(42, result); Expect.equals('', trace.join(',')); } class X { static var foo = X.bar; static get bar { if (recursionDepth > 3) throw "recursed"; recursionDepth++; trace.add(recursionDepth); try { return foo ?? 1; } catch (e) { trace.add(e); } return 49; } } void testClassStatic() { trace = []; recursionDepth = 0; var result = X.foo; Expect.equals(49, result); Expect.equals('1,2,3,4,recursed', trace.join(',')); trace = []; recursionDepth = 0; result = X.foo; Expect.equals(49, result); Expect.equals('', trace.join(',')); } main() { testTopLevel(); testClassStatic(); }