1d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// Copyright 2011 the V8 project authors. All rights reserved. 2d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// Redistribution and use in source and binary forms, with or without 3d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// modification, are permitted provided that the following conditions are 4d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// met: 5d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 6d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// * Redistributions of source code must retain the above copyright 7d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// notice, this list of conditions and the following disclaimer. 8d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// * Redistributions in binary form must reproduce the above 9d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// copyright notice, this list of conditions and the following 10d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// disclaimer in the documentation and/or other materials provided 11d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// with the distribution. 12d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// * Neither the name of Google Inc. nor the names of its 13d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// contributors may be used to endorse or promote products derived 14d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// from this software without specific prior written permission. 15d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 16d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 28e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org// Test that we can handle function calls with up to 32766 arguments, and 29e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org// that function calls with more arguments throw an exception. Apply a 30e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org// similar limit to the number of function parameters. 31d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 32e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org// See http://code.google.com/p/v8/issues/detail?id=1122 and 33e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org// http://code.google.com/p/v8/issues/detail?id=1413. 34d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 35e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgfunction function_with_n_params_and_m_args(n, m) { 36d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com test_prefix = 'prefix '; 37d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com test_suffix = ' suffix'; 38d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com var source = 'test_prefix + (function f('; 39d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com for (var arg = 0; arg < n ; arg++) { 40d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com if (arg != 0) source += ','; 41d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com source += 'arg' + arg; 42d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com } 43d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com source += ') { return arg' + (n - n % 2) / 2 + '; })('; 44e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org for (var arg = 0; arg < m ; arg++) { 45d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com if (arg != 0) source += ','; 46d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com source += arg; 47d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com } 48d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com source += ') + test_suffix'; 49d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com return eval(source); 50d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com} 51d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 52e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgassertEquals('prefix 4000 suffix', 53e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org function_with_n_params_and_m_args(8000, 8000)); 54e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgassertEquals('prefix 3000 suffix', 55e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org function_with_n_params_and_m_args(6000, 8000)); 56e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgassertEquals('prefix 5000 suffix', 57e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org function_with_n_params_and_m_args(10000, 8000)); 58e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgassertEquals('prefix 9000 suffix', 59e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org function_with_n_params_and_m_args(18000, 18000)); 60e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgassertEquals('prefix 16000 suffix', 61e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org function_with_n_params_and_m_args(32000, 32000)); 62e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgassertEquals('prefix undefined suffix', 63e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org function_with_n_params_and_m_args(32000, 10000)); 64d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 654c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgassertThrows("function_with_n_params_and_m_args(66000, 30000)"); 664c54a2aa3c7806f38af0c7dfde22395232ebdff7jkummerow@chromium.orgassertThrows("function_with_n_params_and_m_args(30000, 66000)"); 67