Skip to content

Commit 6782780

Browse files
committed
* adapt to changes in mulle-objc-runtime
* improved NSInvocation retain/release of arguments, now can also do C-array, structs and unions * new feature "interposing" of a class between two other classes * new function `MulleThreadGetOrCreateCurrentThread` * NSThread mulleStartUndetached is now just mulleStart, but the old method still works * new type mulle_atomic_id_t for convenient atomic access to id ivars * new function MulleObjC_strdup * byte swapping and endian functions have been moved to mulle-c11 * new global variable MulleObjCDebugElideAddressOutput for test output * new macros MULLE_OBJC_CLASS_CAST and MULLE_OBJC_PROTOCOL_CAST and related macros * new key/value callbacks _MulleObjCContainerCopiedCStringIntegerValueCallback, _MulleObjCContainerIntegerKeyCopiedCStringValueCallback, _MulleObjCContainerCopiedCStringPointerValueCallback, _MulleObjCContainerPointerKeyCopiedCStringValueCallback * new functions NSRangeGetLocation, NSRangeGetLength, NSRangeGetMax, ...
1 parent 31bfe43 commit 6782780

File tree

151 files changed

+5657
-1806
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+5657
-1806
lines changed

.idea/MulleObjC.iml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

+200-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/environment-plugin.sh

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/include-environment.sh

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/env/version

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/sde/version/mulle-sde/cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/sde/version/mulle-sde/vscode

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.mulle/share/sde/version/mulle-sde/vscode-clang

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/reflect/_Dependencies.cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/reflect/_Headers.cmake

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/reflect/_Sources.cmake

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/CMakeTweaksC.cmake

+4-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/CompilerWarningsC.cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/DependenciesAndLibraries.cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/Executable.cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/Framework.cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/IDESupport.cmake

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/Library.cmake

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmake/share/Motd.cmake

+4-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/class/MulleDynamicObject.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,18 @@
7979

8080
@end
8181

82+
#define MULLE_DYNAMIC_OBJECT_FORWARD_SUPERID ((mulle_objc_superid_t) 0x4d6bf14f) // 'MulleDynamicObject;forward:'
83+
84+
8285

8386
MULLE_C_NONNULL_FIRST_FOURTH
84-
void _MulleDynamicObjectValueSetter( MulleDynamicObject *self, SEL _cmd, void *_param, char *objcType);
87+
void _MulleDynamicObjectValueSetter( MulleDynamicObject *self, SEL selector, void *_param, char *objcType);
8588

8689
MULLE_C_NONNULL_FIRST_FOURTH
87-
void _MulleDynamicObjectNumberSetter( MulleDynamicObject *self, mulle_objc_methodid_t _cmd, void *_param, char *objcType);
90+
void _MulleDynamicObjectNumberSetter( MulleDynamicObject *self, SEL selector, void *_param, char *objcType);
8891

8992
MULLE_C_NONNULL_FIRST
90-
void _MulleDynamicObjectValueGetter( MulleDynamicObject *self, SEL _cmd, void *_param);
93+
void _MulleDynamicObjectValueGetter( MulleDynamicObject *self, SEL selector, void *_param);
9194

9295

9396
@interface MulleDynamicObject( NSMutableCopying)< NSMutableCopying>

src/class/MulleDynamicObject.m

+13-11
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,6 @@ @interface NSNumber : NSValue
186186

187187
@implementation MulleDynamicObject
188188

189-
#define MULLE_DYNAMIC_OBJECT_FORWARD_SUPERID ((mulle_objc_superid_t) 0x4d6bf14f) // 'MulleDynamicObject;forward:'
190-
191-
192189
static struct _mulle_objc_super OBJECT_forward =
193190
{
194191
.superid = MULLE_DYNAMIC_OBJECT_FORWARD_SUPERID,
@@ -222,7 +219,7 @@ + (void) initialize
222219
Self._initialized = 1;
223220

224221
universe = _mulle_objc_infraclass_get_universe( self),
225-
mulle_objc_universe_add_super_nofail( universe, &OBJECT_forward);
222+
mulle_objc_universe_register_super_nofail( universe, &OBJECT_forward);
226223

227224
//
228225
// can not use regular allocator, as it can be replaced with the
@@ -610,7 +607,7 @@ - (void) dealloc
610607
return( changed);
611608
}
612609

613-
MULLE_C_NONNULL_FIRST
610+
614611
void _MulleDynamicObjectValueGetter( MulleDynamicObject *self, mulle_objc_methodid_t _cmd, void *_param)
615612
{
616613
id value;
@@ -769,7 +766,10 @@ static void _MulleObjectGenericValueSetterWillChange( MulleDynamicObject *self
769766
}
770767

771768

772-
void _MulleDynamicObjectValueSetter( MulleDynamicObject *self, SEL _cmd, void *_param, char *objcType)
769+
void _MulleDynamicObjectValueSetter( MulleDynamicObject *self,
770+
SEL _cmd,
771+
void *_param,
772+
char *objcType)
773773
{
774774
void *key;
775775
struct mulle_allocator *allocator;
@@ -785,8 +785,10 @@ void _MulleDynamicObjectValueSetter( MulleDynamicObject *self, SEL _cmd, void
785785
}
786786

787787

788-
MULLE_C_NONNULL_FIRST
789-
void _MulleDynamicObjectNumberSetter( MulleDynamicObject *self, mulle_objc_methodid_t _cmd, void *_param, char *objcType)
788+
void _MulleDynamicObjectNumberSetter( MulleDynamicObject *self,
789+
SEL _cmd,
790+
void *_param,
791+
char *objcType)
790792
{
791793
void *key;
792794
struct mulle_allocator *allocator;
@@ -1597,6 +1599,7 @@ static enum mulle_objc_property_accessor_type accessor_type_from_string( char
15971599
assert( neededSel);
15981600

15991601
universe = _mulle_objc_infraclass_get_universe( infra);
1602+
cls = _mulle_objc_infraclass_as_class( infra);
16001603

16011604
desc = _mulle_objc_universe_lookup_descriptor( universe, neededSel);
16021605
if( ! desc)
@@ -1614,7 +1617,7 @@ static enum mulle_objc_property_accessor_type accessor_type_from_string( char
16141617
if( ! desc)
16151618
return( NULL);
16161619

1617-
desc = _mulle_objc_universe_register_descriptor_nofail( universe, desc);
1620+
desc = _mulle_objc_universe_register_descriptor_nofail( universe, desc, cls, NULL);
16181621
}
16191622

16201623
#if 0
@@ -1695,13 +1698,12 @@ static enum mulle_objc_property_accessor_type accessor_type_from_string( char
16951698
else
16961699
return( NULL);
16971700

1698-
cls = _mulle_objc_infraclass_as_class( infra);
16991701
// looks more like a bug, if we have any one already defined, so dont obscure it
17001702
for( accessorType = mulle_objc_property_accessor_getter;
17011703
accessorType <= mulle_objc_property_accessor_setter;
17021704
accessorType++)
17031705
{
1704-
_mulle_objc_searcharguments_init_default( &search, accessors[ accessorType]->methodid);
1706+
search = mulle_objc_searcharguments_make_default( accessors[ accessorType]->methodid);
17051707
method = mulle_objc_class_search_method( cls,
17061708
&search,
17071709
_mulle_objc_class_get_inheritance( cls),

src/class/MulleObject.h

+35-3
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,24 @@
5959
}
6060

6161

62-
// for objects (like UIView) that share locks with other objects
63-
// (via addSubview:), its clumsy to have a lock initially. These objects
62+
// for instances (like UIView) that share locks with other instances
63+
// (via addSubview:), its clumsy to have a lock initially. These instances
6464
// are non-threadsafe until they share a lock with another MulleObject
6565
//
6666
+ (instancetype) locklessObject;
6767
- (instancetype) initNoLock;
6868

6969
- (BOOL) tryLock MULLE_OBJC_THREADSAFE_METHOD;
7070

71+
// if you override -didShareRecursiveLock: you must call super
7172
- (void) didShareRecursiveLock:(NSRecursiveLock *) lock MULLE_OBJC_THREADSAFE_METHOD;
7273
- (void) shareRecursiveLock:(NSRecursiveLock *) other MULLE_OBJC_THREADSAFE_METHOD;
73-
- (void) shareRecursiveLockWithObject:(MulleObject *) other MULLE_OBJC_THREADSAFE_METHOD;
74+
- (void) shareRecursiveLockWithObject:(MulleObject *) other MULLE_OBJC_THREADSAFE_METHOD;
7475

7576
@end
7677

78+
#define MULLE_OBJECT_FORWARD_SUPERID ((mulle_objc_superid_t) 0x53d27672) // 'MulleObject;forward:'
79+
7780

7881
//
7982
// Declare your subclass like so:
@@ -102,3 +105,32 @@ void MulleLockingObjectFillCache( MulleObject *self,
102105
SEL sel,
103106
IMP imp,
104107
BOOL isThreadAffine);
108+
109+
110+
111+
static inline void _MulleObjectValueSetter( MulleObject *self,
112+
SEL _cmd,
113+
void *_param,
114+
char *objcType)
115+
{
116+
_MulleDynamicObjectValueSetter( self, _cmd, _param, objcType);
117+
}
118+
119+
120+
121+
static inline void _MulleObjectNumberSetter( MulleObject *self,
122+
SEL _cmd,
123+
void *_param,
124+
char *objcType)
125+
{
126+
_MulleDynamicObjectNumberSetter( self, _cmd, _param, objcType);
127+
}
128+
129+
130+
static inline void _MulleObjectValueGetter( MulleObject *self,
131+
SEL _cmd,
132+
void *_param)
133+
{
134+
_MulleDynamicObjectValueGetter( self, _cmd, _param);
135+
}
136+

0 commit comments

Comments
 (0)