// Copyright (c) 2016, 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'; class Base { int constant1000() => 1000; } class Foo extends Base { final int base; Foo(this.base); nestedAdderFunction(a, b, c, d, e) { var result = a + b; return () { var result2 = c + d; return () { return base + result + result2 + e; }; }; } nestedAdderFunction2(a, b, c, d, e) { var result = a + b; return () { var base = super.constant1000; var result2 = c + d; return () { return base() + result + result2 + e; }; }; } } nestedAdderFunction(a, b, c, d, e) { var result = a + b; return () { var result2 = c + d; return () { return result + result2 + e; }; }; } main() { Expect.isTrue(nestedAdderFunction(1, 2, 3, 4, 5)()() == 15); var foo = new Foo(100); Expect.isTrue(foo.nestedAdderFunction(1, 2, 3, 4, 5)()() == 115); Expect.isTrue(foo.nestedAdderFunction2(1, 2, 3, 4, 5)()() == 1015); var funs = []; for (int i = 0; i < 3; i++) { funs.add(() => i); } Expect.isTrue((funs[0]() + funs[1]() + funs[2]()) == 3); var funs2 = []; for (var i in [0, 1, 2]) { funs2.add(() => i); } Expect.isTrue((funs2[0]() + funs2[1]() + funs2[2]()) == 3); }