diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/escape-analysis-rest-parameters.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/escape-analysis-rest-parameters.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/escape-analysis-rest-parameters.js b/deps/v8/test/mjsunit/compiler/escape-analysis-rest-parameters.js new file mode 100644 index 0000000000..2ac1253a18 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/escape-analysis-rest-parameters.js @@ -0,0 +1,31 @@ +// Copyright 2018 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: --allow-natives-syntax + +// Test variable index access to rest parameters +// with up to 2 elements. +(function testRestParametersVariableIndex() { + function g(...args) { + let s = 0; + for (let i = 0; i < args.length; ++i) s += args[i]; + return s; + } + + function f(x, y) { + // (a) args[i] is dead code since args.length is 0. + const a = g(); + // (b) args[i] always yields the first element. + const b = g(x); + // (c) args[i] can yield either x or y. + const c = g(x, y); + return a + b + c; + } + + assertEquals(4, f(1, 2)); + assertEquals(5, f(2, 1)); + %OptimizeFunctionOnNextCall(f); + assertEquals(4, f(1, 2)); + assertEquals(5, f(2, 1)); +})(); |