]> err.no Git - sope/blobdiff - sope-core/NGExtensions/NGExtensions/NGObjectMacros.h
improved ASSIGN/ASSIGNCOPY assignment behaviour
[sope] / sope-core / NGExtensions / NGExtensions / NGObjectMacros.h
index 40b9ca268247861730a93f630662c13a89f9bb3a..8c0b127bbcc53a746107f395df5a6885c07fa515 100644 (file)
 #  define ASSIGN(object, value) \
        ({id __object = (id)object;    \
          id __value = (id)value;      \
-         if (__value != __object) { if (__value) [__value retain]; \
-          if (__object) [__object release]; \
-          object = __value;}})
+         if (__value != __object) { \
+          object =  (__value) ? [__value retain] : nil; \
+           if (__object) [__object release]; \
+           }})
 #endif
 #ifndef ASSIGNCOPY
 #  define ASSIGNCOPY(object, value) \
        ({id __object = (id)object;    \
          id __value = (id)value;      \
-         if (__value != __object) { if (__value) __value = [__value copy];   \
-          if (__object) [__object release]; \
-          object = __value;}})
+         if (__value != __object) { \
+          object = __value ? [__value copy] : nil; \
+           if (__object) [__object release]; \
+          }})
 #endif
 #ifndef RETAIN
 #  define RETAIN(__XXX__) [__XXX__ retain]