diff --git a/bindings/objc/objcrtl10.pas b/bindings/objc/objcrtl10.pas index b8de1da5d..cbb9f105e 100644 --- a/bindings/objc/objcrtl10.pas +++ b/bindings/objc/objcrtl10.pas @@ -7,6 +7,7 @@ headers included with XCode 3.1.2 The original copyright note of is kept on each include file } +{$DEFINE DEBUG} unit objcrtl10; @@ -521,10 +522,31 @@ end; function class_addMethod10(cls:_Class; name:SEL; _imp:IMP; types:pchar):BOOL; cdecl; begin if not Assigned(cls) or not Assigned(name) or not Assigned(_imp) or not Assigned(types) then begin + {$IFDEF DEBUG} + write('* Bad params?: cls = ', Integer(cls)); + write(' name = ', PChar(name)); + write(' imp = ', Integer(_imp)); + writeln(' type = ', types); + {$ENDIF} Result := false; Exit; end; + + {$IFDEF DEBUG} + write('* method list = ', Integer(_Class1(cls)^.methodLists)); + if Assigned (TClassMethod1Reg(_Class1(cls)^.methodLists)) then + writeln(', ', TClassMethod1Reg(_Class1(cls)^.methodLists).ClassName) + else + writeln; + try + {$ENDIF} TClassMethod1Reg(_Class1(cls)^.methodLists).AddMethod(name, _imp, types); + {$IFDEF DEBUG} + writeln('"',PChar(name), '" added successfully'); + except + writeln('* exception while adding method'); + end; + {$ENDIF} Result := true; end; diff --git a/bindings/objc/objcrtltest.pas b/bindings/objc/objcrtltest.pas index 8e9e9603f..f584f4833 100644 --- a/bindings/objc/objcrtltest.pas +++ b/bindings/objc/objcrtltest.pas @@ -54,7 +54,7 @@ const newMethod4Enc = 'f@:'; newMethod5 = 'getSmallRecord'; - newMethod5Enc = '{TSmallRecord=ccc}@:'; + newMethod5Enc = '{TSmallRecord=cccc{TSubStructure=cccc}}@:'; varName = 'myvar'; @@ -105,11 +105,13 @@ begin class_addMethod(cl, selector(newMethod1), @imp_newMethod1, newMethod1Enc) and class_addMethod(cl, selector(newMethod2), @imp_newMethod2, newMethod2Enc) and class_addMethod(cl, selector(newMethod3), @imp_newMethod3, newMethod3Enc) and - class_addMethod(cl, selector(newMethod4), @imp_newMethod4, newMethod4Enc); + class_addMethod(cl, selector(newMethod4), @imp_newMethod4, newMethod4Enc) and class_addMethod(cl, selector(newMethod5), @imp_getSmallRec, newMethod5Enc); - if not b then writeln('failed to add/override some method(s)'); + if not b then + writeln('failed to add/override some method(s)'); - class_addIvar(cl, varName, sizeof(TObject), 1, _C_PASOBJ); + if not class_addIvar(cl, varName, sizeof(TObject), 1, _C_PASOBJ) then + writeln('failed to add variable ', varName); objc_registerClassPair(cl); end;