Пример #1
0
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;
}
Пример #2
0
JSValue* CInstance::invokeConstruct(ExecState* exec, const ArgList& args)
{
    if (!_object->_class->construct)
        return jsUndefined();

    unsigned count = args.size();
    Vector<NPVariant, 8> cArgs(count);

    unsigned i;
    for (i = 0; i < count; i++)
        convertValueToNPVariant(exec, args.at(exec, i), &cArgs[i]);

    // Invoke the 'C' method.
    NPVariant resultVariant;
    VOID_TO_NPVARIANT(resultVariant);
    {
        JSLock::DropAllLocks dropAllLocks(false);
        _object->_class->construct(_object, cArgs.data(), count, &resultVariant);
    }
    
    for (i = 0; i < count; i++)
        _NPN_ReleaseVariantValue(&cArgs[i]);

    JSValue* resultValue = convertNPVariantToValue(exec, &resultVariant, _rootObject.get());
    _NPN_ReleaseVariantValue(&resultVariant);
    return resultValue;
}
Пример #3
0
JSValue* CField::valueFromInstance(ExecState* exec, const Instance* inst) const
{
    const CInstance* instance = static_cast<const CInstance*>(inst);
    NPObject* obj = instance->getObject();
    if (obj->_class->getProperty) {
        NPVariant property;
        VOID_TO_NPVARIANT(property);

#ifdef ANDROID_NPN_SETEXCEPTION
        SetGlobalException(0);
#endif  // ANDROID_NPN_SETEXCEPTION
        bool result;
        {
            JSLock::DropAllLocks dropAllLocks(false);
            result = obj->_class->getProperty(obj, _fieldIdentifier, &property);
        }
#ifdef ANDROID_NPN_SETEXCEPTION
        MoveGlobalExceptionToExecState(exec);
#endif  // ANDROID_NPN_SETEXCEPTION
        if (result) {
            JSValue* result = convertNPVariantToValue(exec, &property, instance->rootObject());
            _NPN_ReleaseVariantValue(&property);
            return result;
        }
    }
    return jsUndefined();
}
Пример #4
0
JSValue* CField::valueFromInstance(ExecState* exec, const Instance* inst) const
{
    const CInstance* instance = static_cast<const CInstance*>(inst);
    NPObject* obj = instance->getObject();
    if (obj->_class->getProperty) {
        NPVariant property;
        VOID_TO_NPVARIANT(property);

        bool result;
        {
           JSLock::DropAllLocks dropAllLocks;
            result = obj->_class->getProperty(obj, _fieldIdentifier, &property);
        }
        if (result) {
            JSValue* result = convertNPVariantToValue(exec, &property, instance->rootObject());
            _NPN_ReleaseVariantValue(&property);
            return result;
        }
    }
    return jsUndefined();
}
Пример #5
0
JSValue* CInstance::invokeDefaultMethod(ExecState* exec, const List& args)
{
    if (!_object->_class->invokeDefault)
        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->invokeDefault(_object, cArgs, count, &resultVariant);

    for (i = 0; i < count; i++)
        _NPN_ReleaseVariantValue(&cArgs[i]);

    JSValue* resultValue = convertNPVariantToValue(exec, &resultVariant);
    _NPN_ReleaseVariantValue(&resultVariant);
    return resultValue;
}