Objective-C API: Clean up JSValue
authormhahnenberg@apple.com <mhahnenberg@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Jan 2013 20:51:56 +0000 (20:51 +0000)
committermhahnenberg@apple.com <mhahnenberg@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Jan 2013 20:51:56 +0000 (20:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=107156

Reviewed by Oliver Hunt.

JSContext m_protectCounts, protect, unprotect are all now unnecessary overhead, and should all be removed.
These exist to handle the context going away before the value does; the context needs to be able to unprotect
values early.  Since the value is now keeping the context alive there is no longer any danger of this happening;
instead we should just protect/unprotect the value in JSValue's init/dealloc methods.

* API/JSContext.mm:
(-[JSContext dealloc]):
* API/JSContextInternal.h:
* API/JSValue.mm:
(-[JSValue initWithValue:inContext:]):
(-[JSValue dealloc]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@140031 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/API/JSContext.mm
Source/JavaScriptCore/API/JSContextInternal.h
Source/JavaScriptCore/API/JSValue.mm
Source/JavaScriptCore/ChangeLog

index ec5ab03..0061b73 100644 (file)
@@ -42,7 +42,6 @@
     JSVirtualMachine *m_virtualMachine;
     JSGlobalContextRef m_context;
     JSWrapperMap *m_wrapperMap;
-    HashCountedSet<JSValueRef> m_protectCounts;
 }
 
 @synthesize exception;
@@ -156,12 +155,6 @@ JSGlobalContextRef contextInternalContext(JSContext *context)
 - (void)dealloc
 {
     toJS(m_context)->lexicalGlobalObject()->m_apiData = 0;
-
-    HashCountedSet<JSValueRef>::iterator iterator = m_protectCounts.begin();
-    HashCountedSet<JSValueRef>::iterator end = m_protectCounts.end();
-    for (; iterator != end; ++iterator)
-        JSValueUnprotect(m_context, iterator->key);
-
     [m_wrapperMap release];
     JSGlobalContextRelease(m_context);
     [m_virtualMachine release];
@@ -206,24 +199,6 @@ JSGlobalContextRef contextInternalContext(JSContext *context)
     [self release];
 }
 
-- (void)protect:(JSValueRef)value
-{
-    // Lock access to m_protectCounts
-    JSC::JSLockHolder lock(toJS(m_context));
-
-    if (m_protectCounts.add(value).isNewEntry)
-        JSValueProtect(m_context, value);
-}
-
-- (void)unprotect:(JSValueRef)value
-{
-    // Lock access to m_protectCounts
-    JSC::JSLockHolder lock(toJS(m_context));
-
-    if (m_protectCounts.remove(value))
-        JSValueUnprotect(m_context, value);
-}
-
 - (JSValue *)wrapperForObject:(id)object
 {
     // Lock access to m_wrapperMap
index 457701c..1f555d4 100644 (file)
@@ -63,9 +63,6 @@ JSGlobalContextRef contextInternalContext(JSContext *);
 - (void)beginCallbackWithData:(CallbackData *)callbackData thisValue:(JSValueRef)thisValue argumentCount:(size_t)argumentCount arguments:(const JSValueRef *)arguments;
 - (void)endCallbackWithData:(CallbackData *)callbackData;
 
-- (void)protect:(JSValueRef)value;
-- (void)unprotect:(JSValueRef)value;
-
 - (JSValue *)wrapperForObject:(id)object;
 
 @end
index 8a19b7b..7b07f47 100644 (file)
@@ -1051,8 +1051,8 @@ JSValueRef valueInternalValue(JSValue * value)
 
     ASSERT(value);
     m_context = [context retain];
-    [context protect:value];
     m_value = value;
+    JSValueProtect(contextInternalContext(m_context), m_value);
     return self;
 }
 
@@ -1172,7 +1172,7 @@ static StructTagHandler* handerForStructTag(const char* encodedType)
 {
     JSContext *context = [self context];
     if (context)
-        [context unprotect:m_value];
+        JSValueUnprotect(contextInternalContext(context), m_value);
     [m_context release];
     m_context = nil;
     [super dealloc];
index 445674e..fa96a7a 100644 (file)
@@ -1,3 +1,22 @@
+2013-01-17  Mark Hahnenberg  <mhahnenberg@apple.com>
+
+        Objective-C API: Clean up JSValue
+        https://bugs.webkit.org/show_bug.cgi?id=107156
+
+        Reviewed by Oliver Hunt.
+
+        JSContext m_protectCounts, protect, unprotect are all now unnecessary overhead, and should all be removed.  
+        These exist to handle the context going away before the value does; the context needs to be able to unprotect 
+        values early.  Since the value is now keeping the context alive there is no longer any danger of this happening; 
+        instead we should just protect/unprotect the value in JSValue's init/dealloc methods.
+
+        * API/JSContext.mm:
+        (-[JSContext dealloc]):
+        * API/JSContextInternal.h:
+        * API/JSValue.mm:
+        (-[JSValue initWithValue:inContext:]):
+        (-[JSValue dealloc]):
+
 2013-01-17  Filip Pizlo  <fpizlo@apple.com>
 
         DFG Node::ref() and Node::deref() should not return bool, and should have postfixRef variants