Changeset 34947 in webkit for trunk/JavaScriptCore/API
- Timestamp:
- Jul 2, 2008, 12:00:53 AM (17 years ago)
- Location:
- trunk/JavaScriptCore/API
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/API/JSBase.cpp
r34659 r34947 41 41 JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception) 42 42 { 43 JSLock lock;44 43 ExecState* exec = toJS(ctx); 44 JSLock lock(exec); 45 45 JSObject* jsThisObject = toJS(thisObject); 46 46 UString::Rep* scriptRep = toJS(script); … … 66 66 bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception) 67 67 { 68 JSLock lock;69 70 68 ExecState* exec = toJS(ctx); 69 JSLock lock(exec); 71 70 UString::Rep* scriptRep = toJS(script); 72 71 UString::Rep* sourceURLRep = sourceURL ? toJS(sourceURL) : &UString::Rep::null; … … 90 89 // and it may actually be garbage for some clients (most likely, because of JSGarbageCollect being called after releasing the context). 91 90 92 JSLock lock;93 94 91 // FIXME: It would be good to avoid creating a JSGlobalData instance if it didn't exist for this thread yet. 95 92 Heap* heap = JSGlobalData::threadInstance().heap; 96 93 if (!heap->isBusy()) 97 94 heap->collect(); 95 96 JSLock lock(true); 98 97 99 98 // FIXME: Similarly, we shouldn't create a shared instance here. -
trunk/JavaScriptCore/API/JSCallbackConstructor.cpp
r34854 r34947 30 30 #include "APICast.h" 31 31 #include <kjs/JSGlobalObject.h> 32 #include <kjs/JSLock.h> 32 33 #include <kjs/ObjectPrototype.h> 33 34 #include <wtf/Vector.h> … … 69 70 arguments[i] = toRef(args[i]); 70 71 71 JSLock::DropAllLocks dropAllLocks ;72 JSLock::DropAllLocks dropAllLocks(exec); 72 73 return toJS(callback(ctx, constructorRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); 73 74 } -
trunk/JavaScriptCore/API/JSCallbackFunction.cpp
r34754 r34947 33 33 #include "FunctionPrototype.h" 34 34 #include <kjs/JSGlobalObject.h> 35 #include <kjs/JSLock.h> 35 36 #include <wtf/Vector.h> 36 37 … … 63 64 arguments[i] = toRef(args[i]); 64 65 65 JSLock::DropAllLocks dropAllLocks ;66 JSLock::DropAllLocks dropAllLocks(exec); 66 67 return toJS(static_cast<JSCallbackFunction*>(functionObject)->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); 67 68 } -
trunk/JavaScriptCore/API/JSCallbackObjectFunctions.h
r34754 r34947 30 30 #include "JSClassRef.h" 31 31 #include "JSGlobalObject.h" 32 #include "JSLock.h" 32 33 #include "JSObjectRef.h" 33 34 #include "JSString.h" … … 72 73 // initialize from base to derived 73 74 for (int i = static_cast<int>(initRoutines.size()) - 1; i >= 0; i--) { 74 JSLock::DropAllLocks dropAllLocks ;75 JSLock::DropAllLocks dropAllLocks(exec); 75 76 JSObjectInitializeCallback initialize = initRoutines[i]; 76 77 initialize(toRef(exec), toRef(this)); … … 110 111 // optional optimization to bypass getProperty in cases when we only need to know if the property exists 111 112 if (JSObjectHasPropertyCallback hasProperty = jsClass->hasProperty) { 112 JSLock::DropAllLocks dropAllLocks ;113 JSLock::DropAllLocks dropAllLocks(exec); 113 114 if (hasProperty(ctx, thisRef, propertyNameRef)) { 114 115 slot.setCustom(this, callbackGetter); … … 116 117 } 117 118 } else if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) { 118 JSLock::DropAllLocks dropAllLocks ;119 JSLock::DropAllLocks dropAllLocks(exec); 119 120 if (JSValueRef value = getProperty(ctx, thisRef, propertyNameRef, toRef(exec->exceptionSlot()))) { 120 121 // cache the value so we don't have to compute it again … … 160 161 for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) { 161 162 if (JSObjectSetPropertyCallback setProperty = jsClass->setProperty) { 162 JSLock::DropAllLocks dropAllLocks ;163 JSLock::DropAllLocks dropAllLocks(exec); 163 164 if (setProperty(ctx, thisRef, propertyNameRef, valueRef, toRef(exec->exceptionSlot()))) 164 165 return; … … 170 171 return; 171 172 if (JSObjectSetPropertyCallback setProperty = entry->setProperty) { 172 JSLock::DropAllLocks dropAllLocks ;173 JSLock::DropAllLocks dropAllLocks(exec); 173 174 if (setProperty(ctx, thisRef, propertyNameRef, valueRef, toRef(exec->exceptionSlot()))) 174 175 return; … … 206 207 for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) { 207 208 if (JSObjectDeletePropertyCallback deleteProperty = jsClass->deleteProperty) { 208 JSLock::DropAllLocks dropAllLocks ;209 JSLock::DropAllLocks dropAllLocks(exec); 209 210 if (deleteProperty(ctx, thisRef, propertyNameRef, toRef(exec->exceptionSlot()))) 210 211 return true; … … 261 262 for (int i = 0; i < argumentCount; i++) 262 263 arguments[i] = toRef(args[i]); 263 JSLock::DropAllLocks dropAllLocks ;264 JSLock::DropAllLocks dropAllLocks(exec); 264 265 return toJS(callAsConstructor(execRef, constructorRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); 265 266 } … … 288 289 for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) 289 290 if (JSObjectHasInstanceCallback hasInstance = jsClass->hasInstance) { 290 JSLock::DropAllLocks dropAllLocks ;291 JSLock::DropAllLocks dropAllLocks(exec); 291 292 return hasInstance(execRef, thisRef, toRef(value), toRef(exec->exceptionSlot())); 292 293 } … … 321 322 for (int i = 0; i < argumentCount; i++) 322 323 arguments[i] = toRef(args[i]); 323 JSLock::DropAllLocks dropAllLocks ;324 JSLock::DropAllLocks dropAllLocks(exec); 324 325 return toJS(callAsFunction(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); 325 326 } … … 338 339 for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) { 339 340 if (JSObjectGetPropertyNamesCallback getPropertyNames = jsClass->getPropertyNames) { 340 JSLock::DropAllLocks dropAllLocks ;341 JSLock::DropAllLocks dropAllLocks(exec); 341 342 getPropertyNames(execRef, thisRef, toRef(&propertyNames)); 342 343 } … … 381 382 for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass) 382 383 if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType) { 383 JSLock::DropAllLocks dropAllLocks ;384 JSLock::DropAllLocks dropAllLocks(exec); 384 385 if (JSValueRef value = convertToType(ctx, thisRef, kJSTypeNumber, toRef(exec->exceptionSlot()))) 385 386 return toJS(value)->getNumber(); … … 399 400 JSValueRef value; 400 401 { 401 JSLock::DropAllLocks dropAllLocks ;402 JSLock::DropAllLocks dropAllLocks(exec); 402 403 value = convertToType(ctx, thisRef, kJSTypeString, toRef(exec->exceptionSlot())); 403 404 } … … 452 453 if (StaticValueEntry* entry = staticValues->get(propertyName.ustring().rep())) 453 454 if (JSObjectGetPropertyCallback getProperty = entry->getProperty) { 454 JSLock::DropAllLocks dropAllLocks ;455 JSLock::DropAllLocks dropAllLocks(exec); 455 456 if (JSValueRef value = getProperty(toRef(exec), thisRef, propertyNameRef, toRef(exec->exceptionSlot()))) 456 457 return toJS(value); … … 497 498 for (JSClassRef jsClass = thisObj->m_class; jsClass; jsClass = jsClass->parentClass) 498 499 if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) { 499 JSLock::DropAllLocks dropAllLocks ;500 JSLock::DropAllLocks dropAllLocks(exec); 500 501 if (JSValueRef value = getProperty(toRef(exec), thisRef, propertyNameRef, toRef(exec->exceptionSlot()))) 501 502 return toJS(value); -
trunk/JavaScriptCore/API/JSContextRef.cpp
r34659 r34947 42 42 initializeThreading(); 43 43 44 JSLock lock ;44 JSLock lock(true); 45 45 46 46 if (!globalObjectClass) { … … 60 60 JSGlobalContextRef JSGlobalContextRetain(JSGlobalContextRef ctx) 61 61 { 62 JSLock lock;63 62 ExecState* exec = toJS(ctx); 63 JSLock lock(exec); 64 64 gcProtect(exec->dynamicGlobalObject()); 65 65 return ctx; … … 68 68 void JSGlobalContextRelease(JSGlobalContextRef ctx) 69 69 { 70 JSLock lock;71 70 ExecState* exec = toJS(ctx); 71 JSLock lock(exec); 72 72 gcUnprotect(exec->dynamicGlobalObject()); 73 73 } -
trunk/JavaScriptCore/API/JSObjectRef.cpp
r34854 r34947 48 48 JSClassRef JSClassCreate(const JSClassDefinition* definition) 49 49 { 50 JSLock lock;51 50 RefPtr<OpaqueJSClass> jsClass = (definition->attributes & kJSClassAttributeNoAutomaticPrototype) 52 51 ? OpaqueJSClass::createNoAutomaticPrototype(definition) … … 58 57 JSClassRef JSClassRetain(JSClassRef jsClass) 59 58 { 60 JSLock lock;61 59 jsClass->ref(); 62 60 return jsClass; … … 65 63 void JSClassRelease(JSClassRef jsClass) 66 64 { 67 JSLock lock;68 65 jsClass->deref(); 69 66 } … … 71 68 JSObjectRef JSObjectMake(JSContextRef ctx, JSClassRef jsClass, void* data) 72 69 { 73 JSLock lock;74 ExecState* exec = toJS(ctx);70 ExecState* exec = toJS(ctx); 71 JSLock lock(exec); 75 72 76 73 if (!jsClass) … … 86 83 JSObjectRef JSObjectMakeFunctionWithCallback(JSContextRef ctx, JSStringRef name, JSObjectCallAsFunctionCallback callAsFunction) 87 84 { 88 JSLock lock;89 ExecState* exec = toJS(ctx);85 ExecState* exec = toJS(ctx); 86 JSLock lock(exec); 90 87 Identifier nameID = name ? Identifier(exec, toJS(name)) : Identifier(exec, "anonymous"); 91 88 … … 95 92 JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsClass, JSObjectCallAsConstructorCallback callAsConstructor) 96 93 { 97 JSLock lock;98 ExecState* exec = toJS(ctx);94 ExecState* exec = toJS(ctx); 95 JSLock lock(exec); 99 96 100 97 JSValue* jsPrototype = jsClass … … 109 106 JSObjectRef JSObjectMakeFunction(JSContextRef ctx, JSStringRef name, unsigned parameterCount, const JSStringRef parameterNames[], JSStringRef body, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception) 110 107 { 111 JSLock lock;112 113 ExecState* exec = toJS(ctx); 108 ExecState* exec = toJS(ctx); 109 JSLock lock(exec); 110 114 111 UString::Rep* bodyRep = toJS(body); 115 112 UString::Rep* sourceURLRep = sourceURL ? toJS(sourceURL) : &UString::Rep::null; … … 148 145 bool JSObjectHasProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName) 149 146 { 150 JSLock lock;151 ExecState* exec = toJS(ctx);147 ExecState* exec = toJS(ctx); 148 JSLock lock(exec); 152 149 JSObject* jsObject = toJS(object); 153 150 UString::Rep* nameRep = toJS(propertyName); … … 158 155 JSValueRef JSObjectGetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception) 159 156 { 160 JSLock lock;161 ExecState* exec = toJS(ctx);157 ExecState* exec = toJS(ctx); 158 JSLock lock(exec); 162 159 JSObject* jsObject = toJS(object); 163 160 UString::Rep* nameRep = toJS(propertyName); … … 174 171 void JSObjectSetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSPropertyAttributes attributes, JSValueRef* exception) 175 172 { 176 JSLock lock;177 ExecState* exec = toJS(ctx);173 ExecState* exec = toJS(ctx); 174 JSLock lock(exec); 178 175 JSObject* jsObject = toJS(object); 179 176 Identifier name(exec, toJS(propertyName)); … … 194 191 JSValueRef JSObjectGetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned propertyIndex, JSValueRef* exception) 195 192 { 196 JSLock lock;197 ExecState* exec = toJS(ctx);193 ExecState* exec = toJS(ctx); 194 JSLock lock(exec); 198 195 JSObject* jsObject = toJS(object); 199 196 … … 210 207 void JSObjectSetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned propertyIndex, JSValueRef value, JSValueRef* exception) 211 208 { 212 JSLock lock;213 ExecState* exec = toJS(ctx);209 ExecState* exec = toJS(ctx); 210 JSLock lock(exec); 214 211 JSObject* jsObject = toJS(object); 215 212 JSValue* jsValue = toJS(value); … … 225 222 bool JSObjectDeleteProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception) 226 223 { 227 JSLock lock;228 ExecState* exec = toJS(ctx);224 ExecState* exec = toJS(ctx); 225 JSLock lock(exec); 229 226 JSObject* jsObject = toJS(object); 230 227 UString::Rep* nameRep = toJS(propertyName); … … 274 271 JSValueRef JSObjectCallAsFunction(JSContextRef ctx, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) 275 272 { 276 JSLock lock;277 ExecState* exec = toJS(ctx);273 ExecState* exec = toJS(ctx); 274 JSLock lock(exec); 278 275 JSObject* jsObject = toJS(object); 279 276 JSObject* jsThisObject = toJS(thisObject); … … 310 307 JSObjectRef JSObjectCallAsConstructor(JSContextRef ctx, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) 311 308 { 312 JSLock lock;313 ExecState* exec = toJS(ctx);309 ExecState* exec = toJS(ctx); 310 JSLock lock(exec); 314 311 JSObject* jsObject = toJS(object); 315 312 … … 344 341 JSPropertyNameArrayRef JSObjectCopyPropertyNames(JSContextRef ctx, JSObjectRef object) 345 342 { 346 JS Lock lock;347 JSObject* jsObject = toJS(object);348 ExecState* exec = toJS(ctx);343 JSObject* jsObject = toJS(object); 344 ExecState* exec = toJS(ctx); 345 JSLock lock(exec); 349 346 350 347 JSPropertyNameArrayRef propertyNames = new OpaqueJSPropertyNameArray(&exec->globalData()); … … 356 353 JSPropertyNameArrayRef JSPropertyNameArrayRetain(JSPropertyNameArrayRef array) 357 354 { 358 JSLock lock;359 355 ++array->refCount; 360 356 return array; … … 363 359 void JSPropertyNameArrayRelease(JSPropertyNameArrayRef array) 364 360 { 365 JSLock lock;366 if (--array->refCount == 0)361 if (--array->refCount == 0) { 362 JSLock lock(array->array.globalData()->isSharedInstance); 367 363 delete array; 364 } 368 365 } 369 366 … … 380 377 void JSPropertyNameAccumulatorAddName(JSPropertyNameAccumulatorRef array, JSStringRef propertyName) 381 378 { 382 JSLock lock;383 379 PropertyNameArray* propertyNames = toJS(array); 384 380 UString::Rep* rep = toJS(propertyName); 381 382 JSLock lock(propertyNames->globalData()->isSharedInstance); 385 383 propertyNames->add(rep); 386 384 } -
trunk/JavaScriptCore/API/JSStringRef.cpp
r34581 r34947 44 44 JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars) 45 45 { 46 JSLock lock;47 46 return toRef(UString(chars, static_cast<int>(numChars)).rep()->ref()); 48 47 } … … 50 49 JSStringRef JSStringCreateWithUTF8CString(const char* string) 51 50 { 52 JSLock lock;53 54 51 RefPtr<UString::Rep> result = UString::Rep::createFromUTF8(string); 55 52 if (result.get() == &UString::Rep::null) … … 61 58 JSStringRef JSStringRetain(JSStringRef string) 62 59 { 63 JSLock lock;64 60 UString::Rep* rep = toJS(string); 65 61 return toRef(rep->ref()); … … 68 64 void JSStringRelease(JSStringRef string) 69 65 { 70 JSLock lock;71 66 UString::Rep* rep = toJS(string); 72 rep->deref(); 67 bool needsLocking = rep->identifierTable; 68 if (needsLocking) { 69 // It is wasteful to take the lock for per-thread contexts, but we don't have a good way 70 // to determine what the context is. 71 JSLock lock(true); 72 rep->deref(); 73 } else 74 rep->deref(); 73 75 } 74 76 … … 95 97 size_t JSStringGetUTF8CString(JSStringRef string, char* buffer, size_t bufferSize) 96 98 { 97 JSLock lock;98 99 UString::Rep* rep = toJS(string); 99 100 CString cString = UString(rep).UTF8String(); … … 106 107 bool JSStringIsEqual(JSStringRef a, JSStringRef b) 107 108 { 108 JSLock lock;109 110 109 UString::Rep* aRep = toJS(a); 111 110 UString::Rep* bRep = toJS(b); -
trunk/JavaScriptCore/API/JSStringRefCF.cpp
r34581 r34947 38 38 JSStringRef JSStringCreateWithCFString(CFStringRef string) 39 39 { 40 JSLock lock;41 40 CFIndex length = CFStringGetLength(string); 42 41 UString::Rep* rep; -
trunk/JavaScriptCore/API/JSValueRef.cpp
r34659 r34947 119 119 bool JSValueIsEqual(JSContextRef ctx, JSValueRef a, JSValueRef b, JSValueRef* exception) 120 120 { 121 JSLock lock; 122 ExecState* exec = toJS(ctx); 121 ExecState* exec = toJS(ctx); 122 JSLock lock(exec); 123 123 124 JSValue* jsA = toJS(a); 124 125 JSValue* jsB = toJS(b); … … 133 134 } 134 135 135 bool JSValueIsStrictEqual(JSContextRef ctx, JSValueRef a, JSValueRef b) 136 { 137 UNUSED_PARAM(ctx); 138 139 JSLock lock; 136 bool JSValueIsStrictEqual(JSContextRef, JSValueRef a, JSValueRef b) 137 { 140 138 JSValue* jsA = toJS(a); 141 139 JSValue* jsB = toJS(b); … … 147 145 bool JSValueIsInstanceOfConstructor(JSContextRef ctx, JSValueRef value, JSObjectRef constructor, JSValueRef* exception) 148 146 { 149 JSLock lock; 150 ExecState* exec = toJS(ctx); 147 ExecState* exec = toJS(ctx); 148 JSLock lock(exec); 149 151 150 JSValue* jsValue = toJS(value); 152 151 JSObject* jsConstructor = toJS(constructor); … … 179 178 JSValueRef JSValueMakeNumber(JSContextRef ctx, double value) 180 179 { 181 JSLock lock; 182 return toRef(jsNumber(toJS(ctx), value)); 180 ExecState* exec = toJS(ctx); 181 JSLock lock(exec); 182 183 return toRef(jsNumber(exec, value)); 183 184 } 184 185 185 186 JSValueRef JSValueMakeString(JSContextRef ctx, JSStringRef string) 186 187 { 187 JSLock lock; 188 ExecState* exec = toJS(ctx); 189 JSLock lock(exec); 190 188 191 UString::Rep* rep = toJS(string); 189 return toRef(jsString( toJS(ctx), UString(rep)));192 return toRef(jsString(exec, UString(rep))); 190 193 } 191 194 … … 199 202 double JSValueToNumber(JSContextRef ctx, JSValueRef value, JSValueRef* exception) 200 203 { 201 JSLock lock; 202 JSValue* jsValue = toJS(value); 203 ExecState* exec = toJS(ctx); 204 ExecState* exec = toJS(ctx); 205 JSLock lock(exec); 206 207 JSValue* jsValue = toJS(value); 204 208 205 209 double number = jsValue->toNumber(exec); … … 215 219 JSStringRef JSValueToStringCopy(JSContextRef ctx, JSValueRef value, JSValueRef* exception) 216 220 { 217 JSLock lock; 218 JSValue* jsValue = toJS(value); 219 ExecState* exec = toJS(ctx); 221 ExecState* exec = toJS(ctx); 222 JSLock lock(exec); 223 224 JSValue* jsValue = toJS(value); 220 225 221 226 JSStringRef stringRef = toRef(jsValue->toString(exec).rep()->ref()); … … 231 236 JSObjectRef JSValueToObject(JSContextRef ctx, JSValueRef value, JSValueRef* exception) 232 237 { 233 JSLock lock; 234 ExecState* exec = toJS(ctx); 238 ExecState* exec = toJS(ctx); 239 JSLock lock(exec); 240 235 241 JSValue* jsValue = toJS(value); 236 242 … … 245 251 } 246 252 247 void JSValueProtect(JSContextRef, JSValueRef value) 248 { 249 JSLock lock; 253 void JSValueProtect(JSContextRef ctx, JSValueRef value) 254 { 255 ExecState* exec = toJS(ctx); 256 JSLock lock(exec); 257 250 258 JSValue* jsValue = toJS(value); 251 259 gcProtect(jsValue); 252 260 } 253 261 254 void JSValueUnprotect(JSContextRef, JSValueRef value) 255 { 256 JSLock lock; 262 void JSValueUnprotect(JSContextRef ctx, JSValueRef value) 263 { 264 ExecState* exec = toJS(ctx); 265 JSLock lock(exec); 266 257 267 JSValue* jsValue = toJS(value); 258 268 gcUnprotect(jsValue);
Note:
See TracChangeset
for help on using the changeset viewer.