[strong] Adding regression cases which should always continue working.

1) Mutually recursive functions
2) Strong code using non-strong var before declaration.

These test cases ensure that we don't accidentally kill these wanted behaviors
when adding restrictions to strong mode.

BUG=

Review URL: https://codereview.chromium.org/927143002

Cr-Commit-Position: refs/heads/master@{#26671}
This commit is contained in:
marja 2015-02-16 09:57:31 -08:00 committed by Commit bot
parent b7458cfa5e
commit 868470ddc9
2 changed files with 45 additions and 0 deletions

View File

@ -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);
})();

View File

@ -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);
})();