1394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Copyright 2011 the V8 project authors. All rights reserved. 2394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Redistribution and use in source and binary forms, with or without 3394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// modification, are permitted provided that the following conditions are 4394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// met: 5394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// 6394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// * Redistributions of source code must retain the above copyright 7394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// notice, this list of conditions and the following disclaimer. 8394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// * Redistributions in binary form must reproduce the above 9394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// copyright notice, this list of conditions and the following 10394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// disclaimer in the documentation and/or other materials provided 11394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// with the distribution. 12394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// * Neither the name of Google Inc. nor the names of its 13394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// contributors may be used to endorse or promote products derived 14394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// from this software without specific prior written permission. 15394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// 16394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 28394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Flags: --builtins-in-stack-traces 29394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 30394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 31394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Poisonous object that throws a reference error if attempted converted to 32394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// a primitive values. 33394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvar thrower = { valueOf: function() { FAIL; }, 34394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com toString: function() { FAIL; } }; 35394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 36394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Tests that a native constructor function is included in the 37394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// stack trace. 38394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comfunction testTraceNativeConstructor(nativeFunc) { 39394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com var nativeFuncName = nativeFunc.name; 40394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com try { 41394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com new nativeFunc(thrower); 42394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertUnreachable(nativeFuncName); 43394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } catch (e) { 44394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); 45394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 46394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 47394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 48394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Tests that a native conversion function is included in the 49394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// stack trace. 50394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comfunction testTraceNativeConversion(nativeFunc) { 51394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com var nativeFuncName = nativeFunc.name; 52394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com try { 53394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com nativeFunc(thrower); 54394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertUnreachable(nativeFuncName); 55394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } catch (e) { 56394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); 57394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 58394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 59394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 60394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 61394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comfunction testNotOmittedBuiltin(throwing, included) { 62394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com try { 63394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com throwing(); 64394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertUnreachable(included); 65394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } catch (e) { 66394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com assertTrue(e.stack.indexOf(included) >= 0, included); 67394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 68394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 69394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 70394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 71394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConversion(String); // Does ToString on argument. 72394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConversion(Number); // Does ToNumber on argument. 73394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConversion(RegExp); // Does ToString on argument. 74394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 75394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConstructor(String); // Does ToString on argument. 76394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConstructor(Number); // Does ToNumber on argument. 77394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConstructor(RegExp); // Does ToString on argument. 78394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestTraceNativeConstructor(Date); // Does ToNumber on argument. 79394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 80394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// QuickSort has builtins object as receiver, and is non-native 81394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// builtin. Should not be omitted with the --builtins-in-stack-traces flag. 82394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comtestNotOmittedBuiltin(function(){ [thrower, 2].sort(function (a,b) { 83394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com (b < a) - (a < b); }); 84394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com }, "QuickSort"); 85394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 86394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Not omitted even though ADD from runtime.js is a non-native builtin. 87f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.orgtestNotOmittedBuiltin(function(){ thrower + 2; }, "ADD"); 88