Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: test/mjsunit/regress/regress-1122.js

Issue 7054074: Limit the number of arguments in a function call to 32766. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add regression test Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/parser.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 // Test that we can handle functions with up to 32766 arguments, and that 28 // Test that we can handle function calls with up to 32766 arguments, and
29 // functions with more arguments throw an exception. 29 // that function calls with more arguments throw an exception. Apply a
30 // similar limit to the number of function parameters.
30 31
31 // See http://code.google.com/p/v8/issues/detail?id=1122. 32 // See http://code.google.com/p/v8/issues/detail?id=1122 and
33 // http://code.google.com/p/v8/issues/detail?id=1413.
32 34
33 function function_with_n_args(n) { 35 function function_with_n_params_and_m_args(n, m) {
34 test_prefix = 'prefix '; 36 test_prefix = 'prefix ';
35 test_suffix = ' suffix'; 37 test_suffix = ' suffix';
36 var source = 'test_prefix + (function f('; 38 var source = 'test_prefix + (function f(';
37 for (var arg = 0; arg < n ; arg++) { 39 for (var arg = 0; arg < n ; arg++) {
38 if (arg != 0) source += ','; 40 if (arg != 0) source += ',';
39 source += 'arg' + arg; 41 source += 'arg' + arg;
40 } 42 }
41 source += ') { return arg' + (n - n % 2) / 2 + '; })('; 43 source += ') { return arg' + (n - n % 2) / 2 + '; })(';
42 for (var arg = 0; arg < n ; arg++) { 44 for (var arg = 0; arg < m ; arg++) {
43 if (arg != 0) source += ','; 45 if (arg != 0) source += ',';
44 source += arg; 46 source += arg;
45 } 47 }
46 source += ') + test_suffix'; 48 source += ') + test_suffix';
47 return eval(source); 49 return eval(source);
48 } 50 }
49 51
50 assertEquals('prefix 4000 suffix', function_with_n_args(8000)); 52 assertEquals('prefix 4000 suffix',
51 assertEquals('prefix 9000 suffix', function_with_n_args(18000)); 53 function_with_n_params_and_m_args(8000, 8000));
52 assertEquals('prefix 16000 suffix', function_with_n_args(32000)); 54 assertEquals('prefix 3000 suffix',
55 function_with_n_params_and_m_args(6000, 8000));
56 assertEquals('prefix 5000 suffix',
57 function_with_n_params_and_m_args(10000, 8000));
58 assertEquals('prefix 9000 suffix',
59 function_with_n_params_and_m_args(18000, 18000));
60 assertEquals('prefix 16000 suffix',
61 function_with_n_params_and_m_args(32000, 32000));
62 assertEquals('prefix undefined suffix',
63 function_with_n_params_and_m_args(32000, 10000));
53 64
54 assertThrows("function_with_n_args(35000)"); 65 assertThrows("function_with_n_params_and_m_args(35000, 35000)");
55 assertThrows("function_with_n_args(100000)"); 66 assertThrows("function_with_n_params_and_m_args(100000, 100000)");
67 assertThrows("function_with_n_params_and_m_args(35000, 30000)");
68 assertThrows("function_with_n_params_and_m_args(30000, 35000)");
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698