EXPORT JSValue *JSObject::call(ExecState *exec, JSObject *thisObj, const List &args) { assert(implementsCall()); #if KJS_MAX_STACK > 0 static int depth = 0; // sum of all concurrent interpreters #if JAVASCRIPT_CALL_TRACING static bool tracing = false; if (traceJavaScript() && !tracing) { tracing = true; for (int i = 0; i < depth; i++) putchar (' '); printf ("*** calling: %s\n", toString(exec).ascii()); for (int j = 0; j < args.size(); j++) { for (int i = 0; i < depth; i++) putchar (' '); printf ("*** arg[%d] = %s\n", j, args[j]->toString(exec).ascii()); } tracing = false; } #endif if (++depth > KJS_MAX_STACK) { --depth; return throwError(exec, RangeError, "Maximum call stack size exceeded."); } #endif JSValue *ret = callAsFunction(exec,thisObj,args); #if KJS_MAX_STACK > 0 --depth; #endif #if JAVASCRIPT_CALL_TRACING if (traceJavaScript() && !tracing) { tracing = true; for (int i = 0; i < depth; i++) putchar (' '); printf ("*** returning: %s\n", ret->toString(exec).ascii()); tracing = false; } #endif return ret; }
Value Object::callAsFunction(const Object& thisObj, int nArgs, const JSValueRef args[]) const { return callAsFunction(static_cast<JSObjectRef>(thisObj), nArgs, args); }
Value Object::callAsFunction(int nArgs, const JSValueRef args[]) const { return callAsFunction(nullptr, nArgs, args); }
Value Object::callAsFunction(const Object& thisObj, std::initializer_list<JSValueRef> args) const { return callAsFunction((JSObjectRef)thisObj, args.size(), args.begin()); }
Value Object::callAsFunction(std::initializer_list<JSValueRef> args) const { return callAsFunction(nullptr, args.size(), args.begin()); }
Value Object::callAsFunction() { JSValueRef args[0]; return callAsFunction(0, args); }
Value Object::callAsFunction(const Object& thisObj, int nArgs, const JSValueRef args[]) const { return callAsFunction((JSObjectRef) thisObj, nArgs, args); }