Ignore:
Timestamp:
Mar 23, 2006, 8:31:32 AM (19 years ago)
Author:
darin
Message:

Reviewed by Maciej.

  • bindings/c/c_utility.h: Remove NPN_UTF16FromString declaration (not implemented).
  • bindings/c/c_utility.cpp: (KJS::Bindings::convertValueToNPVariant): Use DOUBLE_TO_NPVARIANT, BOOLEAN_TO_NPVARIANT, VOID_TO_NPVARIANT, NULL_TO_NPVARIANT, and OBJECT_TO_NPVARIANT. In the case of OBJECT, call _NPN_RetainObject in one case and remove a _NPN_ReleaseObject in another because this should return a retained value. (KJS::Bindings::convertNPVariantToValue): Use NPVARIANT_TO_BOOLEAN, NPVARIANT_TO_INT32, and NPVARIANT_TO_DOUBLE.
  • bindings/c/c_runtime.h: Removed implementations of CMethod::name and CField::name that called _NPN_UTF8FromIdentifier and hence leaked.
  • bindings/c/c_runtime.cpp: (KJS::Bindings::CMethod::name): Added. Returns the string from inside the method object. (KJS::Bindings::CField::name): Added. Returns the string from inside the field object. (KJS::Bindings::CField::valueFromInstance): Added call to _NPN_ReleaseVariantValue on the result of getProperty after using it to fix a storage leak. (KJS::Bindings::CField::setValueToInstance): Added call to _NPN_ReleaseVariantValue after pasing a value to setProperty now that the conversion function does a retain.
  • bindings/c/c_instance.cpp: (KJS::Bindings::CInstance::invokeMethod): Changed to use Vector for a local stack buffer. Removed special case for NPVARIANT_IS_VOID because the convertNPVariantToValue function handles that properly. (KJS::Bindings::CInstance::invokeDefaultMethod): Ditto.
  • bindings/NP_jsobject.h: Formatting changes only.
  • bindings/NP_jsobject.cpp: (jsDeallocate): Changed parameter type so we don't need a function cast. (_NPN_InvokeDefault): Use VOID_TO_NPVARIANT. (_NPN_Invoke): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT. (_NPN_Evaluate): Use VOID_TO_NPVARIANT. (_NPN_GetProperty): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.
  • bindings/c/c_class.cpp: Formatting changes only.
  • bindings/c/c_class.h: Formatting changes only.
  • bindings/npruntime_priv.h: Removed obsolete and now-unused functions: NPN_VariantIsVoid, NPN_VariantIsNull, NPN_VariantIsUndefined, NPN_VariantIsBool, NPN_VariantIsInt32, NPN_VariantIsDouble, NPN_VariantIsString, NPN_VariantIsObject, NPN_VariantToBool, NPN_VariantToInt32, NPN_VariantToDouble, NPN_VariantToString, NPN_VariantToStringCopy, NPN_VariantToObject, NPN_InitializeVariantAsVoid, NPN_InitializeVariantAsNull, NPN_InitializeVariantAsUndefined, NPN_InitializeVariantWithBool, NPN_InitializeVariantWithInt32, NPN_InitializeVariantWithDouble, NPN_InitializeVariantWithString, NPN_InitializeVariantWithObject, and NPN_InitializeVariantWithVariant.
  • bindings/npruntime.cpp: (getIntIdentifierDictionary): Don't bother creating custom callbacks for the integer dictionary since the default behavior is fine for integers.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/bindings/NP_jsobject.cpp

    r13015 r13455  
    11/*
    2  * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
     2 * Copyright (C) 2004, 2006 Apple Computer, Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2323 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
     25
    2526#include "config.h"
    26 #include <NP_jsobject.h>
    27 
    28 #include <JavaScriptCore/npruntime.h>
    29 #include <JavaScriptCore/c_utility.h>
    30 #include <JavaScriptCore/npruntime_impl.h>
    31 #include <JavaScriptCore/npruntime_priv.h>
     27#include "NP_jsobject.h"
     28
     29#include "c_utility.h"
     30#include "identifier.h"
     31#include "interpreter.h"
     32#include "list.h"
     33#include "npruntime.h"
     34#include "npruntime_impl.h"
     35#include "npruntime_priv.h"
     36#include "runtime_root.h"
    3237
    3338using namespace KJS;
    3439using namespace KJS::Bindings;
    3540
    36 
    37 static KJS::List listFromVariantArgs(KJS::ExecState *exec, const NPVariant *args, unsigned argCount)
    38 {
    39     KJS::List aList;
    40     unsigned i;
    41     const NPVariant *v = args;
    42    
    43     for (i = 0; i < argCount; i++) {
    44         aList.append (convertNPVariantToValue (exec, v));
    45         v++;
    46     }
    47    
     41static List listFromVariantArgs(ExecState* exec, const NPVariant* args, unsigned argCount)
     42{
     43    List aList;
     44    for (unsigned i = 0; i < argCount; i++)
     45        aList.append(convertNPVariantToValue(exec, &args[i]));   
    4846    return aList;
    4947}
     
    5452}
    5553
    56 static void jsDeallocate (JavaScriptObject *obj)
    57 {
    58     free (obj);
    59 }
    60 
    61 static NPClass _javascriptClass = {
    62     1,
    63     jsAllocate,
    64     (NPDeallocateFunctionPtr)jsDeallocate,
    65     0,
    66     0,
    67     0,
    68     0,
    69     0,
    70     0,
    71     0,
    72     0
    73 };
    74 
    75 static NPClass _noScriptClass = {
    76     1,
    77     0,
    78     0,
    79     0,
    80     0,
    81     0,
    82     0,
    83     0,
    84     0,
    85     0,
    86     0
    87 };
    88 
    89 NPClass *NPScriptObjectClass = &_javascriptClass;
    90 NPClass *NPNoScriptObjectClass = &_noScriptClass;
    91 
    92 static Identifier identifierFromNPIdentifier(const NPUTF8 *name)
     54static void jsDeallocate(NPObject* obj)
     55{
     56    free(obj);
     57}
     58
     59static NPClass javascriptClass = { 1, jsAllocate, jsDeallocate, 0, 0, 0, 0, 0, 0, 0, 0 };
     60static NPClass noScriptClass = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
     61
     62NPClass* NPScriptObjectClass = &javascriptClass;
     63static NPClass* NPNoScriptObjectClass = &noScriptClass;
     64
     65static Identifier identifierFromNPIdentifier(const NPUTF8* name)
    9366{
    9467    NPUTF16 *methodName;
    95     unsigned int UTF16Length;
    96    
    97     convertUTF8ToUTF16 (name, -1, &methodName, &UTF16Length); // requires free() of returned memory.
    98     Identifier identifier ((const KJS::UChar*)methodName, UTF16Length);
    99     free ((void *)methodName);
    100    
     68    unsigned UTF16Length;
     69    convertUTF8ToUTF16(name, -1, &methodName, &UTF16Length); // requires free() of returned memory.
     70    Identifier identifier((const KJS::UChar*)methodName, UTF16Length);
     71    free(methodName);
    10172    return identifier;
    10273}
    10374
    104 static bool _isSafeScript(JavaScriptObject *obj)
     75static bool _isSafeScript(JavaScriptObject* obj)
    10576{
    10677    if (obj->originExecutionContext) {
    107         Interpreter *originInterpreter = obj->originExecutionContext->interpreter();
    108         if (originInterpreter) {
    109             return originInterpreter->isSafeScript (obj->executionContext->interpreter());
    110         }
     78        Interpreter* originInterpreter = obj->originExecutionContext->interpreter();
     79        if (originInterpreter)
     80            return originInterpreter->isSafeScript(obj->executionContext->interpreter());
    11181    }
    11282    return true;
    11383}
    11484
    115 NPObject *_NPN_CreateScriptObject (NPP npp, KJS::JSObject *imp, const KJS::Bindings::RootObject *originExecutionContext, const KJS::Bindings::RootObject *executionContext)
    116 {
    117     JavaScriptObject *obj = (JavaScriptObject *)_NPN_CreateObject(npp, NPScriptObjectClass);
     85NPObject *_NPN_CreateScriptObject (NPP npp, JSObject *imp, const RootObject *originExecutionContext, const RootObject *executionContext)
     86{
     87    JavaScriptObject* obj = (JavaScriptObject*)_NPN_CreateObject(npp, NPScriptObjectClass);
    11888
    11989    obj->imp = imp;
     
    12191    obj->executionContext = executionContext;   
    12292
    123     addNativeReference (executionContext, imp);
    124    
     93    addNativeReference(executionContext, imp);
     94
    12595    return (NPObject *)obj;
    12696}
     
    131101}
    132102
    133 bool _NPN_InvokeDefault (NPP, NPObject* o, const NPVariant* args, uint32_t argCount, NPVariant* result)
    134 {
    135     if (o->_class == NPScriptObjectClass) {
    136         // No notion of a default function on JS objects.  Just return false, can't handle.
     103bool _NPN_InvokeDefault(NPP, NPObject* o, const NPVariant* args, uint32_t argCount, NPVariant* result)
     104{
     105    if (o->_class == NPScriptObjectClass)
     106        // No notion of a default function on JS objects. Just return false, can't handle.
    137107        return false;
    138     }
    139     else {
    140         if (o->_class->invokeDefault) {
    141             return o->_class->invokeDefault (o, args, argCount, result);
    142         }
    143     }
    144    
    145     NPN_InitializeVariantAsUndefined(result);
     108    if (o->_class->invokeDefault)
     109        return o->_class->invokeDefault(o, args, argCount, result);   
     110    VOID_TO_NPVARIANT(*result);
    146111    return true;
    147112}
    148113
    149 bool _NPN_Invoke (NPP npp, NPObject *o, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result)
    150 {
    151     if (o->_class == NPScriptObjectClass) {
    152         JavaScriptObject *obj = (JavaScriptObject *)o;
    153        
    154         if (!_isSafeScript(obj))
    155             return false;
    156            
    157         PrivateIdentifier *i = (PrivateIdentifier *)methodName;
     114bool _NPN_Invoke(NPP npp, NPObject* o, NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result)
     115{
     116    if (o->_class == NPScriptObjectClass) {
     117        JavaScriptObject* obj = (JavaScriptObject*)o;
     118        if (!_isSafeScript(obj))
     119            return false;
     120
     121        PrivateIdentifier* i = (PrivateIdentifier*)methodName;
    158122        if (!i->isString)
    159123            return false;
    160            
     124
    161125        // Special case the "eval" method.
    162126        if (methodName == _NPN_GetStringIdentifier("eval")) {
     
    165129            if (args[0].type != NPVariantType_String)
    166130                return false;
    167            
    168             return _NPN_Evaluate (npp, o, (NPString *)&args[0].value.stringValue, result);
     131            return _NPN_Evaluate(npp, o, (NPString *)&args[0].value.stringValue, result);
    169132        }
    170         else {
    171             // Lookup the function object.
    172             ExecState *exec = obj->executionContext->interpreter()->globalExec();
    173             JSLock lock;
    174             JSValue *func = obj->imp->get (exec, identifierFromNPIdentifier(i->value.string));
    175 
    176             if (func->isNull()) {
    177                 NPN_InitializeVariantAsNull(result);
    178                 return false;
    179             } else if (func->isUndefined()) {
    180                 NPN_InitializeVariantAsUndefined(result);
    181                 return false;
    182             } else {
    183                 // Call the function object.
    184                 JSObject *funcImp = static_cast<JSObject*>(func);
    185                 JSObject *thisObj = const_cast<JSObject*>(obj->imp);
    186                 List argList = listFromVariantArgs(exec, args, argCount);
    187                 JSValue *resultV = funcImp->call (exec, thisObj, argList);
    188 
    189                 // Convert and return the result of the function call.
    190                 convertValueToNPVariant(exec, resultV, result);
    191                 return true;
    192             }
    193         }
    194     } else if (o->_class->invoke)
    195         return o->_class->invoke (o, methodName, args, argCount, result);
     133
     134        // Lookup the function object.
     135        ExecState* exec = obj->executionContext->interpreter()->globalExec();
     136        JSLock lock;
     137        JSValue* func = obj->imp->get(exec, identifierFromNPIdentifier(i->value.string));
     138        if (func->isNull()) {
     139            NULL_TO_NPVARIANT(*result);
     140            return false;
     141        }
     142        if (func->isUndefined()) {
     143            VOID_TO_NPVARIANT(*result);
     144            return false;
     145        }
     146        // Call the function object.
     147        JSObject *funcImp = static_cast<JSObject*>(func);
     148        JSObject *thisObj = const_cast<JSObject*>(obj->imp);
     149        List argList = listFromVariantArgs(exec, args, argCount);
     150        JSValue *resultV = funcImp->call (exec, thisObj, argList);
     151
     152        // Convert and return the result of the function call.
     153        convertValueToNPVariant(exec, resultV, result);
     154        return true;
     155    }
     156
     157    if (o->_class->invoke)
     158        return o->_class->invoke(o, methodName, args, argCount, result);
    196159   
    197     NPN_InitializeVariantAsUndefined(result);
     160    VOID_TO_NPVARIANT(*result);
    198161    return true;
    199162}
     
    208171
    209172        ExecState* exec = obj->executionContext->interpreter()->globalExec();
    210         JSValue* result;
    211173       
    212174        JSLock lock;
    213175        NPUTF16* scriptString;
    214176        unsigned int UTF16Length;
    215         convertNPStringToUTF16 (s, &scriptString, &UTF16Length);    // requires free() of returned memory.
     177        convertNPStringToUTF16(s, &scriptString, &UTF16Length); // requires free() of returned memory
    216178        Completion completion = obj->executionContext->interpreter()->evaluate(UString(), 0, UString((const UChar*)scriptString,UTF16Length));
    217179        ComplType type = completion.complType();
    218180       
     181        JSValue* result;
    219182        if (type == Normal) {
    220183            result = completion.value();
    221             if (!result) {
     184            if (!result)
    222185                result = jsUndefined();
    223             }
    224         }
    225         else
     186        } else
    226187            result = jsUndefined();
    227            
    228         free ((void *)scriptString);
    229        
     188
     189        free(scriptString);
     190
    230191        convertValueToNPVariant(exec, result, variant);
    231192   
     
    233194    }
    234195
    235     NPN_InitializeVariantAsUndefined(variant);
    236     return false;
    237 }
    238 
    239 bool _NPN_GetProperty (NPP, NPObject* o, NPIdentifier propertyName, NPVariant* variant)
    240 {
    241     if (o->_class == NPScriptObjectClass) {
    242         JavaScriptObject *obj = (JavaScriptObject *)o;
    243 
    244         if (!_isSafeScript(obj))
    245             return false;
    246 
    247         ExecState *exec = obj->executionContext->interpreter()->globalExec();
    248 
    249         PrivateIdentifier *i = (PrivateIdentifier *)propertyName;
     196    VOID_TO_NPVARIANT(*variant);
     197    return false;
     198}
     199
     200bool _NPN_GetProperty(NPP, NPObject* o, NPIdentifier propertyName, NPVariant* variant)
     201{
     202    if (o->_class == NPScriptObjectClass) {
     203        JavaScriptObject* obj = (JavaScriptObject*)o;
     204        if (!_isSafeScript(obj))
     205            return false;
     206
     207        ExecState* exec = obj->executionContext->interpreter()->globalExec();
     208        PrivateIdentifier* i = (PrivateIdentifier*)propertyName;
    250209       
    251210        JSLock lock;
    252211        JSValue *result;
    253         if (i->isString) {
    254             result = obj->imp->get (exec, identifierFromNPIdentifier(i->value.string));
    255         } else {
    256             result = obj->imp->get (exec, i->value.number);
     212        if (i->isString)
     213            result = obj->imp->get(exec, identifierFromNPIdentifier(i->value.string));
     214        else
     215            result = obj->imp->get(exec, i->value.number);
     216
     217        if (result->isNull()) {
     218            NULL_TO_NPVARIANT(*variant);
     219            return false;
    257220        }
    258 
    259         if (result->isNull()) {
    260             NPN_InitializeVariantAsNull(variant);
     221        if (result->isUndefined()) {
     222            VOID_TO_NPVARIANT(*variant);
    261223            return false;
    262224        }
    263         else if (result->isUndefined()) {
    264             NPN_InitializeVariantAsUndefined(variant);
    265             return false;
    266         }
    267         else {
    268             convertValueToNPVariant(exec, result, variant);
    269         }
    270 
    271         return true;
    272     }
    273     else if (o->_class->hasProperty && o->_class->getProperty) {
    274         if (o->_class->hasProperty (o, propertyName)) {
    275             return o->_class->getProperty (o, propertyName, variant);
    276         }
    277         else {
    278             return false;
    279         }
    280     }
    281 
    282     NPN_InitializeVariantAsUndefined(variant);
    283     return false;
    284 }
    285 
    286 bool _NPN_SetProperty (NPP, NPObject* o, NPIdentifier propertyName, const NPVariant* variant)
    287 {
    288     if (o->_class == NPScriptObjectClass) {
    289         JavaScriptObject *obj = (JavaScriptObject *)o;
    290 
    291         if (!_isSafeScript(obj))
    292             return false;
    293 
    294         ExecState *exec = obj->executionContext->interpreter()->globalExec();
    295         JSLock lock;
    296         PrivateIdentifier *i = (PrivateIdentifier *)propertyName;
     225        convertValueToNPVariant(exec, result, variant);
     226        return true;
     227    }
     228
     229    if (o->_class->hasProperty && o->_class->getProperty) {
     230        if (o->_class->hasProperty(o, propertyName))
     231            return o->_class->getProperty(o, propertyName, variant);
     232        return false;
     233    }
     234
     235    VOID_TO_NPVARIANT(*variant);
     236    return false;
     237}
     238
     239bool _NPN_SetProperty(NPP, NPObject* o, NPIdentifier propertyName, const NPVariant* variant)
     240{
     241    if (o->_class == NPScriptObjectClass) {
     242        JavaScriptObject* obj = (JavaScriptObject*)o;
     243        if (!_isSafeScript(obj))
     244            return false;
     245
     246        ExecState* exec = obj->executionContext->interpreter()->globalExec();
     247        JSLock lock;
     248        PrivateIdentifier* i = (PrivateIdentifier*)propertyName;
    297249        if (i->isString)
    298250            obj->imp->put(exec, identifierFromNPIdentifier(i->value.string), convertNPVariantToValue(exec, variant));
    299251        else
    300252            obj->imp->put(exec, i->value.number, convertNPVariantToValue(exec, variant));
     253        return true;
     254    }
     255
     256    if (o->_class->setProperty)
     257        return o->_class->setProperty(o, propertyName, variant);
     258
     259    return false;
     260}
     261
     262bool _NPN_RemoveProperty(NPP, NPObject* o, NPIdentifier propertyName)
     263{
     264    if (o->_class == NPScriptObjectClass) {
     265        JavaScriptObject* obj = (JavaScriptObject*)o;
     266        if (!_isSafeScript(obj))
     267            return false;
     268
     269        ExecState* exec = obj->executionContext->interpreter()->globalExec();
     270        PrivateIdentifier* i = (PrivateIdentifier*)propertyName;
     271        if (i->isString) {
     272            if (!obj->imp->hasProperty(exec, identifierFromNPIdentifier(i->value.string)))
     273                return false;
     274        } else {
     275            if (!obj->imp->hasProperty(exec, i->value.number))
     276                return false;
     277        }
     278
     279        JSLock lock;
     280        if (i->isString)
     281            obj->imp->deleteProperty(exec, identifierFromNPIdentifier(i->value.string));
     282        else
     283            obj->imp->deleteProperty(exec, i->value.number);
    301284       
    302285        return true;
    303     } else if (o->_class->setProperty)
    304         return o->_class->setProperty (o, propertyName, variant);
    305 
    306     return false;
    307 }
    308 
    309 bool _NPN_RemoveProperty (NPP, NPObject* o, NPIdentifier propertyName)
    310 {
    311     if (o->_class == NPScriptObjectClass) {
    312         JavaScriptObject *obj = (JavaScriptObject *)o;
    313 
    314         if (!_isSafeScript(obj))
    315             return false;
    316 
    317         ExecState *exec = obj->executionContext->interpreter()->globalExec();
    318 
    319         PrivateIdentifier *i = (PrivateIdentifier *)propertyName;
    320         if (i->isString) {
    321             if (!obj->imp->hasProperty (exec, identifierFromNPIdentifier(i->value.string))) {
    322                 return false;
    323             }
    324         }
    325         else {
    326             if (!obj->imp->hasProperty (exec, i->value.number)) {
    327                 return false;
    328             }
    329         }
    330 
    331         JSLock lock;
    332         if (i->isString)
    333             obj->imp->deleteProperty (exec, identifierFromNPIdentifier(i->value.string));
    334         else
    335             obj->imp->deleteProperty (exec, i->value.number);
    336        
    337         return true;
    338286    }
    339287    return false;
     
    343291{
    344292    if (o->_class == NPScriptObjectClass) {
    345         JavaScriptObject *obj = (JavaScriptObject *)o;
    346 
    347         if (!_isSafeScript(obj))
    348             return false;
    349 
    350         ExecState *exec = obj->executionContext->interpreter()->globalExec();
    351 
    352         PrivateIdentifier *i = (PrivateIdentifier *)propertyName;
    353         JSLock lock;
    354 
     293        JavaScriptObject* obj = (JavaScriptObject*)o;
     294        if (!_isSafeScript(obj))
     295            return false;
     296
     297        ExecState* exec = obj->executionContext->interpreter()->globalExec();
     298        PrivateIdentifier* i = (PrivateIdentifier*)propertyName;
     299        JSLock lock;
    355300        if (i->isString)
    356301            return obj->imp->hasProperty(exec, identifierFromNPIdentifier(i->value.string));
    357        
    358302        return obj->imp->hasProperty(exec, i->value.number);
    359     } else if (o->_class->hasProperty)
    360         return o->_class->hasProperty (o, propertyName);
     303    }
     304
     305    if (o->_class->hasProperty)
     306        return o->_class->hasProperty(o, propertyName);
     307
     308    return false;
     309}
     310
     311bool _NPN_HasMethod(NPP, NPObject* o, NPIdentifier methodName)
     312{
     313    if (o->_class == NPScriptObjectClass) {
     314        JavaScriptObject* obj = (JavaScriptObject*)o;
     315        if (!_isSafeScript(obj))
     316            return false;
     317
     318        PrivateIdentifier* i = (PrivateIdentifier*)methodName;
     319        if (!i->isString)
     320            return false;
     321
     322        ExecState* exec = obj->executionContext->interpreter()->globalExec();
     323        JSLock lock;
     324        JSValue* func = obj->imp->get(exec, identifierFromNPIdentifier(i->value.string));
     325        return !func->isUndefined();
     326    }
    361327   
    362     return false;
    363 }
    364 
    365 bool _NPN_HasMethod(NPP, NPObject* o, NPIdentifier methodName)
    366 {
    367     if (o->_class == NPScriptObjectClass) {
    368         JavaScriptObject *obj = (JavaScriptObject *)o;
    369        
    370         if (!_isSafeScript(obj))
    371             return false;
    372 
    373         PrivateIdentifier *i = (PrivateIdentifier *)methodName;
    374         if (!i->isString)
    375             return false;
    376            
    377         // Lookup the function object.
    378         ExecState *exec = obj->executionContext->interpreter()->globalExec();
    379 
    380         JSLock lock;
    381         JSValue *func = obj->imp->get (exec, identifierFromNPIdentifier(i->value.string));
    382 
    383         if (func->isUndefined()) {
    384             return false;
    385         }
    386        
    387         return true;
    388     }
     328    if (o->_class->hasMethod)
     329        return o->_class->hasMethod(o, methodName);
    389330   
    390     else if (o->_class->hasMethod) {
    391         return o->_class->hasMethod (o, methodName);
    392     }
    393    
    394     return false;
    395 }
    396 
    397 void _NPN_SetException(NPObject *o, const NPUTF8 *message)
    398 {
    399     if (o->_class == NPScriptObjectClass) {
    400         JavaScriptObject *obj = (JavaScriptObject *)o;
    401         ExecState *exec = obj->executionContext->interpreter()->globalExec();
     331    return false;
     332}
     333
     334void _NPN_SetException(NPObject* o, const NPUTF8* message)
     335{
     336    if (o->_class == NPScriptObjectClass) {
     337        JavaScriptObject* obj = (JavaScriptObject*)o;
     338        ExecState* exec = obj->executionContext->interpreter()->globalExec();
    402339        JSLock lock;
    403340        throwError(exec, GeneralError, message);
Note: See TracChangeset for help on using the changeset viewer.