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