Changeset 14549 for S60/trunk/JavaScriptCore
- Timestamp:
- 05/23/06 15:48:06 (3 years ago)
- Location:
- S60/trunk/JavaScriptCore
- Files:
-
- 16 added
- 114 modified
-
bindings/NP_jsobject.cpp (modified) (13 diffs)
-
bindings/NP_jsobject.h (modified) (1 diff)
-
bindings/c/c_instance.cpp (modified) (3 diffs)
-
bindings/c/c_instance.h (modified) (1 diff)
-
bindings/c/c_utility.cpp (modified) (2 diffs)
-
bindings/jni/jni_class.cpp (modified) (4 diffs)
-
bindings/jni/jni_class.h (modified) (3 diffs)
-
bindings/jni/jni_instance.cpp (modified) (5 diffs)
-
bindings/jni/jni_instance.h (modified) (3 diffs)
-
bindings/jni/jni_jsobject.cpp (modified) (13 diffs)
-
bindings/jni/jni_objc.mm (added)
-
bindings/jni/jni_runtime.cpp (modified) (9 diffs)
-
bindings/jni/jni_utility.cpp (modified) (4 diffs)
-
bindings/npruntime.cpp (modified) (2 diffs)
-
bindings/npruntime.h (modified) (1 diff)
-
bindings/npruntime_impl.h (modified) (1 diff)
-
bindings/objc/WebScriptObject.mm (added)
-
bindings/objc/WebScriptObjectPrivate.h (modified) (1 diff)
-
bindings/objc/objc_class.mm (added)
-
bindings/objc/objc_instance.h (modified) (3 diffs)
-
bindings/objc/objc_instance.mm (added)
-
bindings/objc/objc_jsobject.mm (added)
-
bindings/objc/objc_runtime.h (modified) (2 diffs)
-
bindings/objc/objc_runtime.mm (added)
-
bindings/objc/objc_utility.h (modified) (2 diffs)
-
bindings/objc/objc_utility.mm (added)
-
bindings/runtime.cpp (modified) (2 diffs)
-
bindings/runtime.h (modified) (3 diffs)
-
bindings/runtime_array.cpp (modified) (2 diffs)
-
bindings/runtime_array.h (modified) (2 diffs)
-
bindings/runtime_method.cpp (modified) (1 diff)
-
bindings/runtime_object.cpp (modified) (7 diffs)
-
bindings/runtime_object.h (modified) (3 diffs)
-
bindings/runtime_root.cpp (modified) (5 diffs)
-
bindings/runtime_root.h (modified) (4 diffs)
-
bindings/testbindings.cpp (modified) (2 diffs)
-
bindings/testbindings.mm (added)
-
group/Bwinscw/JAVASCRIPTCOREU.DEF (modified) (1 diff)
-
group/EABI/JavaScriptCore_gcceU.def (added)
-
group/EABI/JavascriptCoreU.def (modified) (4 diffs)
-
group/JavaScriptCore.mmp (modified) (5 diffs)
-
group/bld.inf (modified) (1 diff)
-
group/defs.mmpi (modified) (1 diff)
-
group/kjstest.mmp (modified) (1 diff)
-
group/pcre.mmp (modified) (1 diff)
-
group/pcretest.mmp (modified) (1 diff)
-
kjs/Makefile.am (modified) (1 diff)
-
kjs/array_instance.h (modified) (1 diff)
-
kjs/array_object.cpp (modified) (19 diffs)
-
kjs/bool_object.cpp (modified) (1 diff)
-
kjs/collector.cpp (modified) (39 diffs)
-
kjs/collector.h (modified) (2 diffs)
-
kjs/completion.h (modified) (2 diffs)
-
kjs/config.h (modified) (1 diff)
-
kjs/context.h (modified) (2 diffs)
-
kjs/date_object.cpp (modified) (27 diffs)
-
kjs/date_object.h (modified) (1 diff)
-
kjs/debugger.cpp (modified) (4 diffs)
-
kjs/debugger.h (modified) (3 diffs)
-
kjs/dtoa.cpp (modified) (6 diffs)
-
kjs/fast_malloc.cpp (added)
-
kjs/fast_malloc.h (added)
-
kjs/function.cpp (modified) (19 diffs)
-
kjs/function.h (modified) (4 diffs)
-
kjs/function_object.cpp (modified) (3 diffs)
-
kjs/grammar.cpp (modified) (6 diffs)
-
kjs/grammar.h (modified) (2 diffs)
-
kjs/grammar.tab.h (added)
-
kjs/grammar.y (modified) (5 diffs)
-
kjs/grammer.make (added)
-
kjs/identifier.cpp (modified) (15 diffs)
-
kjs/identifier.h (modified) (5 diffs)
-
kjs/internal.cpp (modified) (29 diffs)
-
kjs/internal.h (modified) (14 diffs)
-
kjs/interpreter.cpp (modified) (9 diffs)
-
kjs/interpreter.h (modified) (9 diffs)
-
kjs/interpreter_map.cpp (modified) (11 diffs)
-
kjs/interpreter_map.h (modified) (3 diffs)
-
kjs/kjs_css.lut.h (added)
-
kjs/lexer.cpp (modified) (2 diffs)
-
kjs/lexer.h (modified) (1 diff)
-
kjs/list.cpp (modified) (12 diffs)
-
kjs/list.h (modified) (6 diffs)
-
kjs/lookup.cpp (modified) (1 diff)
-
kjs/lookup.h (modified) (1 diff)
-
kjs/math_object.cpp (modified) (3 diffs)
-
kjs/math_object.h (modified) (1 diff)
-
kjs/nodes.cpp (modified) (103 diffs)
-
kjs/nodes.h (modified) (66 diffs)
-
kjs/nodes2string.cpp (modified) (11 diffs)
-
kjs/number_object.cpp (modified) (1 diff)
-
kjs/object.cpp (modified) (4 diffs)
-
kjs/object.h (modified) (11 diffs)
-
kjs/object_object.cpp (modified) (2 diffs)
-
kjs/object_object.h (modified) (2 diffs)
-
kjs/operations.cpp (modified) (7 diffs)
-
kjs/operations.h (modified) (2 diffs)
-
kjs/property_map.cpp (modified) (30 diffs)
-
kjs/property_map.h (modified) (3 diffs)
-
kjs/protect.h (modified) (4 diffs)
-
kjs/protected_values.cpp (modified) (19 diffs)
-
kjs/protected_values.h (modified) (2 diffs)
-
kjs/reference.cpp (modified) (8 diffs)
-
kjs/reference.h (modified) (1 diff)
-
kjs/reference_list.h (modified) (2 diffs)
-
kjs/regexp.cpp (modified) (2 diffs)
-
kjs/regexp.h (modified) (1 diff)
-
kjs/scope_chain.cpp (modified) (2 diffs)
-
kjs/scope_chain.h (modified) (5 diffs)
-
kjs/shared_ptr.h (added)
-
kjs/simple_number.h (modified) (3 diffs)
-
kjs/stdint.h (modified) (2 diffs)
-
kjs/string_object.cpp (modified) (14 diffs)
-
kjs/string_object.h (modified) (1 diff)
-
kjs/testkjs.cpp (modified) (3 diffs)
-
kjs/ustring.cpp (modified) (39 diffs)
-
kjs/ustring.h (modified) (16 diffs)
-
kjs/value.cpp (modified) (7 diffs)
-
kjs/value.h (modified) (10 diffs)
-
pcre/Makefile.am (modified) (1 diff)
-
pcre/dftables.c (modified) (4 diffs)
-
pcre/internal.h (modified) (3 diffs)
-
pcre/maketables.c (modified) (2 diffs)
-
pcre/pcre.c (modified) (56 diffs)
-
pcre/pcre.h (modified) (1 diff)
-
pcre/pcretest.c (modified) (18 diffs)
-
pcre/stub.cpp (modified) (1 diff)
-
pcre/stub.h (modified) (1 diff)
-
pcre/study.c (modified) (9 diffs)
-
tests/Distribution.Policy.S60 (added)
Legend:
- Unmodified
- Added
- Removed
-
S60/trunk/JavaScriptCore/bindings/NP_jsobject.cpp
r14062 r14549 74 74 NPClass *NPScriptObjectClass = &_javascriptClass; 75 75 76 Identifier identiferFromNPIdentifier(const NPUTF8 *name)76 static Identifier identifierFromNPIdentifier(const NPUTF8 *name) 77 77 { 78 78 NPUTF16 *methodName; … … 86 86 } 87 87 88 NPObject *_NPN_CreateScriptObject (NPP npp, KJS::ObjectImp *imp, KJS::Bindings::RootObject *root) 88 static bool _isSafeScript(JavaScriptObject *obj) 89 { 90 if (obj->originExecutionContext) { 91 Interpreter *originInterpreter = obj->originExecutionContext->interpreter(); 92 if (originInterpreter) { 93 return originInterpreter->isSafeScript (obj->executionContext->interpreter()); 94 } 95 } 96 return true; 97 } 98 99 NPObject *_NPN_CreateScriptObject (NPP npp, KJS::ObjectImp *imp, const KJS::Bindings::RootObject *originExecutionContext, const KJS::Bindings::RootObject *executionContext) 89 100 { 90 101 JavaScriptObject *obj = (JavaScriptObject *)_NPN_CreateObject(npp, NPScriptObjectClass); 91 102 92 103 obj->imp = imp; 93 obj->root = root; 94 95 addNativeReference (root, imp); 104 obj->originExecutionContext = originExecutionContext; 105 obj->executionContext = executionContext; 106 107 addNativeReference (executionContext, imp); 96 108 97 109 return (NPObject *)obj; … … 118 130 JavaScriptObject *obj = (JavaScriptObject *)o; 119 131 132 if (!_isSafeScript(obj)) 133 return false; 134 120 135 PrivateIdentifier *i = (PrivateIdentifier *)methodName; 121 136 if (!i->isString) 122 137 return false; 123 138 124 // Lookup the function object. 125 ExecState *exec = obj->root->interpreter()->globalExec(); 126 Interpreter::lock(); 127 Value func = obj->imp->get (exec, identiferFromNPIdentifier(i->value.string)); 128 Interpreter::unlock(); 129 130 if (func.isNull()) { 131 NPN_InitializeVariantAsNull(result); 132 return false; 133 } 134 else if ( func.type() == UndefinedType) { 135 NPN_InitializeVariantAsUndefined(result); 136 return false; 137 } 138 else { 139 // Call the function object. 140 ObjectImp *funcImp = static_cast<ObjectImp*>(func.imp()); 141 Object thisObj = Object(const_cast<ObjectImp*>(obj->imp)); 142 List argList = listFromVariantArgs(exec, args, argCount); 143 Interpreter::lock(); 144 Value resultV = funcImp->call (exec, thisObj, argList); 145 Interpreter::unlock(); 146 147 // Convert and return the result of the function call. 148 convertValueToNPVariant(exec, resultV, result); 149 return true; 150 } 151 } 152 else { 153 if (o->_class->invoke) { 154 return o->_class->invoke (o, methodName, args, argCount, result); 155 } 156 } 139 // Special case the "eval" method. 140 if (methodName == _NPN_GetStringIdentifier("eval")) { 141 if (argCount != 1) 142 return false; 143 if (args[0].type != NPVariantType_String) 144 return false; 145 146 return _NPN_Evaluate (npp, o, (NPString *)&args[0].value.stringValue, result); 147 } 148 else { 149 // Lookup the function object. 150 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 151 InterpreterLock lock; 152 Value func = obj->imp->get (exec, identifierFromNPIdentifier(i->value.string)); 153 154 if (func.isNull()) { 155 NPN_InitializeVariantAsNull(result); 156 return false; 157 } else if (func.type() == UndefinedType) { 158 NPN_InitializeVariantAsUndefined(result); 159 return false; 160 } else { 161 // Call the function object. 162 ObjectImp *funcImp = static_cast<ObjectImp*>(func.imp()); 163 Object thisObj = Object(const_cast<ObjectImp*>(obj->imp)); 164 List argList = listFromVariantArgs(exec, args, argCount); 165 Value resultV = Object(funcImp).call (exec, thisObj, argList); 166 167 // Convert and return the result of the function call. 168 convertValueToNPVariant(exec, resultV, result); 169 return true; 170 } 171 } 172 } else if (o->_class->invoke) 173 return o->_class->invoke (o, methodName, args, argCount, result); 157 174 158 175 return true; … … 164 181 JavaScriptObject *obj = (JavaScriptObject *)o; 165 182 166 ExecState *exec = obj->root->interpreter()->globalExec(); 183 if (!_isSafeScript(obj)) 184 return false; 185 186 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 167 187 Object thisObj = Object(const_cast<ObjectImp*>(obj->imp)); 168 188 Value result; 169 189 170 Interpreter ::lock();190 InterpreterLock lock; 171 191 NPUTF16 *scriptString; 172 192 unsigned int UTF16Length; 173 193 convertNPStringToUTF16 (s, &scriptString, &UTF16Length); // requires free() of returned memory. 174 Completion completion = obj-> root->interpreter()->evaluate(UString(), 0, UString((const UChar *)scriptString,UTF16Length));194 Completion completion = obj->executionContext->interpreter()->evaluate(UString(), 0, UString((const UChar *)scriptString,UTF16Length)); 175 195 ComplType type = completion.complType(); 176 196 … … 184 204 result = Undefined(); 185 205 186 Interpreter::unlock();187 188 206 free ((void *)scriptString); 189 207 … … 199 217 if (o->_class == NPScriptObjectClass) { 200 218 JavaScriptObject *obj = (JavaScriptObject *)o; 201 ExecState *exec = obj->root->interpreter()->globalExec(); 219 220 if (!_isSafeScript(obj)) 221 return false; 222 223 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 202 224 203 225 PrivateIdentifier *i = (PrivateIdentifier *)propertyName; 204 226 if (i->isString) { 205 if (!obj->imp->hasProperty (exec, identif erFromNPIdentifier(i->value.string))) {227 if (!obj->imp->hasProperty (exec, identifierFromNPIdentifier(i->value.string))) { 206 228 NPN_InitializeVariantAsNull(variant); 207 229 return false; … … 215 237 } 216 238 217 Interpreter ::lock();239 InterpreterLock lock; 218 240 Value result; 219 if (i->isString) { 220 result = obj->imp->get (exec, identiferFromNPIdentifier(i->value.string)); 221 } 222 else { 241 if (i->isString) 242 result = obj->imp->get (exec, identifierFromNPIdentifier(i->value.string)); 243 else 223 244 result = obj->imp->get (exec, i->value.number); 224 } 225 Interpreter::unlock(); 226 245 227 246 if (result.isNull()) { 228 247 NPN_InitializeVariantAsNull(variant); … … 255 274 JavaScriptObject *obj = (JavaScriptObject *)o; 256 275 257 ExecState *exec = obj->root->interpreter()->globalExec(); 258 Interpreter::lock(); 259 Value result; 276 if (!_isSafeScript(obj)) 277 return false; 278 279 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 280 InterpreterLock lock; 281 PrivateIdentifier *i = (PrivateIdentifier *)propertyName; 282 if (i->isString) 283 obj->imp->put(exec, identifierFromNPIdentifier(i->value.string), convertNPVariantToValue(exec, variant)); 284 else 285 obj->imp->put(exec, i->value.number, convertNPVariantToValue(exec, variant)); 286 287 return true; 288 } else if (o->_class->setProperty) 289 return o->_class->setProperty (o, propertyName, variant); 290 291 return false; 292 } 293 294 bool _NPN_RemoveProperty (NPP npp, NPObject *o, NPIdentifier propertyName) 295 { 296 if (o->_class == NPScriptObjectClass) { 297 JavaScriptObject *obj = (JavaScriptObject *)o; 298 299 if (!_isSafeScript(obj)) 300 return false; 301 302 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 303 260 304 PrivateIdentifier *i = (PrivateIdentifier *)propertyName; 261 305 if (i->isString) { 262 obj->imp->put (exec, identiferFromNPIdentifier(i->value.string), convertNPVariantToValue(exec, variant)); 263 } 264 else { 265 obj->imp->put (exec, i->value.number, convertNPVariantToValue(exec, variant)); 266 } 267 Interpreter::unlock(); 268 269 return true; 270 } 271 else if (o->_class->setProperty) { 272 return o->_class->setProperty (o, propertyName, variant); 273 } 274 return false; 275 } 276 277 bool _NPN_RemoveProperty (NPP npp, NPObject *o, NPIdentifier propertyName) 278 { 279 if (o->_class == NPScriptObjectClass) { 280 JavaScriptObject *obj = (JavaScriptObject *)o; 281 ExecState *exec = obj->root->interpreter()->globalExec(); 282 283 PrivateIdentifier *i = (PrivateIdentifier *)propertyName; 284 if (i->isString) { 285 if (!obj->imp->hasProperty (exec, identiferFromNPIdentifier(i->value.string))) { 306 if (!obj->imp->hasProperty (exec, identifierFromNPIdentifier(i->value.string))) { 286 307 return false; 287 308 } … … 293 314 } 294 315 295 Interpreter::lock(); 296 if (i->isString) { 297 obj->imp->deleteProperty (exec, identiferFromNPIdentifier(i->value.string)); 298 } 299 else { 316 InterpreterLock lock; 317 if (i->isString) 318 obj->imp->deleteProperty (exec, identifierFromNPIdentifier(i->value.string)); 319 else 300 320 obj->imp->deleteProperty (exec, i->value.number); 301 }302 Interpreter::unlock();303 321 304 322 return true; … … 311 329 if (o->_class == NPScriptObjectClass) { 312 330 JavaScriptObject *obj = (JavaScriptObject *)o; 313 ExecState *exec = obj->root->interpreter()->globalExec(); 331 332 if (!_isSafeScript(obj)) 333 return false; 334 335 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 314 336 315 337 PrivateIdentifier *i = (PrivateIdentifier *)propertyName; 316 // String identifier? 317 if (i->isString) { 318 ExecState *exec = obj->root->interpreter()->globalExec(); 319 Interpreter::lock(); 320 bool result = obj->imp->hasProperty (exec, identiferFromNPIdentifier(i->value.string)); 321 Interpreter::unlock(); 322 return result; 323 } 324 325 // Numeric identifer 326 Interpreter::lock(); 327 bool result = obj->imp->hasProperty (exec, i->value.number); 328 Interpreter::unlock(); 329 return result; 330 } 331 else if (o->_class->hasProperty) { 338 InterpreterLock lock; 339 340 if (i->isString) 341 return obj->imp->hasProperty(exec, identifierFromNPIdentifier(i->value.string)); 342 343 return obj->imp->hasProperty(exec, i->value.number); 344 } else if (o->_class->hasProperty) 332 345 return o->_class->hasProperty (o, propertyName); 333 }334 346 335 347 return false; … … 341 353 JavaScriptObject *obj = (JavaScriptObject *)o; 342 354 355 if (!_isSafeScript(obj)) 356 return false; 357 343 358 PrivateIdentifier *i = (PrivateIdentifier *)methodName; 344 359 if (!i->isString) … … 346 361 347 362 // Lookup the function object. 348 ExecState *exec = obj-> root->interpreter()->globalExec();349 Interpreter::lock(); 350 Value func = obj->imp->get (exec, identiferFromNPIdentifier(i->value.string));351 Interpreter::unlock();363 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 364 365 InterpreterLock lock; 366 Value func = obj->imp->get (exec, identifierFromNPIdentifier(i->value.string)); 352 367 353 368 if (func.isNull() || func.type() == UndefinedType) { … … 365 380 } 366 381 367 void _NPN_SetException (NPObject *o, NPString *message) 368 { 369 if (o->_class == NPScriptObjectClass) { 370 JavaScriptObject *obj = (JavaScriptObject *)o; 371 ExecState *exec = obj->root->interpreter()->globalExec(); 372 Interpreter::lock(); 373 char *msg = (char *)malloc (message->UTF8Length + 1); 374 strncpy (msg, message->UTF8Characters, message->UTF8Length); 375 msg[message->UTF8Length] = 0; 376 Object err = Error::create(exec, GeneralError, msg); 377 free (msg); 382 void _NPN_SetException (NPObject *o, const NPUTF8 *message) 383 { 384 if (o->_class == NPScriptObjectClass) { 385 JavaScriptObject *obj = (JavaScriptObject *)o; 386 ExecState *exec = obj->executionContext->interpreter()->globalExec(); 387 InterpreterLock lock; 388 Object err = Error::create(exec, GeneralError, message); 378 389 exec->setException (err); 379 Interpreter::unlock(); 380 } 381 } 390 } 391 } -
S60/trunk/JavaScriptCore/bindings/NP_jsobject.h
r14062 r14549 42 42 NPObject object; 43 43 KJS::ObjectImp *imp; 44 KJS::Bindings::RootObject *root; 44 const KJS::Bindings::RootObject *originExecutionContext; 45 const KJS::Bindings::RootObject *executionContext; 45 46 } JavaScriptObject; 46 47 47 NPObject *_NPN_CreateScriptObject (NPP npp, KJS::ObjectImp *imp, KJS::Bindings::RootObject *root);48 NPObject *_NPN_CreateScriptObject (NPP npp, KJS::ObjectImp *imp, const KJS::Bindings::RootObject *originExecutionContext, const KJS::Bindings::RootObject *executionContext); 48 49 49 50 #ifdef __cplusplus -
S60/trunk/JavaScriptCore/bindings/c/c_instance.cpp
r14062 r14549 47 47 _object = _NPN_RetainObject (o); 48 48 _class = 0; 49 setExecutionContext (0); 49 50 }; 50 51 … … 60 61 _object = _NPN_RetainObject (other._object); 61 62 _class = 0; 63 setExecutionContext (other.executionContext()); 62 64 }; 63 65 … … 204 206 KJS::Value CInstance::stringValue() const 205 207 { 206 // FIXME: Implement something sensible, like calling toString... 207 KJS::String v(""); 208 char buf[1024]; 209 snprintf (buf, 1024, "NPObject %p, NPClass %p", _object, _object->_class); 210 KJS::String v(buf); 208 211 return v; 209 212 } -
S60/trunk/JavaScriptCore/bindings/c/c_instance.h
r14062 r14549 64 64 NPObject *getObject() const { return _object; } 65 65 66 void setExecutionContext (RootObject *r) { _root = r; }67 const RootObject *executionContext() const { return _root; }68 69 66 private: 70 67 mutable CClass *_class; 71 68 NPObject *_object; 72 RootObject *_root;73 69 }; 74 70 -
S60/trunk/JavaScriptCore/bindings/c/c_utility.cpp
r14062 r14549