[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:
parent
b7458cfa5e
commit
868470ddc9
25
test/mjsunit/strong/mutually-recursive-funcs.js
Normal file
25
test/mjsunit/strong/mutually-recursive-funcs.js
Normal 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);
|
||||
})();
|
20
test/mjsunit/strong/use-before-var.js
Normal file
20
test/mjsunit/strong/use-before-var.js
Normal 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);
|
||||
})();
|
Loading…
Reference in New Issue
Block a user