view dstep/objc/bindings.d @ 2:9fd439a28ce3

Adapted the scripts for the new bridge + a lot more
author Jacob Carlborg <doob@me.com>
date Sun, 05 Jul 2009 17:16:19 +0200
parents 033d260cfc9b
children 19885b43130e
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Feb 1, 2009
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.objc.bindings;

import dstep.objc.message;
import dstep.objc.objc;
import dstep.objc.runtime;
import dstep.internal.Util;

extern (C)
{
	// runtime.h
	id object_copy (id obj, size_t size);
	id object_dispose (id obj);
	Class object_getClass (id obj);
	Class object_setClass (id obj, Class cls);
	char* object_getClassName (id obj);
	void* object_getIndexedIvars (id obj);
	id object_getIvar (id obj, Ivar ivar);
	void object_setIvar (id obj, Ivar ivar, id value);
	Ivar object_setInstanceVariable (id obj, char* name, void* value);
	Ivar object_getInstanceVariable (id obj, char* name, void** outValue);
	id objc_getClass (char* name);
	id objc_getMetaClass (char* name);
	id objc_lookUpClass (char* name);
	id objc_getRequiredClass (char* name);
	Class objc_getFutureClass (char* name);
	void objc_setFutureClass (Class cls, char* name);
	int objc_getClassList (Class* buffer, int bufferCount);
	id objc_getProtocol (char* name);
	Protocol** objc_copyProtocolList (uint* outCount);
	char* class_getName (Class cls);
	bool class_isMetaClass (Class cls);
	Class class_getSuperclass (Class cls);
	Class class_setSuperclass (Class cls, Class newSuper);
	int class_getVersion (Class cls);
	void class_setVersion (Class cls, int version_);
	size_t class_getInstanceSize (Class cls);
	Ivar class_getInstanceVariable (Class cls, char* name);
	Ivar class_getClassVariable (Class cls, char* name);
	Ivar* class_copyIvarList (Class cls, uint* outCount);
	Method class_getInstanceMethod (Class cls, SEL name);
	Method class_getClassMethod (Class cls, SEL name);
	IMP class_getMethodImplementation (Class cls, SEL name);
	IMP class_getMethodImplementation_stret (Class cls, SEL name);
	bool class_respondsToSelector (Class cls, SEL sel);
	Method* class_copyMethodList (Class cls, uint* outCount);
	bool class_conformsToProtocol (Class cls, Protocol* protocol);
	Protocol** class_copyProtocolList (Class cls, uint* outCount);
	objc_property_t* class_getProperty (Class cls, char* name);
	objc_property_t* class_copyPropertyList (Class cls, uint* outCount);
	char* class_getIvarLayout (Class cls);
	char* class_getWeakIvarLayout (Class cls);
	id class_createInstance (Class cls, size_t extraBytes);
	Class objc_allocateClassPair (Class superclass, char* name, size_t extraBytes);
	void objc_registerClassPair (Class cls);
	Class objc_duplicateClass (Class original, char* name, size_t extraBytes);
	void objc_disposeClassPair (Class cls);
	bool class_addMethod (Class cls, SEL name, IMP imp, char* types);
	IMP class_replaceMethod (Class cls, SEL name, IMP imp, char* types);
	bool class_addIvar (Class cls, char* name, size_t size, ubyte alignment, char* types);
	bool class_addProtocol (Class cls, Protocol* protocol);
	void class_setIvarLayout (Class cls, char* layout);
	void class_setWeakIvarLayout (Class cls, char* layout);
	SEL method_getName (Method m);
	IMP method_getImplementation (Method m);
	char* method_getTypeEncoding (Method m);
	uint method_getNumberOfArguments (Method m);
	char* method_copyReturnType (Method m);
	char* method_copyArgumentType (Method m, uint index);
	void method_getReturnType (Method m, char* dst, size_t dst_len);
	void method_getArgumentType (Method m, uint index, char* dst, size_t dst_len);
	objc_method_description* method_getDescription (Method m);
	IMP method_setImplementation (Method m, IMP imp);
	void method_exchangeImplementations (Method m1, Method m2);
	char* ivar_getName (Ivar v);
	char* ivar_getTypeEncoding (Ivar v);
	ptrdiff_t ivar_getOffset (Ivar v);
	char* property_getName (objc_property_t* property);
	char* property_getAttributes (objc_property_t* property);
	bool protocol_conformsToProtocol (id proto, id other);
	bool protocol_isEqual (id proto, id other);
	char* protocol_getName (id p);
	objc_method_description protocol_getMethodDescription (id p, SEL aSel, bool isRequiredMethod, bool isInstanceMethod);
	objc_method_description* protocol_copyMethodDescriptionList(id p, bool isRequiredMethod, bool isInstanceMethod, uint* outCount);
	objc_property_t* protocol_getProperty (id proto, char* name, bool isRequiredProperty, bool isInstanceProperty);
	objc_property_t* protocol_copyPropertyList (id proto, uint* outCount);
	Protocol** protocol_copyProtocolList (id proto, uint* outCount);
	char** objc_copyImageNames (uint* outCount);
	char* class_getImageName (Class cls);
	char** objc_copyClassNamesForImage (char* image, uint* outCount);
	char* sel_getName (SEL sel);
	SEL sel_getUid (char* str);
	SEL sel_registerName (char* str);
	bool sel_isEqual (SEL lhs, SEL rhs);
	void objc_enumerationMutation (id arg0);
	void objc_setForwardHandler (void* fwd, void* fwd_stret);
	bool sel_isMapped (SEL sel);
	id object_copyFromZone (id anObject, size_t nBytes, void* z);
	id object_realloc (id anObject, size_t nBytes);
	id object_reallocFromZone (id anObject, size_t nBytes, void* z);
	void* objc_getClasses ();
	void objc_addClass (Class myClass);
	void objc_setMultithreaded (bool flag);
	id class_createInstanceFromZone (Class arg0, size_t idxIvars, void* z);
	void class_addMethods (Class arg0, objc_method_list* arg1);
	void class_removeMethods (Class arg0, objc_method_list* arg1);
	Class class_poseAs (Class imposter, Class original);
	uint method_getSizeOfArguments (Method m);
	uint method_getArgumentInfo (objc_method* m, int arg, char** type, int* offset);
	bool class_respondsToMethod (Class arg0, SEL arg1);
	IMP class_lookupMethod (Class arg0, SEL arg1);
	Class objc_getOrigClass (char* name);
	objc_method_list* class_nextMethodList (Class arg0, void* arg1);	
	
	// message.h
	id objc_msgSend (id self, SEL op, ...);
	id objc_msgSendSuper (objc_super* super_, SEL op, ...);
	void objc_msgSend_stret (void* stretAddr, id self, SEL op, ...);
	void objc_msgSendSuper_stret (void* stretAddr, objc_super* super_, SEL op, ...);
	id objc_msgSendv (id self, SEL op, size_t arg_size, void* arg_frame);
	void objc_msgSendv_stret (void* stretAddr, id self, SEL op, size_t arg_size, void* arg_frame);
	
	id method_invoke (id receiver, Method m, ...);
	void method_invoke_stret (id receiver, Method m, ...);
	
	version (X86_64)
		real objc_msgSend_fpret (id self, SEL op, ...);
	
	else version (X86)
	{
		double objc_msgSendv_fpret (id self, SEL op, uint arg_size, void* arg_frame);
		double objc_msgSend_fpret (id self, SEL op, ...);
	}
}

version (build)
{
	version (GNU)
	{
		pragma(link, "objc -framework Cocoa");
	}
	
	else
	{
		pragma(link, "objc -L-framework -LCocoa");
	}
}