1// Copyright 2013 the V8 project authors. All rights reserved. 2// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions 6// are met: 7// 1. Redistributions of source code must retain the above copyright 8// notice, this list of conditions and the following disclaimer. 9// 2. Redistributions in binary form must reproduce the above copyright 10// notice, this list of conditions and the following disclaimer in the 11// documentation and/or other materials provided with the distribution. 12// 13// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 24description( 25"This tests that exceptions are thrown correctly." 26); 27 28// A large function containing a try/catch - this prevent DFG compilation. 29function doesntDFGCompile() 30{ 31 function callMe() {}; 32 33 callMe(0,1,2,3,4,5,6,7,8,9); 34 callMe(0,1,2,3,4,5,6,7,8,9); 35 callMe(0,1,2,3,4,5,6,7,8,9); 36 callMe(0,1,2,3,4,5,6,7,8,9); 37 callMe(0,1,2,3,4,5,6,7,8,9); 38 callMe(0,1,2,3,4,5,6,7,8,9); 39 callMe(0,1,2,3,4,5,6,7,8,9); 40 callMe(0,1,2,3,4,5,6,7,8,9); 41 callMe(0,1,2,3,4,5,6,7,8,9); 42 callMe(0,1,2,3,4,5,6,7,8,9); 43 44 callMe(0,1,2,3,4,5,6,7,8,9); 45 callMe(0,1,2,3,4,5,6,7,8,9); 46 callMe(0,1,2,3,4,5,6,7,8,9); 47 callMe(0,1,2,3,4,5,6,7,8,9); 48 callMe(0,1,2,3,4,5,6,7,8,9); 49 callMe(0,1,2,3,4,5,6,7,8,9); 50 callMe(0,1,2,3,4,5,6,7,8,9); 51 callMe(0,1,2,3,4,5,6,7,8,9); 52 callMe(0,1,2,3,4,5,6,7,8,9); 53 callMe(0,1,2,3,4,5,6,7,8,9); 54 55 callMe(0,1,2,3,4,5,6,7,8,9); 56 callMe(0,1,2,3,4,5,6,7,8,9); 57 callMe(0,1,2,3,4,5,6,7,8,9); 58 callMe(0,1,2,3,4,5,6,7,8,9); 59 callMe(0,1,2,3,4,5,6,7,8,9); 60 callMe(0,1,2,3,4,5,6,7,8,9); 61 callMe(0,1,2,3,4,5,6,7,8,9); 62 callMe(0,1,2,3,4,5,6,7,8,9); 63 callMe(0,1,2,3,4,5,6,7,8,9); 64 callMe(0,1,2,3,4,5,6,7,8,9); 65 66 callMe(0,1,2,3,4,5,6,7,8,9); 67 callMe(0,1,2,3,4,5,6,7,8,9); 68 callMe(0,1,2,3,4,5,6,7,8,9); 69 callMe(0,1,2,3,4,5,6,7,8,9); 70 callMe(0,1,2,3,4,5,6,7,8,9); 71 callMe(0,1,2,3,4,5,6,7,8,9); 72 callMe(0,1,2,3,4,5,6,7,8,9); 73 callMe(0,1,2,3,4,5,6,7,8,9); 74 callMe(0,1,2,3,4,5,6,7,8,9); 75 callMe(0,1,2,3,4,5,6,7,8,9); 76 77 callMe(0,1,2,3,4,5,6,7,8,9); 78 callMe(0,1,2,3,4,5,6,7,8,9); 79 callMe(0,1,2,3,4,5,6,7,8,9); 80 callMe(0,1,2,3,4,5,6,7,8,9); 81 callMe(0,1,2,3,4,5,6,7,8,9); 82 callMe(0,1,2,3,4,5,6,7,8,9); 83 callMe(0,1,2,3,4,5,6,7,8,9); 84 callMe(0,1,2,3,4,5,6,7,8,9); 85 callMe(0,1,2,3,4,5,6,7,8,9); 86 callMe(0,1,2,3,4,5,6,7,8,9); 87 88 try { 89 return 1; 90 } catch (e) { 91 return 2; 92 } 93}; 94 95function test(x) 96{ 97 return x(); 98}; 99 100// warmup the test method 101for (i = 0; i < 200; ++i) 102 test(doesntDFGCompile); 103 104// 105var caughtException = false; 106try { 107 test(); 108} catch (e) { 109 caughtException = true; 110} 111 112shouldBe("caughtException", 'true'); 113var successfullyParsed = true; 114