From: ossy@webkit.org Date: Wed, 1 Feb 2012 10:00:36 +0000 (+0000) Subject: Implement Error.stack X-Git-Tag: 070512121124~14048 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0d2b61115a9f13a362923f37266774915924900c;p=profile%2Fivi%2Fwebkit-efl.git Implement Error.stack https://bugs.webkit.org/show_bug.cgi?id=66994 Unreviewed, rolling out r106407. Source/JavaScriptCore: * JavaScriptCore.exp: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * interpreter/AbstractPC.cpp: (JSC::AbstractPC::AbstractPC): * interpreter/Interpreter.cpp: (JSC::Interpreter::throwException): * interpreter/Interpreter.h: (JSC): (Interpreter): * jsc.cpp: (GlobalObject::finishCreation): * parser/Parser.h: (JSC::::parse): * runtime/CommonIdentifiers.h: * runtime/Error.cpp: (JSC::addErrorInfo): * runtime/Error.h: (JSC): LayoutTests: * fast/js/exception-properties-expected.txt: * fast/js/script-tests/exception-properties.js: * fast/js/script-tests/stack-trace.js: Removed. * fast/js/stack-trace-expected.txt: Removed. * fast/js/stack-trace.html: Removed. * platform/chromium/test_expectations.txt: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@106454 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 45174fc..1fffb4a 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,17 @@ +2012-02-01 Csaba Osztrogonác + + Implement Error.stack + https://bugs.webkit.org/show_bug.cgi?id=66994 + + Unreviewed, rolling out r106407. + + * fast/js/exception-properties-expected.txt: + * fast/js/script-tests/exception-properties.js: + * fast/js/script-tests/stack-trace.js: Removed. + * fast/js/stack-trace-expected.txt: Removed. + * fast/js/stack-trace.html: Removed. + * platform/chromium/test_expectations.txt: + 2012-02-01 Yuzo Fujishima [Chromium] Unreviewed test expectaion change. diff --git a/LayoutTests/fast/js/exception-properties-expected.txt b/LayoutTests/fast/js/exception-properties-expected.txt index 5363e04..0803670 100644 --- a/LayoutTests/fast/js/exception-properties-expected.txt +++ b/LayoutTests/fast/js/exception-properties-expected.txt @@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE PASS enumerableProperties(error) is [] -PASS enumerableProperties(nativeError) is ["line", "sourceURL", "stack"] +PASS enumerableProperties(nativeError) is ["line", "sourceURL"] PASS Object.getPrototypeOf(nativeError).name is "RangeError" PASS Object.getPrototypeOf(nativeError).message is "" PASS successfullyParsed is true diff --git a/LayoutTests/fast/js/script-tests/exception-properties.js b/LayoutTests/fast/js/script-tests/exception-properties.js index 19eb345..c2f60da 100644 --- a/LayoutTests/fast/js/script-tests/exception-properties.js +++ b/LayoutTests/fast/js/script-tests/exception-properties.js @@ -16,7 +16,7 @@ try { var error = new Error("message"); shouldBe('enumerableProperties(error)', '[]'); - shouldBe('enumerableProperties(nativeError)', '["line", "sourceURL", "stack"]'); + shouldBe('enumerableProperties(nativeError)', '["line", "sourceURL"]'); shouldBe('Object.getPrototypeOf(nativeError).name', '"RangeError"'); shouldBe('Object.getPrototypeOf(nativeError).message', '""'); diff --git a/LayoutTests/fast/js/script-tests/stack-trace.js b/LayoutTests/fast/js/script-tests/stack-trace.js deleted file mode 100644 index 4d132f4..0000000 --- a/LayoutTests/fast/js/script-tests/stack-trace.js +++ /dev/null @@ -1,64 +0,0 @@ -description( -'This test checks stack trace corectness in special cases.' -); - -function printStack(stackTrace) { - debug("--> Stack Trace:") - var length = Math.min(stackTrace.length, 100); - for (var i = 0; i < length; i++) - debug(" " + i + " " + stackTrace[i].substring(0, stackTrace[i].indexOf('file:')) + stackTrace[i].substring(stackTrace[i].lastIndexOf('/')+1)); - - debug(''); -} - -function hostThrower() { Element.prototype.appendChild.call({ }, [{ }]); } -function callbacker(f) { [0].map(f); } -function outer(errorName) { inner(errorName); } -function inner(errorName) { throw new Error("Error in " + errorName); } -function evaler(code) { eval(code); } -function normalOuter() { normalInner(); } -function normalInner() { if(thisVarDoesntExist) failIfTrue("shouldFailBeforeThis") }; -function scripterInner() { htmlInner(); } -function scripterOuter() { htmlOuter(); } - // Expected functions in stack trace -// Normal Case -try { normalOuter() } catch (e) { printStack(e.stack) } // normalOuter -> normalInner - -// Eval Case -try { evaler("inner('inner eval');"); } catch (e) { printStack(e.stack) } // evaler -> eval -> inner -try { evaler("outer('outer eval');"); } catch (e) { printStack(e.stack) } // evaler -> eval -> outer -> inner - -// Function Callback Case -try { callbacker(inner('inner map')); } catch (e) { printStack(e.stack); } // callbacker -> map -> inner -try { callbacker(outer('outer map')); } catch (e) { printStack(e.stack); } // callbacker -> map -> outer -> inner - -// Host Code Case -try { hostThrower(); } catch (e) { printStack(e.stack); } // hostThrower - -try { scripterInner(); } catch (e) { printStack(e.stack) } // program -> scripter -> inner -try { scripterOuter(); } catch (e) { printStack(e.stack) } // program -> scripter -> outer -> inner - -function selfRecursive1() { - selfRecursive1(); -} - -try { selfRecursive1(); } catch (e) { printStack(e.stack) } // selfRecursive1 -> selfRecursive1 -> selfRecursive1 -> selfRecursive1 ... - -function selfRecursive2() { - // A little work to make the DFG kick in - for (var i = 0; i < 10; i++) { - if (i == 9) - selfRecursive2(); - } -} - -try { selfRecursive2(); } catch (e) { printStack(e.stack) } // selfRecursive2 -> selfRecursive2 -> selfRecursive2 -> selfRecursive2 ... - -function selfRecursive3() { - eval("selfRecursive3()"); -} - -try { selfRecursive3(); } catch (e) { printStack(e.stack) } // selfRecursive3 -> eval -> selfRecursive3 -> eval ... - - -successfullyParsed = true; diff --git a/LayoutTests/fast/js/stack-trace-expected.txt b/LayoutTests/fast/js/stack-trace-expected.txt deleted file mode 100644 index 879d702..0000000 --- a/LayoutTests/fast/js/stack-trace-expected.txt +++ /dev/null @@ -1,354 +0,0 @@ -This test checks stack trace corectness in special cases. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - ---> Stack Trace: - 0 normalInner at stack-trace.js:20 - 1 normalOuter at stack-trace.js:19 - 2 global code at stack-trace.js:25 - ---> Stack Trace: - 0 inner at stack-trace.js:17 - 1 eval - 2 evaler at stack-trace.js:18 - 3 global code at stack-trace.js:28 - ---> Stack Trace: - 0 inner at stack-trace.js:17 - 1 outer at stack-trace.js:16 - 2 eval - 3 evaler at stack-trace.js:18 - 4 global code at stack-trace.js:29 - ---> Stack Trace: - 0 inner at stack-trace.js:17 - 1 global code at stack-trace.js:32 - ---> Stack Trace: - 0 inner at stack-trace.js:17 - 1 outer at stack-trace.js:16 - 2 global code at stack-trace.js:33 - ---> Stack Trace: - 0 hostThrower at stack-trace.js:14 - 1 global code at stack-trace.js:36 - ---> Stack Trace: - 0 htmlInner at stack-trace.html:10 - 1 scripterInner at stack-trace.js:21 - 2 global code at stack-trace.js:38 - ---> Stack Trace: - 0 htmlInner at stack-trace.html:10 - 1 htmlOuter at stack-trace.html:11 - 2 scripterOuter at stack-trace.js:22 - 3 global code at stack-trace.js:39 - ---> Stack Trace: - 0 selfRecursive1 at stack-trace.js:42 - 1 selfRecursive1 at stack-trace.js:42 - 2 selfRecursive1 at stack-trace.js:42 - 3 selfRecursive1 at stack-trace.js:42 - 4 selfRecursive1 at stack-trace.js:42 - 5 selfRecursive1 at stack-trace.js:42 - 6 selfRecursive1 at stack-trace.js:42 - 7 selfRecursive1 at stack-trace.js:42 - 8 selfRecursive1 at stack-trace.js:42 - 9 selfRecursive1 at stack-trace.js:42 - 10 selfRecursive1 at stack-trace.js:42 - 11 selfRecursive1 at stack-trace.js:42 - 12 selfRecursive1 at stack-trace.js:42 - 13 selfRecursive1 at stack-trace.js:42 - 14 selfRecursive1 at stack-trace.js:42 - 15 selfRecursive1 at stack-trace.js:42 - 16 selfRecursive1 at stack-trace.js:42 - 17 selfRecursive1 at stack-trace.js:42 - 18 selfRecursive1 at stack-trace.js:42 - 19 selfRecursive1 at stack-trace.js:42 - 20 selfRecursive1 at stack-trace.js:42 - 21 selfRecursive1 at stack-trace.js:42 - 22 selfRecursive1 at stack-trace.js:42 - 23 selfRecursive1 at stack-trace.js:42 - 24 selfRecursive1 at stack-trace.js:42 - 25 selfRecursive1 at stack-trace.js:42 - 26 selfRecursive1 at stack-trace.js:42 - 27 selfRecursive1 at stack-trace.js:42 - 28 selfRecursive1 at stack-trace.js:42 - 29 selfRecursive1 at stack-trace.js:42 - 30 selfRecursive1 at stack-trace.js:42 - 31 selfRecursive1 at stack-trace.js:42 - 32 selfRecursive1 at stack-trace.js:42 - 33 selfRecursive1 at stack-trace.js:42 - 34 selfRecursive1 at stack-trace.js:42 - 35 selfRecursive1 at stack-trace.js:42 - 36 selfRecursive1 at stack-trace.js:42 - 37 selfRecursive1 at stack-trace.js:42 - 38 selfRecursive1 at stack-trace.js:42 - 39 selfRecursive1 at stack-trace.js:42 - 40 selfRecursive1 at stack-trace.js:42 - 41 selfRecursive1 at stack-trace.js:42 - 42 selfRecursive1 at stack-trace.js:42 - 43 selfRecursive1 at stack-trace.js:42 - 44 selfRecursive1 at stack-trace.js:42 - 45 selfRecursive1 at stack-trace.js:42 - 46 selfRecursive1 at stack-trace.js:42 - 47 selfRecursive1 at stack-trace.js:42 - 48 selfRecursive1 at stack-trace.js:42 - 49 selfRecursive1 at stack-trace.js:42 - 50 selfRecursive1 at stack-trace.js:42 - 51 selfRecursive1 at stack-trace.js:42 - 52 selfRecursive1 at stack-trace.js:42 - 53 selfRecursive1 at stack-trace.js:42 - 54 selfRecursive1 at stack-trace.js:42 - 55 selfRecursive1 at stack-trace.js:42 - 56 selfRecursive1 at stack-trace.js:42 - 57 selfRecursive1 at stack-trace.js:42 - 58 selfRecursive1 at stack-trace.js:42 - 59 selfRecursive1 at stack-trace.js:42 - 60 selfRecursive1 at stack-trace.js:42 - 61 selfRecursive1 at stack-trace.js:42 - 62 selfRecursive1 at stack-trace.js:42 - 63 selfRecursive1 at stack-trace.js:42 - 64 selfRecursive1 at stack-trace.js:42 - 65 selfRecursive1 at stack-trace.js:42 - 66 selfRecursive1 at stack-trace.js:42 - 67 selfRecursive1 at stack-trace.js:42 - 68 selfRecursive1 at stack-trace.js:42 - 69 selfRecursive1 at stack-trace.js:42 - 70 selfRecursive1 at stack-trace.js:42 - 71 selfRecursive1 at stack-trace.js:42 - 72 selfRecursive1 at stack-trace.js:42 - 73 selfRecursive1 at stack-trace.js:42 - 74 selfRecursive1 at stack-trace.js:42 - 75 selfRecursive1 at stack-trace.js:42 - 76 selfRecursive1 at stack-trace.js:42 - 77 selfRecursive1 at stack-trace.js:42 - 78 selfRecursive1 at stack-trace.js:42 - 79 selfRecursive1 at stack-trace.js:42 - 80 selfRecursive1 at stack-trace.js:42 - 81 selfRecursive1 at stack-trace.js:42 - 82 selfRecursive1 at stack-trace.js:42 - 83 selfRecursive1 at stack-trace.js:42 - 84 selfRecursive1 at stack-trace.js:42 - 85 selfRecursive1 at stack-trace.js:42 - 86 selfRecursive1 at stack-trace.js:42 - 87 selfRecursive1 at stack-trace.js:42 - 88 selfRecursive1 at stack-trace.js:42 - 89 selfRecursive1 at stack-trace.js:42 - 90 selfRecursive1 at stack-trace.js:42 - 91 selfRecursive1 at stack-trace.js:42 - 92 selfRecursive1 at stack-trace.js:42 - 93 selfRecursive1 at stack-trace.js:42 - 94 selfRecursive1 at stack-trace.js:42 - 95 selfRecursive1 at stack-trace.js:42 - 96 selfRecursive1 at stack-trace.js:42 - 97 selfRecursive1 at stack-trace.js:42 - 98 selfRecursive1 at stack-trace.js:42 - 99 selfRecursive1 at stack-trace.js:42 - ---> Stack Trace: - 0 selfRecursive2 at stack-trace.js:51 - 1 selfRecursive2 at stack-trace.js:51 - 2 selfRecursive2 at stack-trace.js:51 - 3 selfRecursive2 at stack-trace.js:51 - 4 selfRecursive2 at stack-trace.js:51 - 5 selfRecursive2 at stack-trace.js:51 - 6 selfRecursive2 at stack-trace.js:51 - 7 selfRecursive2 at stack-trace.js:51 - 8 selfRecursive2 at stack-trace.js:51 - 9 selfRecursive2 at stack-trace.js:51 - 10 selfRecursive2 at stack-trace.js:51 - 11 selfRecursive2 at stack-trace.js:51 - 12 selfRecursive2 at stack-trace.js:51 - 13 selfRecursive2 at stack-trace.js:51 - 14 selfRecursive2 at stack-trace.js:51 - 15 selfRecursive2 at stack-trace.js:51 - 16 selfRecursive2 at stack-trace.js:51 - 17 selfRecursive2 at stack-trace.js:51 - 18 selfRecursive2 at stack-trace.js:51 - 19 selfRecursive2 at stack-trace.js:51 - 20 selfRecursive2 at stack-trace.js:51 - 21 selfRecursive2 at stack-trace.js:51 - 22 selfRecursive2 at stack-trace.js:51 - 23 selfRecursive2 at stack-trace.js:51 - 24 selfRecursive2 at stack-trace.js:51 - 25 selfRecursive2 at stack-trace.js:51 - 26 selfRecursive2 at stack-trace.js:51 - 27 selfRecursive2 at stack-trace.js:51 - 28 selfRecursive2 at stack-trace.js:51 - 29 selfRecursive2 at stack-trace.js:51 - 30 selfRecursive2 at stack-trace.js:51 - 31 selfRecursive2 at stack-trace.js:51 - 32 selfRecursive2 at stack-trace.js:51 - 33 selfRecursive2 at stack-trace.js:51 - 34 selfRecursive2 at stack-trace.js:51 - 35 selfRecursive2 at stack-trace.js:51 - 36 selfRecursive2 at stack-trace.js:51 - 37 selfRecursive2 at stack-trace.js:51 - 38 selfRecursive2 at stack-trace.js:51 - 39 selfRecursive2 at stack-trace.js:51 - 40 selfRecursive2 at stack-trace.js:51 - 41 selfRecursive2 at stack-trace.js:51 - 42 selfRecursive2 at stack-trace.js:51 - 43 selfRecursive2 at stack-trace.js:51 - 44 selfRecursive2 at stack-trace.js:51 - 45 selfRecursive2 at stack-trace.js:51 - 46 selfRecursive2 at stack-trace.js:51 - 47 selfRecursive2 at stack-trace.js:51 - 48 selfRecursive2 at stack-trace.js:51 - 49 selfRecursive2 at stack-trace.js:51 - 50 selfRecursive2 at stack-trace.js:51 - 51 selfRecursive2 at stack-trace.js:51 - 52 selfRecursive2 at stack-trace.js:51 - 53 selfRecursive2 at stack-trace.js:51 - 54 selfRecursive2 at stack-trace.js:51 - 55 selfRecursive2 at stack-trace.js:51 - 56 selfRecursive2 at stack-trace.js:51 - 57 selfRecursive2 at stack-trace.js:51 - 58 selfRecursive2 at stack-trace.js:51 - 59 selfRecursive2 at stack-trace.js:51 - 60 selfRecursive2 at stack-trace.js:51 - 61 selfRecursive2 at stack-trace.js:51 - 62 selfRecursive2 at stack-trace.js:51 - 63 selfRecursive2 at stack-trace.js:51 - 64 selfRecursive2 at stack-trace.js:51 - 65 selfRecursive2 at stack-trace.js:51 - 66 selfRecursive2 at stack-trace.js:51 - 67 selfRecursive2 at stack-trace.js:51 - 68 selfRecursive2 at stack-trace.js:51 - 69 selfRecursive2 at stack-trace.js:51 - 70 selfRecursive2 at stack-trace.js:51 - 71 selfRecursive2 at stack-trace.js:51 - 72 selfRecursive2 at stack-trace.js:51 - 73 selfRecursive2 at stack-trace.js:51 - 74 selfRecursive2 at stack-trace.js:51 - 75 selfRecursive2 at stack-trace.js:51 - 76 selfRecursive2 at stack-trace.js:51 - 77 selfRecursive2 at stack-trace.js:51 - 78 selfRecursive2 at stack-trace.js:51 - 79 selfRecursive2 at stack-trace.js:51 - 80 selfRecursive2 at stack-trace.js:51 - 81 selfRecursive2 at stack-trace.js:51 - 82 selfRecursive2 at stack-trace.js:51 - 83 selfRecursive2 at stack-trace.js:51 - 84 selfRecursive2 at stack-trace.js:51 - 85 selfRecursive2 at stack-trace.js:51 - 86 selfRecursive2 at stack-trace.js:51 - 87 selfRecursive2 at stack-trace.js:51 - 88 selfRecursive2 at stack-trace.js:51 - 89 selfRecursive2 at stack-trace.js:51 - 90 selfRecursive2 at stack-trace.js:51 - 91 selfRecursive2 at stack-trace.js:51 - 92 selfRecursive2 at stack-trace.js:51 - 93 selfRecursive2 at stack-trace.js:51 - 94 selfRecursive2 at stack-trace.js:51 - 95 selfRecursive2 at stack-trace.js:51 - 96 selfRecursive2 at stack-trace.js:51 - 97 selfRecursive2 at stack-trace.js:51 - 98 selfRecursive2 at stack-trace.js:51 - 99 selfRecursive2 at stack-trace.js:51 - ---> Stack Trace: - 0 selfRecursive3 at stack-trace.js:58 - 1 eval - 2 selfRecursive3 at stack-trace.js:58 - 3 eval - 4 selfRecursive3 at stack-trace.js:58 - 5 eval - 6 selfRecursive3 at stack-trace.js:58 - 7 eval - 8 selfRecursive3 at stack-trace.js:58 - 9 eval - 10 selfRecursive3 at stack-trace.js:58 - 11 eval - 12 selfRecursive3 at stack-trace.js:58 - 13 eval - 14 selfRecursive3 at stack-trace.js:58 - 15 eval - 16 selfRecursive3 at stack-trace.js:58 - 17 eval - 18 selfRecursive3 at stack-trace.js:58 - 19 eval - 20 selfRecursive3 at stack-trace.js:58 - 21 eval - 22 selfRecursive3 at stack-trace.js:58 - 23 eval - 24 selfRecursive3 at stack-trace.js:58 - 25 eval - 26 selfRecursive3 at stack-trace.js:58 - 27 eval - 28 selfRecursive3 at stack-trace.js:58 - 29 eval - 30 selfRecursive3 at stack-trace.js:58 - 31 eval - 32 selfRecursive3 at stack-trace.js:58 - 33 eval - 34 selfRecursive3 at stack-trace.js:58 - 35 eval - 36 selfRecursive3 at stack-trace.js:58 - 37 eval - 38 selfRecursive3 at stack-trace.js:58 - 39 eval - 40 selfRecursive3 at stack-trace.js:58 - 41 eval - 42 selfRecursive3 at stack-trace.js:58 - 43 eval - 44 selfRecursive3 at stack-trace.js:58 - 45 eval - 46 selfRecursive3 at stack-trace.js:58 - 47 eval - 48 selfRecursive3 at stack-trace.js:58 - 49 eval - 50 selfRecursive3 at stack-trace.js:58 - 51 eval - 52 selfRecursive3 at stack-trace.js:58 - 53 eval - 54 selfRecursive3 at stack-trace.js:58 - 55 eval - 56 selfRecursive3 at stack-trace.js:58 - 57 eval - 58 selfRecursive3 at stack-trace.js:58 - 59 eval - 60 selfRecursive3 at stack-trace.js:58 - 61 eval - 62 selfRecursive3 at stack-trace.js:58 - 63 eval - 64 selfRecursive3 at stack-trace.js:58 - 65 eval - 66 selfRecursive3 at stack-trace.js:58 - 67 eval - 68 selfRecursive3 at stack-trace.js:58 - 69 eval - 70 selfRecursive3 at stack-trace.js:58 - 71 eval - 72 selfRecursive3 at stack-trace.js:58 - 73 eval - 74 selfRecursive3 at stack-trace.js:58 - 75 eval - 76 selfRecursive3 at stack-trace.js:58 - 77 eval - 78 selfRecursive3 at stack-trace.js:58 - 79 eval - 80 selfRecursive3 at stack-trace.js:58 - 81 eval - 82 selfRecursive3 at stack-trace.js:58 - 83 eval - 84 selfRecursive3 at stack-trace.js:58 - 85 eval - 86 selfRecursive3 at stack-trace.js:58 - 87 eval - 88 selfRecursive3 at stack-trace.js:58 - 89 eval - 90 selfRecursive3 at stack-trace.js:58 - 91 eval - 92 selfRecursive3 at stack-trace.js:58 - 93 eval - 94 selfRecursive3 at stack-trace.js:58 - 95 eval - 96 selfRecursive3 at stack-trace.js:58 - 97 eval - 98 selfRecursive3 at stack-trace.js:58 - 99 eval - - diff --git a/LayoutTests/fast/js/stack-trace.html b/LayoutTests/fast/js/stack-trace.html deleted file mode 100644 index e08c910..0000000 --- a/LayoutTests/fast/js/stack-trace.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - -

-

- - - - - diff --git a/LayoutTests/platform/chromium/test_expectations.txt b/LayoutTests/platform/chromium/test_expectations.txt index e4bbb01..ab4b3a2 100644 --- a/LayoutTests/platform/chromium/test_expectations.txt +++ b/LayoutTests/platform/chromium/test_expectations.txt @@ -518,10 +518,6 @@ WONTFIX SKIP : fast/frames/cross-site-this.html = FAIL // throw. V8 follows the spec. WONTFIX SKIP : fast/js/reparsing-semicolon-insertion.html = FAIL -// This tests stack-traces that are generated by JSC. This test should -// fail since it is specific to jsc. -WONTFIX SKIP : fast/js/stack-trace.html = FAIL - // Rubber-banding is currently a CG only feature. WONTFIX : platform/chromium/rubberbanding = FAIL WONTFIX : platform/chromium/compositing/rubberbanding = IMAGE diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog index 6f12871..9978614 100644 --- a/Source/JavaScriptCore/ChangeLog +++ b/Source/JavaScriptCore/ChangeLog @@ -1,3 +1,29 @@ +2012-02-01 Csaba Osztrogonác + + Implement Error.stack + https://bugs.webkit.org/show_bug.cgi?id=66994 + + Unreviewed, rolling out r106407. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/AbstractPC.cpp: + (JSC::AbstractPC::AbstractPC): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): + * interpreter/Interpreter.h: + (JSC): + (Interpreter): + * jsc.cpp: + (GlobalObject::finishCreation): + * parser/Parser.h: + (JSC::::parse): + * runtime/CommonIdentifiers.h: + * runtime/Error.cpp: + (JSC::addErrorInfo): + * runtime/Error.h: + (JSC): + 2012-01-31 Hajime Morrita Add missing JS_PRIVATE_EXPORTs diff --git a/Source/JavaScriptCore/JavaScriptCore.exp b/Source/JavaScriptCore/JavaScriptCore.exp index 9f31af7..2f7b315 100644 --- a/Source/JavaScriptCore/JavaScriptCore.exp +++ b/Source/JavaScriptCore/JavaScriptCore.exp @@ -118,7 +118,7 @@ __ZN3JSC10JSFunction6s_infoE __ZN3JSC10JSFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEPNS_9StructureE __ZN3JSC10throwErrorEPNS_9ExecStateENS_7JSValueE __ZN3JSC10throwErrorEPNS_9ExecStateEPNS_8JSObjectE -__ZN3JSC11Interpreter13getStackTraceEPNS_12JSGlobalDataEiRN3WTF6VectorINS_10StackFrameELm0EEE +__ZN3JSC11JSByteArray10putByIndexEPNS_6JSCellEPNS_9ExecStateEjNS_7JSValueE __ZN3JSC11JSByteArray15createStructureERNS_12JSGlobalDataEPNS_14JSGlobalObjectENS_7JSValueEPKNS_9ClassInfoE __ZN3JSC11JSByteArray18getOwnPropertySlotEPNS_6JSCellEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE __ZN3JSC11JSByteArray19getOwnPropertyNamesEPNS_8JSObjectEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE diff --git a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def index 9e6042b..93c9e75 100644 --- a/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def +++ b/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def @@ -209,7 +209,6 @@ EXPORTS ?getPropertyDescriptor@JSObject@JSC@@QAE_NPAVExecState@2@ABVIdentifier@2@AAVPropertyDescriptor@2@@Z ?getPropertyNames@JSObject@JSC@@SAXPAV12@PAVExecState@2@AAVPropertyNameArray@2@W4EnumerationMode@2@@Z ?getSlice@ArgList@JSC@@QBEXHAAV12@@Z - ?getStackTrace@Interpreter@JSC@@SAXPAVJSGlobalData@2@HAAV?$Vector@UStackFrame@JSC@@$0A@@WTF@@@Z ?getString@JSCell@JSC@@QBE?AVUString@2@PAVExecState@2@@Z ?getString@JSCell@JSC@@QBE_NPAVExecState@2@AAVUString@2@@Z ?getter@PropertyDescriptor@JSC@@QBE?AVJSValue@2@XZ diff --git a/Source/JavaScriptCore/interpreter/AbstractPC.cpp b/Source/JavaScriptCore/interpreter/AbstractPC.cpp index 89e86ab..863915b 100644 --- a/Source/JavaScriptCore/interpreter/AbstractPC.cpp +++ b/Source/JavaScriptCore/interpreter/AbstractPC.cpp @@ -46,7 +46,6 @@ AbstractPC::AbstractPC(JSGlobalData& globalData, ExecState* exec) #endif #if ENABLE(INTERPRETER) - UNUSED_PARAM(globalData); m_pointer = exec->returnVPC(); m_mode = Interpreter; #endif diff --git a/Source/JavaScriptCore/interpreter/Interpreter.cpp b/Source/JavaScriptCore/interpreter/Interpreter.cpp index 9c43a77..445e286 100644 --- a/Source/JavaScriptCore/interpreter/Interpreter.cpp +++ b/Source/JavaScriptCore/interpreter/Interpreter.cpp @@ -45,6 +45,7 @@ #include "JSActivation.h" #include "JSArray.h" #include "JSByteArray.h" +#include "JSFunction.h" #include "JSNotAnObject.h" #include "JSPropertyNameIterator.h" #include "LiteralParser.h" @@ -59,7 +60,6 @@ #include "Register.h" #include "SamplingTool.h" #include "StrictEvalActivation.h" -#include "StrongInlines.h" #include "UStringConcatenate.h" #include #include @@ -790,86 +790,6 @@ static void appendSourceToError(CallFrame* callFrame, ErrorInstance* exception, exception->putDirect(*globalData, globalData->propertyNames->message, jsString(globalData, message)); } -static void getCallerLine(JSGlobalData* globalData, CallFrame* callFrame, int& lineNumber) -{ - (void)globalData; - unsigned bytecodeOffset; - lineNumber = -1; - callFrame = callFrame->removeHostCallFrameFlag(); - - if (callFrame->callerFrame() == CallFrame::noCaller() || callFrame->callerFrame()->hasHostCallFrameFlag()) - return; - - CodeBlock* callerCodeBlock = callFrame->callerFrame()->removeHostCallFrameFlag()->codeBlock(); - -#if ENABLE(INTERPRETER) - if (!globalData->canUseJIT()) - bytecodeOffset = callerCodeBlock->bytecodeOffset(callFrame->returnVPC()); -#if ENABLE(JIT) - else - bytecodeOffset = callerCodeBlock->bytecodeOffset(callFrame->returnPC()); -#endif -#else - bytecodeOffset = callerCodeBlock->bytecodeOffset(callFrame->returnPC()); -#endif - - lineNumber = callerCodeBlock->lineNumberForBytecodeOffset(bytecodeOffset - 1); -} - -static ALWAYS_INLINE const UString getSourceURLFromCallFrame(CallFrame* callFrame) -{ - if (callFrame->hasHostCallFrameFlag()) - return UString(); -#if ENABLE(INTERPRETER) -#if ENABLE(JIT) - if (callFrame->globalData().canUseJIT()) - return callFrame->codeBlock()->ownerExecutable()->sourceURL(); -#endif - return callFrame->codeBlock()->source()->url(); - -#else - return callFrame->codeBlock()->ownerExecutable()->sourceURL(); -#endif -} - -static StackFrameCodeType getStackFrameCodeType(CallFrame* callFrame) -{ - if (callFrame->hasHostCallFrameFlag()) - return StackFrameNativeCode; - - switch (callFrame->codeBlock()->codeType()) { - case EvalCode: - return StackFrameEvalCode; - case FunctionCode: - return StackFrameFunctionCode; - case GlobalCode: - return StackFrameGlobalCode; - } - ASSERT_NOT_REACHED(); - return StackFrameGlobalCode; -} - -void Interpreter::getStackTrace(JSGlobalData* globalData, int line, Vector& results) -{ - CallFrame* callFrame = globalData->topCallFrame->removeHostCallFrameFlag(); - if (!callFrame || callFrame == CallFrame::noCaller() || !callFrame->codeBlock()) - return; - UString sourceURL; - UString traceLevel; - - while (callFrame && callFrame != CallFrame::noCaller()) { - if (callFrame->codeBlock()) { - sourceURL = getSourceURLFromCallFrame(callFrame); - - StackFrame s = { Strong(*globalData, callFrame->callee()), getStackFrameCodeType(callFrame), Strong(*globalData, callFrame->codeBlock()->ownerExecutable()), line, sourceURL}; - - results.append(s); - } - getCallerLine(globalData, callFrame, line); - callFrame = callFrame->callerFrame()->removeHostCallFrameFlag(); - } -} - NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSValue& exceptionValue, unsigned bytecodeOffset) { CodeBlock* codeBlock = callFrame->codeBlock(); @@ -888,9 +808,7 @@ NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSV // FIXME: should only really be adding these properties to VM generated exceptions, // but the inspector currently requires these for all thrown objects. - Vector stackTrace; - getStackTrace(&callFrame->globalData(), codeBlock->lineNumberForBytecodeOffset(bytecodeOffset), stackTrace); - addErrorInfo(callFrame, exception, codeBlock->lineNumberForBytecodeOffset(bytecodeOffset), codeBlock->ownerExecutable()->source(), stackTrace); + addErrorInfo(callFrame, exception, codeBlock->lineNumberForBytecodeOffset(bytecodeOffset), codeBlock->ownerExecutable()->source()); } isInterrupt = isInterruptedExecutionException(exception) || isTerminatedExecutionException(exception); diff --git a/Source/JavaScriptCore/interpreter/Interpreter.h b/Source/JavaScriptCore/interpreter/Interpreter.h index 1ad88c5..1943513 100644 --- a/Source/JavaScriptCore/interpreter/Interpreter.h +++ b/Source/JavaScriptCore/interpreter/Interpreter.h @@ -31,7 +31,6 @@ #include "ArgList.h" #include "JSCell.h" -#include "JSFunction.h" #include "JSValue.h" #include "JSObject.h" #include "Opcode.h" @@ -43,8 +42,8 @@ namespace JSC { class CodeBlock; class EvalExecutable; - class ExecutableBase; class FunctionExecutable; + class JSFunction; class JSGlobalObject; class ProgramExecutable; class Register; @@ -63,59 +62,6 @@ namespace JSC { WillExecuteStatement }; - enum StackFrameCodeType { - StackFrameGlobalCode, - StackFrameEvalCode, - StackFrameFunctionCode, - StackFrameNativeCode - }; - - struct StackFrame { - Strong callee; - StackFrameCodeType codeType; - Strong executable; - int line; - UString sourceURL; - UString toString(CallFrame* callFrame) const - { - bool hasSourceURLInfo = !sourceURL.isNull() && !sourceURL.isEmpty(); - bool hasLineInfo = line > -1; - String traceLine; - JSObject* stackFrameCallee = callee.get(); - - switch (codeType) { - case StackFrameEvalCode: - if (hasSourceURLInfo) { - traceLine = hasLineInfo ? String::format("eval at %s:%d", sourceURL.ascii().data(), line) - : String::format("eval at %s", sourceURL.ascii().data()); - } else - traceLine = String::format("eval"); - break; - case StackFrameNativeCode: - traceLine = "Native code"; - break; - case StackFrameFunctionCode: - if (stackFrameCallee && stackFrameCallee->inherits(&JSFunction::s_info)) { - UString functionName = asFunction(stackFrameCallee)->name(callFrame); - if (hasSourceURLInfo) { - traceLine = hasLineInfo ? String::format("%s at %s:%d", functionName.ascii().data(), sourceURL.ascii().data(), line) - : String::format("%s at %s", functionName.ascii().data(), sourceURL.ascii().data()); - } else - traceLine = String::format("%s\n", functionName.ascii().data()); - break; - } - case StackFrameGlobalCode: - if (hasSourceURLInfo) { - traceLine = hasLineInfo ? String::format("global code at %s:%d", sourceURL.ascii().data(), line) - : String::format("global code at %s", sourceURL.ascii().data()); - } else - traceLine = String::format("global code"); - - } - return traceLine.impl(); - } - }; - class TopCallFrameSetter { public: TopCallFrameSetter(JSGlobalData& global, CallFrame* callFrame) @@ -205,8 +151,6 @@ namespace JSC { NEVER_INLINE HandlerInfo* throwException(CallFrame*&, JSValue&, unsigned bytecodeOffset); NEVER_INLINE void debug(CallFrame*, DebugHookID, int firstLine, int lastLine); - static const UString getTraceLine(CallFrame*, StackFrameCodeType, const UString&, int); - JS_EXPORT_PRIVATE static void getStackTrace(JSGlobalData*, int line, Vector& results); void dumpSampleData(ExecState* exec); void startSampling(); diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp index 25245e6..47ec8c6 100644 --- a/Source/JavaScriptCore/jsc.cpp +++ b/Source/JavaScriptCore/jsc.cpp @@ -27,7 +27,6 @@ #include "CurrentTime.h" #include "ExceptionHelpers.h" #include "InitializeThreading.h" -#include "Interpreter.h" #include "JSArray.h" #include "JSFunction.h" #include "JSLock.h" @@ -79,7 +78,6 @@ static bool fillBufferWithContentsOfFile(const UString& fileName, Vector& static EncodedJSValue JSC_HOST_CALL functionPrint(ExecState*); static EncodedJSValue JSC_HOST_CALL functionDebug(ExecState*); -static EncodedJSValue JSC_HOST_CALL functionJSCStack(ExecState*); static EncodedJSValue JSC_HOST_CALL functionGC(ExecState*); #ifndef NDEBUG static EncodedJSValue JSC_HOST_CALL functionReleaseExecutableMemory(ExecState*); @@ -186,7 +184,6 @@ protected: addFunction(globalData, "run", functionRun, 1); addFunction(globalData, "load", functionLoad, 1); addFunction(globalData, "checkSyntax", functionCheckSyntax, 1); - addFunction(globalData, "jscStack", functionJSCStack, 1); addFunction(globalData, "readline", functionReadline, 0); addFunction(globalData, "preciseTime", functionPreciseTime, 0); #if ENABLE(SAMPLING_FLAGS) @@ -255,22 +252,6 @@ EncodedJSValue JSC_HOST_CALL functionDebug(ExecState* exec) return JSValue::encode(jsUndefined()); } -EncodedJSValue JSC_HOST_CALL functionJSCStack(ExecState* exec) -{ - String trace = "--> Stack trace:\n"; - Vector stackTrace; - Interpreter::getStackTrace(&exec->globalData(), -1, stackTrace); - int i = 0; - - for (Vector::iterator iter = stackTrace.begin(); iter < stackTrace.end(); iter++) { - StackFrame level = *iter; - trace += String::format(" %i %s\n", i, level.toString(exec).utf8().data()); - i++; - } - fprintf(stderr, "%s", trace.utf8().data()); - return JSValue::encode(jsUndefined()); -} - EncodedJSValue JSC_HOST_CALL functionGC(ExecState* exec) { JSLock lock(SilenceAssertionsOnly); diff --git a/Source/JavaScriptCore/parser/Parser.h b/Source/JavaScriptCore/parser/Parser.h index 27dafae..f3d96ff 100644 --- a/Source/JavaScriptCore/parser/Parser.h +++ b/Source/JavaScriptCore/parser/Parser.h @@ -1016,7 +1016,7 @@ PassRefPtr Parser::parse(JSGlobalObject* lexicalGlobalObj else if (isEvalNode()) *exception = createSyntaxError(lexicalGlobalObject, errMsg); else - *exception = addErrorInfo(&lexicalGlobalObject->globalData(), createSyntaxError(lexicalGlobalObject, errMsg), errLine, *m_source, Vector()); + *exception = addErrorInfo(&lexicalGlobalObject->globalData(), createSyntaxError(lexicalGlobalObject, errMsg), errLine, *m_source); } if (debugger && !ParsedNode::scopeIsFunction) diff --git a/Source/JavaScriptCore/runtime/CommonIdentifiers.h b/Source/JavaScriptCore/runtime/CommonIdentifiers.h index d79e5c7..08d8644 100644 --- a/Source/JavaScriptCore/runtime/CommonIdentifiers.h +++ b/Source/JavaScriptCore/runtime/CommonIdentifiers.h @@ -62,7 +62,6 @@ macro(prototype) \ macro(set) \ macro(source) \ - macro(stack) \ macro(test) \ macro(toExponential) \ macro(toFixed) \ diff --git a/Source/JavaScriptCore/runtime/Error.cpp b/Source/JavaScriptCore/runtime/Error.cpp index 243dc88..0947e3c 100644 --- a/Source/JavaScriptCore/runtime/Error.cpp +++ b/Source/JavaScriptCore/runtime/Error.cpp @@ -26,9 +26,7 @@ #include "ConstructData.h" #include "ErrorConstructor.h" -#include "ExceptionHelpers.h" #include "FunctionPrototype.h" -#include "JSArray.h" #include "JSFunction.h" #include "JSGlobalObject.h" #include "JSObject.h" @@ -118,7 +116,7 @@ JSObject* createURIError(ExecState* exec, const UString& message) return createURIError(exec->lexicalGlobalObject(), message); } -JSObject* addErrorInfo(JSGlobalData* globalData, JSObject* error, int line, const SourceCode& source, const Vector& stackTrace) +JSObject* addErrorInfo(JSGlobalData* globalData, JSObject* error, int line, const SourceCode& source) { const UString& sourceURL = source.provider()->url(); @@ -126,34 +124,13 @@ JSObject* addErrorInfo(JSGlobalData* globalData, JSObject* error, int line, cons error->putDirect(*globalData, Identifier(globalData, linePropertyName), jsNumber(line), ReadOnly | DontDelete); if (!sourceURL.isNull()) error->putDirect(*globalData, Identifier(globalData, sourceURLPropertyName), jsString(globalData, sourceURL), ReadOnly | DontDelete); - if (!stackTrace.isEmpty()) { - JSGlobalObject* globalObject = 0; - if (isTerminatedExecutionException(error) || isInterruptedExecutionException(error)) - globalObject = globalData->dynamicGlobalObject; - else - globalObject = error->globalObject(); - // We use the tryCreateUninitialized creation mechanism and related initialization - // functions as they're the only mechanism we currently have that will guarantee we - // don't call setters on the prototype. Technically it's faster than the alternative, - // but the numerous allocations that take place in this loop makes that last bit - // somewhat moot. - JSArray* stackTraceArray = JSArray::tryCreateUninitialized(*globalData, globalObject->arrayStructure(), stackTrace.size()); - if (!stackTraceArray) - return error; - for (unsigned i = 0; i < stackTrace.size(); i++) { - UString stackLevel = stackTrace[i].toString(globalObject->globalExec()); - stackTraceArray->initializeIndex(*globalData, i, jsString(globalData, stackLevel)); - } - stackTraceArray->completeInitialization(stackTrace.size()); - error->putDirect(*globalData, globalData->propertyNames->stack, stackTraceArray, ReadOnly | DontDelete); - } return error; } -JSObject* addErrorInfo(ExecState* exec, JSObject* error, int line, const SourceCode& source, const Vector& stackTrace) +JSObject* addErrorInfo(ExecState* exec, JSObject* error, int line, const SourceCode& source) { - return addErrorInfo(&exec->globalData(), error, line, source, stackTrace); + return addErrorInfo(&exec->globalData(), error, line, source); } bool hasErrorInfo(ExecState* exec, JSObject* error) diff --git a/Source/JavaScriptCore/runtime/Error.h b/Source/JavaScriptCore/runtime/Error.h index 59b3949..88b540a 100644 --- a/Source/JavaScriptCore/runtime/Error.h +++ b/Source/JavaScriptCore/runtime/Error.h @@ -24,7 +24,6 @@ #define Error_h #include "InternalFunction.h" -#include "Interpreter.h" #include "JSObject.h" #include @@ -57,9 +56,9 @@ namespace JSC { // Methods to add bool hasErrorInfo(ExecState*, JSObject* error); - JSObject* addErrorInfo(JSGlobalData*, JSObject* error, int line, const SourceCode&, const Vector&); + JSObject* addErrorInfo(JSGlobalData*, JSObject* error, int line, const SourceCode&); // ExecState wrappers. - JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&, const Vector&); + JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&); // Methods to throw Errors. JS_EXPORT_PRIVATE JSValue throwError(ExecState*, JSValue);