Changeset 34309 in webkit for trunk/JavaScriptCore/kjs/object.cpp


Ignore:
Timestamp:
Jun 2, 2008, 10:08:42 AM (17 years ago)
Author:
[email protected]
Message:

2008-06-02 Geoffrey Garen <[email protected]>

Reviewed by Maciej Stachowiak.

Removed the recursion limit from JSObject::call, since the VM does
recursion checking now.

This should allow us to remove JSObject::call entirely, netting a small
speedup.

  • kjs/object.cpp: (KJS::JSObject::call):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/object.cpp

    r34090 r34309  
    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
    4437#define JAVASCRIPT_MARK_TRACING 0
    4538
    46 #if JAVASCRIPT_CALL_TRACING
    47 static bool _traceJavaScript = false;
    48 
    49 extern "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 
    6239namespace KJS {
    6340
    6441// ------------------------------ Object ---------------------------------------
    6542
    66 JSValue *JSObject::call(ExecState *exec, JSObject *thisObj, const List &args)
    67 {
    68   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
    94   JSValue* ret = callAsFunction(exec,thisObj,args);
    95 
    96 #if KJS_MAX_STACK > 0
    97   --depth;
    98 #endif
    99 
    100 #if JAVASCRIPT_CALL_TRACING
    101     if (traceJavaScript() && !tracing) {
    102         tracing = true;
    103         for (int i = 0; i < depth; i++)
    104             putchar (' ');
    105         printf ("*** returning:  %s\n", ret->toString(exec).ascii());
    106         tracing = false;
    107     }
    108 #endif
    109 
    110   return ret;
     43JSValue* JSObject::call(ExecState* exec, JSObject* thisObj, const List& args)
     44{
     45    ASSERT(implementsCall());
     46    return callAsFunction(exec, thisObj, args);
    11147}
    11248
Note: See TracChangeset for help on using the changeset viewer.