[ES6] Implement tail calls in the LLInt and Baseline JIT
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / tail-calls-dont-overwrite-live-stack.js
1 "use strict";
2
3 function tail(a, b) { }
4 noInline(tail);
5
6 var obj = {
7     method: function (x) {
8         return tail(x, x);
9     },
10
11     get fromNative() { return tail(0, 0); }
12 };
13 noInline(obj.method);
14
15 function getThis(x) { return this; }
16 noInline(getThis);
17
18 for (var i = 0; i < 10000; ++i) {
19     var that = getThis(obj.method(42));
20
21     if (!Object.is(that, undefined))
22         throw new Error("Wrong 'this' value in call, expected undefined but got " + that);
23
24     that = getThis(obj.method(...[42]));
25     if (!Object.is(that, undefined))
26         throw new Error("Wrong 'this' value in varargs call, expected undefined but got " + that);
27
28     if (!Object.is(obj.fromNative, undefined))
29         throw new Error("Wrong 'fromNative' value, expected undefined but got " + obj.fromNative);
30 }