JSValue* CInstance::invokeMethod(ExecState* exec, const MethodList& methodList, const List& args) { // Overloading methods are not allowed by NPObjects. Should only be one // name match for a particular method. assert(methodList.length() == 1); CMethod* method = static_cast<CMethod*>(methodList.methodAt(0)); NPIdentifier ident = _NPN_GetStringIdentifier(method->name()); if (!_object->_class->hasMethod(_object, ident)) return jsUndefined(); unsigned count = args.size(); Vector<NPVariant, 128> cArgs(count); unsigned i; for (i = 0; i < count; i++) convertValueToNPVariant(exec, args.at(i), &cArgs[i]); // Invoke the 'C' method. NPVariant resultVariant; VOID_TO_NPVARIANT(resultVariant); _object->_class->invoke(_object, ident, cArgs, count, &resultVariant); for (i = 0; i < count; i++) _NPN_ReleaseVariantValue(&cArgs[i]); JSValue* resultValue = convertNPVariantToValue(exec, &resultVariant); _NPN_ReleaseVariantValue(&resultVariant); return resultValue; }
QStringList ConfigObjectDialog::getAdvancedConfigMethods() { list<CMethod*> methods = object->getType()->getMethods(); QStringList items; for (list<CMethod*>::iterator i = methods.begin(); i != methods.end(); i++) { CMethod* m = *i; if (!m->getHideFromUser()) { items.append(m->getName().c_str()); } } return items; }
JSValue CInstance::invokeMethod(ExecState* exec, RuntimeMethod* runtimeMethod) { if (!asObject(runtimeMethod)->inherits(&CRuntimeMethod::s_info)) return throwError(exec, createTypeError(exec, "Attempt to invoke non-plug-in method on plug-in object.")); const MethodList& methodList = *runtimeMethod->methods(); // Overloading methods are not allowed by NPObjects. Should only be one // name match for a particular method. ASSERT(methodList.size() == 1); CMethod* method = static_cast<CMethod*>(methodList[0]); NPIdentifier ident = method->identifier(); if (!_object->_class->hasMethod(_object, ident)) return jsUndefined(); unsigned count = exec->argumentCount(); Vector<NPVariant, 8> cArgs(count); unsigned i; for (i = 0; i < count; i++) convertValueToNPVariant(exec, exec->argument(i), &cArgs[i]); // Invoke the 'C' method. bool retval = true; NPVariant resultVariant; VOID_TO_NPVARIANT(resultVariant); { JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly); ASSERT(globalExceptionString().isNull()); retval = _object->_class->invoke(_object, ident, cArgs.data(), count, &resultVariant); moveGlobalExceptionToExecState(exec); } if (!retval) throwError(exec, createError(exec, "Error calling method on NPObject!")); for (i = 0; i < count; i++) _NPN_ReleaseVariantValue(&cArgs[i]); JSValue resultValue = convertNPVariantToValue(exec, &resultVariant, m_rootObject.get()); _NPN_ReleaseVariantValue(&resultVariant); return resultValue; }
JSValue CInstance::invokeMethod(ExecState* exec, RuntimeMethod* runtimeMethod) { if (!asObject(runtimeMethod)->inherits(CRuntimeMethod::info())) return throwError(exec, createTypeError(exec, "Attempt to invoke non-plug-in method on plug-in object.")); CMethod* method = static_cast<CMethod*>(runtimeMethod->method()); ASSERT(method); NPIdentifier ident = method->identifier(); if (!_object->_class->hasMethod(_object, ident)) return jsUndefined(); unsigned count = exec->argumentCount(); Vector<NPVariant, 8> cArgs(count); unsigned i; for (i = 0; i < count; i++) convertValueToNPVariant(exec, exec->argument(i), &cArgs[i]); // Invoke the 'C' method. bool retval = true; NPVariant resultVariant; VOID_TO_NPVARIANT(resultVariant); { JSLock::DropAllLocks dropAllLocks(exec); ASSERT(globalExceptionString().isNull()); retval = _object->_class->invoke(_object, ident, cArgs.data(), count, &resultVariant); moveGlobalExceptionToExecState(exec); } if (!retval) throwError(exec, createError(exec, ASCIILiteral("Error calling method on NPObject."))); for (i = 0; i < count; i++) _NPN_ReleaseVariantValue(&cArgs[i]); JSValue resultValue = convertNPVariantToValue(exec, &resultVariant, m_rootObject.get()); _NPN_ReleaseVariantValue(&resultVariant); return resultValue; }