diff --git a/ChangeLog b/ChangeLog index 42e2c4b..7a95199 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004 Nov 9 Stefan Urbanek + + * Remove STMethodSignatureForSelector as it was deprecated because of + inportability to OSX. + 2004 Sep 6 Stefan Urbanek * stshell: fix for compiler diff --git a/Frameworks/StepTalk/STObjCRuntime.h b/Frameworks/StepTalk/STObjCRuntime.h index b11e831..d31f210 100644 --- a/Frameworks/StepTalk/STObjCRuntime.h +++ b/Frameworks/StepTalk/STObjCRuntime.h @@ -42,5 +42,8 @@ extern NSArray *STAllObjectiveCSelectors(void); extern NSValue *STValueFromSelector(SEL sel); extern SEL STSelectorFromValue(NSValue *val); extern SEL STSelectorFromString(NSString *aString); +extern NSMethodSignature *STConstructMethodSignatureForSelector(SEL sel); + +/* Deprecated - remove */ extern NSMethodSignature *STMethodSignatureForSelector(SEL sel); diff --git a/Frameworks/StepTalk/STObjCRuntime.m b/Frameworks/StepTalk/STObjCRuntime.m index cc48564..313eed0 100644 --- a/Frameworks/StepTalk/STObjCRuntime.m +++ b/Frameworks/StepTalk/STObjCRuntime.m @@ -37,8 +37,10 @@ #import #import -#define SELECTOR_TYPES_COUNT 6 +#define SELECTOR_TYPES_COUNT 10 +/* Predefined default selector types up to 10 arguments for fast creation. + It should be faster than manually constructing the string. */ static const char *selector_types[] = { "@8@0:4", @@ -47,6 +49,10 @@ static const char *selector_types[] = "@20@0:4@8@12@16", "@24@0:4@8@12@16@20", "@28@0:4@8@12@16@20@24" + "@32@0:4@8@12@16@20@24@28" + "@36@0:4@8@12@16@20@24@28@32" + "@40@0:4@8@12@16@20@24@28@32@36" + "@44@0:4@8@12@16@20@24@28@32@36@40" }; NSMutableDictionary *STAllObjectiveCClasses(void) @@ -162,6 +168,8 @@ SEL STCreateTypedSelector(SEL sel) SEL newSel; + NSLog(@"STCreateTypedSelector is deprecated."); + ptr = name; while(*ptr) @@ -194,10 +202,51 @@ SEL STCreateTypedSelector(SEL sel) return newSel; } +NSMethodSignature *STConstructMethodSignatureForSelector(SEL sel) +{ + const char *name = sel_get_name(sel); + const char *ptr; + const char *types = (const char *)0; + int argc = 0; + + ptr = name; + + while(*ptr) + { + if(*ptr == ':') + { + argc ++; + } + ptr++; + } + + if( argc < SELECTOR_TYPES_COUNT ) + { + NSDebugLLog(@"STSending", + @"registering selector '%s' " + @"with %i arguments, types:'%s'", + name,argc,selector_types[argc]); + + types = selector_types[argc]; + } + + if(!types) + { + [NSException raise:STInternalInconsistencyException + format:@"Unable to construct types for selector '%s'", + name]; + return 0; + } + + return [NSMethodSignature signatureWithObjCTypes:types]; +} + NSMethodSignature *STMethodSignatureForSelector(SEL sel) { const char *types; + NSLog(@"STMethodSignatureForSelector is deprecated."); + types = sel_get_type(sel); if(!types) diff --git a/Frameworks/StepTalk/STScriptObject.m b/Frameworks/StepTalk/STScriptObject.m index 6d96583..6b40457 100644 --- a/Frameworks/StepTalk/STScriptObject.m +++ b/Frameworks/StepTalk/STScriptObject.m @@ -106,7 +106,7 @@ some other, more clever mechanism. */ if(!signature) { - signature = STMethodSignatureForSelector(sel); + signature = STConstructMethodSignatureForSelector(sel); } return signature; diff --git a/Frameworks/StepTalk/STUndefinedObject.m b/Frameworks/StepTalk/STUndefinedObject.m index ba149a7..651f821 100644 --- a/Frameworks/StepTalk/STUndefinedObject.m +++ b/Frameworks/StepTalk/STUndefinedObject.m @@ -62,7 +62,7 @@ STUndefinedObject *STNil = nil; if(!signature) { - signature = STMethodSignatureForSelector(sel); + signature = STConstructMethodSignatureForSelector(sel); } return signature; diff --git a/Languages/Smalltalk/ChangeLog b/Languages/Smalltalk/ChangeLog index 572d6c3..748f468 100644 --- a/Languages/Smalltalk/ChangeLog +++ b/Languages/Smalltalk/ChangeLog @@ -1,3 +1,8 @@ +2004 Nov 9 Stefan Urbanek + + * Remove STMethodSignatureForSelector as it was deprecated because of + inportability to OSX. + 2004 Jul 10 Stefan Urbanek * Applied patch from Alexander V. Diemand (fixed bug #9595) - fixed diff --git a/Languages/Smalltalk/STSmalltalkScriptObject.m b/Languages/Smalltalk/STSmalltalkScriptObject.m index 865a408..d22144f 100644 --- a/Languages/Smalltalk/STSmalltalkScriptObject.m +++ b/Languages/Smalltalk/STSmalltalkScriptObject.m @@ -112,7 +112,7 @@ if(!signature) { - signature = STMethodSignatureForSelector(sel); + signature = STConstructMethodSignatureForSelector(sel); } return signature;