OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are met: |
7 // 1. Redistributions of source code must retain the above copyright | 7 // 1. Redistributions of source code must retain the above copyright |
8 // notice, this list of conditions and the following disclaimer. | 8 // notice, this list of conditions and the following disclaimer. |
9 // 2. Redistributions in binary form must reproduce the above copyright | 9 // 2. Redistributions in binary form must reproduce the above copyright |
10 // notice, this list of conditions and the following disclaimer in the | 10 // notice, this list of conditions and the following disclaimer in the |
11 // documentation and/or other materials provided with the distribution. | 11 // documentation and/or other materials provided with the distribution. |
12 // | 12 // |
13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y | 13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y |
14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 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 AN
Y | 16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y |
17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 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 O
N | 19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N |
20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 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 | 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. | 22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 | 23 |
24 description('Test that when the stack overflows, the exception goes to the last
frame before the overflow'); | 24 description('Test that if an arrity check causes a stack overflow, the exception
goes to the right catch'); |
25 | 25 |
26 var level = 0; | 26 function funcWith20Args(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, |
27 var stackLevel = 0; | 27 arg9, arg10, arg11, arg12, arg13, arg14, arg15, |
28 var gotWrongCatch = false; | 28 arg16, arg17, arg18, arg19, arg20) |
| 29 { |
| 30 debug("ERROR: Shouldn't arrive in 20 arg function!"); |
| 31 } |
| 32 |
| 33 var gotRightCatch = false, gotWrongCatch1 = false, gotWrongCatch2 = false; |
29 | 34 |
30 function test1() | 35 function test1() |
31 { | 36 { |
32 var myLevel = level; | |
33 var dummy; | |
34 | |
35 try { | |
36 level = level + 1; | |
37 // Dummy code to make this funciton different from test2() | |
38 dummy = level * level + 1; | |
39 if (dummy == 0) | |
40 debug('Should never get here!!!!'); | |
41 } catch(err) { | |
42 gotWrongCatch = true; | |
43 } | |
44 | |
45 try { | 37 try { |
46 test2(); | 38 test2(); |
47 } catch(err) { | 39 } catch (err) { |
48 stackLevel = myLevel; | 40 // Should get here because of stack overflow, |
| 41 // now cause a stack overflow exception due to arrity processing |
| 42 try { |
| 43 var dummy = new RegExp('a|b|c'); |
| 44 } catch(err) { |
| 45 gotWrongCatch1 = true; |
| 46 } |
| 47 |
| 48 try { |
| 49 funcWith20Args(1, 2, 3); |
| 50 } catch (err2) { |
| 51 gotRightCatch = true; |
| 52 } |
49 } | 53 } |
50 } | 54 } |
51 | 55 |
52 function test2() | 56 function test2() |
53 { | 57 { |
54 var myLevel = level; | |
55 | |
56 // Dummy code to make this funciton different from test1() | |
57 if (gotWrongCatch) | |
58 debug('Should never get here!!!!'); | |
59 | |
60 try { | 58 try { |
61 level = level + 1; | 59 var dummy = new Date(); |
62 } catch(err) { | 60 } catch(err) { |
63 gotWrongCatch = true; | 61 gotWrongCatch2 = true; |
64 } | 62 } |
65 | 63 |
66 try { | 64 try { |
67 test1(); | 65 test1(); |
68 } catch(err) { | 66 } catch (err) { |
69 stackLevel = myLevel; | 67 // Should get here because of stack overflow, |
| 68 // now cause a stack overflow exception due to arrity processing |
| 69 try { |
| 70 funcWith20Args(1, 2, 3, 4, 5, 6); |
| 71 } catch (err2) { |
| 72 gotRightCatch = true; |
| 73 } |
70 } | 74 } |
71 } | 75 } |
72 | 76 |
73 test1(); | 77 test1(); |
74 | 78 |
75 shouldBeFalse("gotWrongCatch"); | 79 shouldBeTrue("gotRightCatch"); |
76 shouldBe("(stackLevel)", "(level - 1)"); | 80 shouldBeFalse("gotWrongCatch1"); |
| 81 shouldBeFalse("gotWrongCatch2"); |
OLD | NEW |