Implement Error.stack
authorossy@webkit.org <ossy@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 1 Feb 2012 10:00:36 +0000 (10:00 +0000)
committerossy@webkit.org <ossy@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 1 Feb 2012 10:00:36 +0000 (10:00 +0000)
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

18 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/js/exception-properties-expected.txt
LayoutTests/fast/js/script-tests/exception-properties.js
LayoutTests/fast/js/script-tests/stack-trace.js [deleted file]
LayoutTests/fast/js/stack-trace-expected.txt [deleted file]
LayoutTests/fast/js/stack-trace.html [deleted file]
LayoutTests/platform/chromium/test_expectations.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/JavaScriptCore.exp
Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
Source/JavaScriptCore/interpreter/AbstractPC.cpp
Source/JavaScriptCore/interpreter/Interpreter.cpp
Source/JavaScriptCore/interpreter/Interpreter.h
Source/JavaScriptCore/jsc.cpp
Source/JavaScriptCore/parser/Parser.h
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/JavaScriptCore/runtime/Error.cpp
Source/JavaScriptCore/runtime/Error.h

index 45174fc..1fffb4a 100644 (file)
@@ -1,3 +1,17 @@
+2012-02-01  Csaba Osztrogonác  <ossy@webkit.org>
+
+        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  <yuzo@google.com>
 
         [Chromium] Unreviewed test expectaion change.
index 5363e04..0803670 100644 (file)
@@ -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
index 19eb345..c2f60da 100644 (file)
@@ -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 (file)
index 4d132f4..0000000
+++ /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 (file)
index 879d702..0000000
+++ /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 (file)
index e08c910..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-       <link rel="stylesheet" href="resources/js-test-style.css">
-       <script src="resources/js-test-pre.js"></script>
-</head>
-<body>
-       <p id="description"></p>
-       <p id="console"></p>
-       <script>function htmlInner() { throw new Error("Error in HTML"); }</script>
-       <script>function htmlOuter() { htmlInner(); }</script>
-       <script src="script-tests/stack-trace.js"></script>
-</body>
-</html>
index e4bbb01..ab4b3a2 100644 (file)
@@ -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
index 6f12871..9978614 100644 (file)
@@ -1,3 +1,29 @@
+2012-02-01  Csaba Osztrogonác  <ossy@webkit.org>
+
+        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  <morrita@chromium.org>
 
         Add missing JS_PRIVATE_EXPORTs
index 9f31af7..2f7b315 100644 (file)
@@ -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
index 9e6042b..93c9e75 100644 (file)
@@ -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
index 89e86ab..863915b 100644 (file)
@@ -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
index 9c43a77..445e286 100644 (file)
@@ -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 <limits.h>
 #include <stdio.h>
@@ -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<StackFrame>& 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<JSObject>(*globalData, callFrame->callee()), getStackFrameCodeType(callFrame), Strong<ExecutableBase>(*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<StackFrame> 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);
index 1ad88c5..1943513 100644 (file)
@@ -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<JSObject> callee;
-        StackFrameCodeType codeType;
-        Strong<ExecutableBase> 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<StackFrame>& results);
 
         void dumpSampleData(ExecState* exec);
         void startSampling();
index 25245e6..47ec8c6 100644 (file)
@@ -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<char>&
 
 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<StackFrame> stackTrace;
-    Interpreter::getStackTrace(&exec->globalData(), -1, stackTrace);
-    int i = 0;
-
-    for (Vector<StackFrame>::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);
index 27dafae..f3d96ff 100644 (file)
@@ -1016,7 +1016,7 @@ PassRefPtr<ParsedNode> Parser<LexerType>::parse(JSGlobalObject* lexicalGlobalObj
         else if (isEvalNode<ParsedNode>())
             *exception = createSyntaxError(lexicalGlobalObject, errMsg);
         else
-            *exception = addErrorInfo(&lexicalGlobalObject->globalData(), createSyntaxError(lexicalGlobalObject, errMsg), errLine, *m_source, Vector<StackFrame>());
+            *exception = addErrorInfo(&lexicalGlobalObject->globalData(), createSyntaxError(lexicalGlobalObject, errMsg), errLine, *m_source);
     }
 
     if (debugger && !ParsedNode::scopeIsFunction)
index d79e5c7..08d8644 100644 (file)
@@ -62,7 +62,6 @@
     macro(prototype) \
     macro(set) \
     macro(source) \
-    macro(stack) \
     macro(test) \
     macro(toExponential) \
     macro(toFixed) \
index 243dc88..0947e3c 100644 (file)
@@ -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<StackFrame>& 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<StackFrame>& 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)
index 59b3949..88b540a 100644 (file)
@@ -24,7 +24,6 @@
 #define Error_h
 
 #include "InternalFunction.h"
-#include "Interpreter.h"
 #include "JSObject.h"
 #include <stdint.h>
 
@@ -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<StackFrame>&);
+    JSObject* addErrorInfo(JSGlobalData*, JSObject* error, int line, const SourceCode&);
     // ExecState wrappers.
-    JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&, const Vector<StackFrame>&);
+    JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&);
 
     // Methods to throw Errors.
     JS_EXPORT_PRIVATE JSValue throwError(ExecState*, JSValue);