Changeset 34024 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
May 22, 2008, 2:53:25 AM (17 years ago)
Author:
[email protected]
Message:

Roll out r34020 as it causes recursion tests to fail.

RS=Maciej

Location:
trunk/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r34022 r34024  
     12008-05-22  Oliver Hunt  <[email protected]>
     2
     3        RS=Maciej.
     4
     5        Roll out r34020 as it causes recursion tests to fail.
     6
     7        * kjs/object.cpp:
     8        (KJS::JSObject::call):
     9
    1102008-05-22  Oliver Hunt  <[email protected]>
    211
  • trunk/JavaScriptCore/kjs/object.cpp

    r34020 r34024  
    3535#include <wtf/Assertions.h>
    3636
     37// maximum global call stack size. Protects against accidental or
     38// malicious infinite recursions. Define to -1 if you want no limit.
     39// In real-world testing it appears ok to bump the stack depth count to 500.
     40// This of course is dependent on stack frame size.
     41#define KJS_MAX_STACK 500
     42
     43#define JAVASCRIPT_CALL_TRACING 0
    3744#define JAVASCRIPT_MARK_TRACING 0
    3845
     46#if JAVASCRIPT_CALL_TRACING
     47static bool _traceJavaScript = false;
     48
     49extern "C" {
     50    void setTraceJavaScript(bool f)
     51    {
     52        _traceJavaScript = f;
     53    }
     54
     55    static bool traceJavaScript()
     56    {
     57        return _traceJavaScript;
     58    }
     59}
     60#endif
     61
    3962namespace KJS {
    4063
     
    4467{
    4568  ASSERT(implementsCall());
     69
     70#if KJS_MAX_STACK > 0
     71  static int depth = 0; // sum of all extant function calls
     72
     73#if JAVASCRIPT_CALL_TRACING
     74    static bool tracing = false;
     75    if (traceJavaScript() && !tracing) {
     76        tracing = true;
     77        for (int i = 0; i < depth; i++)
     78            putchar (' ');
     79        printf ("*** calling:  %s\n", toString(exec).ascii());
     80        for (int j = 0; j < args.size(); j++) {
     81            for (int i = 0; i < depth; i++)
     82                putchar (' ');
     83            printf ("*** arg[%d] = %s\n", j, args[j]->toString(exec).ascii());
     84        }
     85        tracing = false;
     86    }
     87#endif
     88
     89  if (++depth > KJS_MAX_STACK) {
     90    --depth;
     91    return throwError(exec, RangeError, "Maximum call stack size exceeded.");
     92  }
     93#endif
    4694
    4795#if JAVASCRIPT_PROFILING
     
    53101#if JAVASCRIPT_PROFILING
    54102    Profiler::profiler()->didExecute(exec, this);
     103#endif
     104
     105
     106#if KJS_MAX_STACK > 0
     107  --depth;
     108#endif
     109
     110#if JAVASCRIPT_CALL_TRACING
     111    if (traceJavaScript() && !tracing) {
     112        tracing = true;
     113        for (int i = 0; i < depth; i++)
     114            putchar (' ');
     115        printf ("*** returning:  %s\n", ret->toString(exec).ascii());
     116        tracing = false;
     117    }
    55118#endif
    56119
Note: See TracChangeset for help on using the changeset viewer.