Reviewed by Ken.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 4 Nov 2004 17:16:03 +0000 (17:16 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 4 Nov 2004 17:16:03 +0000 (17:16 +0000)
        - fixed <rdar://problem/3865365> since -[WebScriptObject dealloc] does not call [super dealloc], the build will fail due to a warning
        - fixed behavior so that [[WebScriptObject alloc] initWithCoder:] doesn't leak WebUndefined instances
          and incidentally so that [[WebScriptObject alloc] init] returns the single shared instance rather
          than allocating a new one

        * bindings/objc/WebScriptObject.mm: Removed some stray semicolons.
        (+[WebUndefined allocWithZone:]): Made this the common bottleneck that returns the single instance
        of WebUndefined, since it's the single method that normally allocates new instances. Calls super to
        actually allocate only the very first time it's called.
        (-[WebUndefined initWithCoder:]): Simplified to just return self (no reason to re-lookup the single
        shared instance since there can be only one).
        (-[WebUndefined copyWithZone:]): Ditto.
        (-[WebUndefined retain]): Ditto.
        (-[WebUndefined retainCount]): Use UINT_MAX constant here (matches usage in NSObject.m for retain count
        of class).
        (-[WebUndefined autorelease]): Simplified to just return self (see above).
        (-[WebUndefined copy]): No need to override this since it just turns around and calls copyWithZone:.
        (-[WebUndefined dealloc]): Added an assertion since this method should never be called. Also added
        a call to [super dealloc] after return; to make the new -Wdealloc-check compiler happy (fixing the
        bug mentioned above).
        (+[WebUndefined undefined]): Reimplemented; calls allocWithZone:NULL to get to the shared instance.
        No need to call init, since that's a no-op for this class.

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

JavaScriptCore/ChangeLog
JavaScriptCore/bindings/objc/WebScriptObject.mm

index 7af0154..bb7d172 100644 (file)
@@ -1,3 +1,30 @@
+2004-11-04  Darin Adler  <darin@apple.com>
+
+        Reviewed by Ken.
+
+        - fixed <rdar://problem/3865365> since -[WebScriptObject dealloc] does not call [super dealloc], the build will fail due to a warning
+        - fixed behavior so that [[WebScriptObject alloc] initWithCoder:] doesn't leak WebUndefined instances
+          and incidentally so that [[WebScriptObject alloc] init] returns the single shared instance rather
+          than allocating a new one
+
+        * bindings/objc/WebScriptObject.mm: Removed some stray semicolons.
+        (+[WebUndefined allocWithZone:]): Made this the common bottleneck that returns the single instance
+        of WebUndefined, since it's the single method that normally allocates new instances. Calls super to
+        actually allocate only the very first time it's called.
+        (-[WebUndefined initWithCoder:]): Simplified to just return self (no reason to re-lookup the single
+        shared instance since there can be only one).
+        (-[WebUndefined copyWithZone:]): Ditto.
+        (-[WebUndefined retain]): Ditto.
+        (-[WebUndefined retainCount]): Use UINT_MAX constant here (matches usage in NSObject.m for retain count
+        of class).
+        (-[WebUndefined autorelease]): Simplified to just return self (see above).
+        (-[WebUndefined copy]): No need to override this since it just turns around and calls copyWithZone:.
+        (-[WebUndefined dealloc]): Added an assertion since this method should never be called. Also added
+        a call to [super dealloc] after return; to make the new -Wdealloc-check compiler happy (fixing the
+        bug mentioned above).
+        (+[WebUndefined undefined]): Reimplemented; calls allocWithZone:NULL to get to the shared instance.
+        No need to call init, since that's a no-op for this class.
+
 2004-11-03  David Harrison  <harrison@apple.com>
 
         Reviewed by Darin.
index ee6ec09..e276de1 100644 (file)
@@ -270,7 +270,7 @@ static KJS::List listFromNSArray(ExecState *exec, NSArray *array)
     return resultObj;
 }
 
-- (void)removeWebScriptKey:(NSString *)key;
+- (void)removeWebScriptKey:(NSString *)key
 {
     if (![self _executionContext])
         return;
@@ -305,7 +305,7 @@ static KJS::List listFromNSArray(ExecState *exec, NSArray *array)
     return resultObj;
 }
 
-- (id)webScriptValueAtIndex:(unsigned int)index;
+- (id)webScriptValueAtIndex:(unsigned int)index
 {
     if (![self _executionContext])
         return nil;
@@ -327,7 +327,7 @@ static KJS::List listFromNSArray(ExecState *exec, NSArray *array)
     return resultObj;
 }
 
-- (void)setWebScriptValueAtIndex:(unsigned int)index value:(id)value;
+- (void)setWebScriptValueAtIndex:(unsigned int)index value:(id)value
 {
     if (![self _executionContext])
         return;
@@ -344,7 +344,7 @@ static KJS::List listFromNSArray(ExecState *exec, NSArray *array)
     _didExecute(self);
 }
 
-- (void)setException: (NSString *)description;
+- (void)setException: (NSString *)description
 {
     if (![self _executionContext])
         return;
@@ -405,21 +405,19 @@ static KJS::List listFromNSArray(ExecState *exec, NSArray *array)
 
 @end
 
-
 @implementation WebUndefined
 
-static WebUndefined *sharedUndefined = 0;
-
-+ (WebUndefined *)undefined
++ (id)allocWithZone:(NSZone *)zone
 {
+    static WebUndefined *sharedUndefined = 0;
     if (!sharedUndefined)
-        sharedUndefined = [[WebUndefined alloc] init];
+        sharedUndefined = [super allocWithZone:NULL];
     return sharedUndefined;
 }
 
 - (id)initWithCoder:(NSCoder *)coder
 {
-    return [WebUndefined undefined];
+    return self;
 }
 
 - (void)encodeWithCoder:(NSCoder *)encoder
@@ -428,33 +426,38 @@ static WebUndefined *sharedUndefined = 0;
 
 - (id)copyWithZone:(NSZone *)zone
 {
-    return [WebUndefined undefined];
-}
-
-- (id)retain {
-    return [WebUndefined undefined];
+    return self;
 }
 
-- (void)release {
+- (id)retain
+{
+    return self;
 }
 
-- (unsigned)retainCount {
-    return 0xFFFFFFFF;
+- (void)release
+{
 }
 
-- (id)autorelease {
-    return [WebUndefined undefined];
+- (unsigned)retainCount
+{
+    return UINT_MAX;
 }
 
-- (void)dealloc {
+- (id)autorelease
+{
+    return self;
 }
 
-- (id)copy {
-    return [WebUndefined undefined];
+- (void)dealloc
+{
+    assert(false);
+    return;
+    [super dealloc]; // make -Wdealloc-check happy
 }
 
-- (id)replacementObjectForPortCoder:(NSPortCoder *)encoder {
-    return [WebUndefined undefined];
++ (WebUndefined *)undefined
+{
+    return [WebUndefined allocWithZone:NULL];
 }
 
 @end