Skip to content
  • commit-queue@webkit.org's avatar
    Eager stack trace for error objects. · 0fc0afa5
    commit-queue@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=118918
    
    Source/JavaScriptCore:
    
    Patch by Chris Curtis <chris_curtis@apple.com> on 2013-07-29
    Reviewed by Geoffrey Garen.
    
    Chrome and Firefox give error objects the stack property and we wanted to match
    that functionality. This allows developers to see the stack without throwing an object.
    
    * runtime/ErrorInstance.cpp:
    (JSC::ErrorInstance::finishCreation):
     For error objects that are not thrown as an exception, we pass the stackTrace in
     as a parameter. This allows the error object to have the stack property.
    
    * interpreter/Interpreter.cpp:
    (JSC::stackTraceAsString):
    Helper function used to eliminate duplicate code.
    
    (JSC::Interpreter::addStackTraceIfNecessary):
    When an error object is created by the user the vm->exceptionStack is not set.
    If the user throws this error object later the stack that is in the error object
    may not be the correct stack for the throw, so when we set the vm->exception stack,
    the stack property on the error object is set as well.
    
    * runtime/ErrorConstructor.cpp:
    (JSC::constructWithErrorConstructor):
    (JSC::callErrorConstructor):
    * runtime/NativeErrorConstructor.cpp:
    (JSC::constructWithNativeErrorConstructor):
    (JSC::callNativeErrorConstructor):
    These functions indicate that the user created an error object. For all error objects
    that the user explicitly creates, the topCallFrame is at a new frame created to
    handle the user's call. In this case though, the error object needs the caller's
    frame to create the stack trace correctly.
    
    * interpreter/Interpreter.h:
    * runtime/ErrorInstance.h:
    (JSC::ErrorInstance::create):
    
    LayoutTests:
    
    Patch by Chris Curtis <chris_curtis@apple.com> on 2013-07-29
    Reviewed by Geoffrey Garen.
    
    Added tests to ensure that the stack property was present at creation for all
    error Objects. This test will fail without this patch.
    
    * fast/js/script-tests/stack-at-creation-for-error-objects.js: Added.
    (checkStack):
    * fast/js/stack-at-creation-for-error-objects-expected.txt: Added.
    * fast/js/stack-at-creation-for-error-objects.html: Added.
    
    * inspector/console/console-format-expected.txt:
    * inspector/console/console-format.html:
    This test was modified by removing the error object from being evaluated. Prior to this patch
    error objects did not have the stack property, so the stack information was not being
    displayed. The stack trace includes a file path specific to the machine that is running
    the test. The results would have differed from one computer to the next. There
    is not an easy way to capture the error object to treat it differently. By removing
    the error object there is no need to add extra code to treat it differently.
    Also there are other tests inside inspector/console that test the  stack trace,
    so the testing suite does not lose error testing by removing it.
    
    The .stack property was added to the error objects at creation time.
    * fast/js/exception-properties-expected.txt:
    * fast/js/script-tests/exception-properties.js:
    
    The column numbers are modified in the following test. When error objects are explicitly
    invoked, the column number points to the beginning "(" instead of end ")".
    Functionality between browsers do not match either. Firefox does not output column
    numbers. Chrome points columns numbers to the beginning of the "new" call.
    
    * fast/js/line-column-numbers-expected.txt:
    * fast/js/stack-trace-expected.txt:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@153457 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    0fc0afa5