diff --git a/test/mjsunit/strong/mutually-recursive-funcs.js b/test/mjsunit/strong/mutually-recursive-funcs.js new file mode 100644 index 0000000000..726eed839c --- /dev/null +++ b/test/mjsunit/strong/mutually-recursive-funcs.js @@ -0,0 +1,25 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --strong-mode + +"use strong"; + +function foo(param, fooCount, barCount) { + if (param === 0) + return {'foo': fooCount, 'bar': barCount}; + return bar(param - 1, fooCount + 1, barCount); +} + +function bar(param, fooCount, barCount) { + if (param === 0) + return {'foo': fooCount, 'bar': barCount}; + return foo(param - 1, fooCount, barCount + 1); +} + +(function TestMutuallyRecursiveFunctions() { + let obj = foo(10, 0, 0); + assertEquals(obj.foo, 5); + assertEquals(obj.bar, 5); +})(); diff --git a/test/mjsunit/strong/use-before-var.js b/test/mjsunit/strong/use-before-var.js new file mode 100644 index 0000000000..5155292f84 --- /dev/null +++ b/test/mjsunit/strong/use-before-var.js @@ -0,0 +1,20 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --strong-mode + +function strongFunction() { + "use strong"; + // This should not be a "use before declaration" error, even though the + // variable is defined later (by non-strong code). Rationale: Non-strong code + // is allowed to use var declarations, and the semantics of var declarations + // say that the variable should be usable before the declaration. + return notStrong + 123; +} + +var notStrong = 456; + +(function TestStrongFunctionUsingLaterDefinedNonStrongVar() { + assertEquals(strongFunction(), 579); +})();