1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- {
- objcrtlutils.pas
- Copyright (C) 2009 Dmitry Boyarintsev
-
- This unit is implementation for dynamic Objective-C Run-time Library based on run-time version 2.0
- headers included with XCode 3.1.2
- The original copyright note of is kept on each include file
- }
- unit objcrtlutils;
- {$mode objfpc}{$H+}
- interface
- uses
- objcrtl;
- function alloc(classname: PChar): id; inline;
- function allocex(classname: PChar; extraBytes: Integer): id; inline;
- function objcclass(classname: PChar): _class; inline;
- function selector(cmdname: PChar): SEL; inline;
- procedure release(objc: id); inline;
- function AllocAndInit(classname: PChar): id; inline;
- function AllocAndInitEx(classname: PChar; extraBytes: Integer): id; inline;
- function super(obj: id): objc_super;
- implementation
- var
- SEL_alloc : SEL = nil;
- SEL_init : SEL = nil;
- SEL_release : SEL = nil;
- function super(obj: id): objc_super;
- begin
- Result.reciever := obj;
- Result.class_ := class_getSuperclass(object_getClass(obj));
- end;
- function allocex(classname: PChar; extraBytes: Integer): id; inline;
- begin
- Result := class_createInstance( objcclass(classname), extraBytes);
- end;
- function alloc(classname: PChar): id; inline;
- begin
- Result := allocex(classname, 0);
- // Result := objc_msgSend( objc_getClass(classname), selector('alloc'), []);
- end;
- function objcclass(classname: PChar): _class; inline;
- begin
- Result := _class(objc_getClass(classname));
- end;
- function selector(cmdname: PChar): SEL; inline;
- begin
- Result := sel_registerName(cmdname);
- end;
- procedure release(objc: id); inline;
- begin
- if SEL_release=nil then SEL_release := selector('release');
- objc_msgSend(objc, SEL_release, []);
- end;
- function AllocAndInit(classname: PChar): id; inline;
- begin
- if SEL_init=nil then SEL_init := selector('init');
- Result:= objc_msgSend( alloc( classname ), SEL_init, []);
- end;
- function AllocAndInitEx(classname: PChar; extraBytes: Integer): id; inline;
- begin
- if SEL_init=nil then SEL_init := selector('init');
- Result := objc_msgSend( allocEx( classname, extraBytes ), SEL_init, []);
- end;
- end.
|