theos/logos

%property with custom setter results in compiler error

Closed this issue · 2 comments

Problem: When specifying a custom setter for a %property, Logos puts the : in the generated method name (when it shouldn't).

Code:

%group Foo
%hook NSObject

%property(nonatomic, retain, setter=my_Setter:) id obj;

%end
%end

Error:

file.xm:71:231: error: variable has incomplete type 'void'
  ...{ return (id)objc_getAssociatedObject(self, (void *)_logos_method$Foo$NSObject$obj); }; __attribute__((used)) static void _logos_method...
                                                                                                                               ^
file.xm:71:267: error: expected ';' after top level declarator
  ...(void *)_logos_method$Foo$NSObject$obj); }; __attribute__((used)) static void _logos_method$Foo$NSObject$my_Setter:(NSObject * __unuse...
                                                                                                                       ^
                                                                                                                       ;
file.xm:71:278: error: expected ')'
  ...(void *)_logos_method$Foo$NSObject$obj); }; __attribute__((used)) static void _logos_method$Foo$NSObject$my_Setter:(NSObject * __unuse...
                                                                                                                                  ^
file.xm:71:268: note: to match this '('
  ...(void *)_logos_method$Foo$NSObject$obj); }; __attribute__((used)) static void _logos_method$Foo$NSObject$my_Setter:(NSObject * __unuse...
                                                                                                                        ^
file.xm:71:269: error: C++ requires a type specifier for all declarations
  ...(void *)_logos_method$Foo$NSObject$obj); }; __attribute__((used)) static void _logos_method$Foo$NSObject$my_Setter:(NSObject * __unuse...
                                                                                                                         ^
file.xm:71:326: error: expected ';' after top level declarator
  ...static void _logos_method$Foo$NSObject$my_Setter:(NSObject * __unused self, SEL __unused _cmd, id rawValue) { objc_setAssociatedObject(...
                                                                                                                ^
                                                                                                                ;

Custom getter/setter names are given without colon. Replace

%property(nonatomic, retain, setter=my_Setter:) id obj;
                                             ^

with

%property(nonatomic, retain, setter=my_Setter) id obj;

Oh no, it isn't. Logos should remove it then.