Ejemplo n.º 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;
}
Ejemplo n.º 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;
}
Ejemplo n.º 3
0
void CField::setValueToInstance(ExecState *exec, const Instance *inst, JSValue *aValue) const
{
    const CInstance* instance = static_cast<const CInstance*>(inst);
    NPObject* obj = instance->getObject();
    if (obj->_class->setProperty) {
        NPVariant variant;
        convertValueToNPVariant(exec, aValue, &variant);

        {
           JSLock::DropAllLocks dropAllLocks;
            obj->_class->setProperty(obj, _fieldIdentifier, &variant);
        }

        _NPN_ReleaseVariantValue(&variant);
    }
}
Ejemplo n.º 4
0
void CField::setValueToInstance(ExecState *exec, const Instance *inst, JSValue aValue) const
{
    const CInstance* instance = static_cast<const CInstance*>(inst);
    NPObject* obj = instance->getObject();
    if (obj->_class->setProperty) {
        NPVariant variant;
        convertValueToNPVariant(exec, aValue, &variant);

        {
            JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
            obj->_class->setProperty(obj, _fieldIdentifier, &variant);
            CInstance::moveGlobalExceptionToExecState(exec);
        }

        _NPN_ReleaseVariantValue(&variant);
    }
}
Ejemplo n.º 5
0
void CField::setValueToInstance(ExecState *exec, const Instance *inst, JSValue* aValue) const
{
    const CInstance* instance = static_cast<const CInstance*>(inst);
    NPObject* obj = instance->getObject();
    if (obj->_class->setProperty) {
        NPVariant variant;
        convertValueToNPVariant(exec, aValue, &variant);

#ifdef ANDROID_NPN_SETEXCEPTION
        SetGlobalException(0);
#endif  // ANDROID_NPN_SETEXCEPTION
        {
            JSLock::DropAllLocks dropAllLocks(false);
            obj->_class->setProperty(obj, _fieldIdentifier, &variant);
        }

        _NPN_ReleaseVariantValue(&variant);
#ifdef ANDROID_NPN_SETEXCEPTION
        MoveGlobalExceptionToExecState(exec);
#endif  // ANDROID_NPN_SETEXCEPTION
    }
}
Ejemplo n.º 6
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;
}