diff --git a/YSArray.m b/YSArray.m index 22b7fca..b253955 100644 --- a/YSArray.m +++ b/YSArray.m @@ -10,30 +10,30 @@ } -(void) addObject: (id) theObject { - printf("%s\n", "YSArray: addObject"); + //printf("%s\n", "YSArray: addObject"); if (array == NULL) { - printf("%s\n", "before malloc"); + //printf("%s\n", "before malloc"); array = malloc(sizeof(id)); if (array == NULL) { - printf("%s\n", "addObject: malloc failed."); + //printf("%s\n", "addObject: malloc failed."); return; } - printf("%s\n", "after malloc"); + //printf("%s\n", "after malloc"); } else { - printf("%s\n", "before realloc"); + //printf("%s\n", "before realloc"); array = realloc(array, count * sizeof(id)); if (array == NULL) { - printf("%s\n", "addObject: realloc failed."); + //printf("%s\n", "addObject: realloc failed."); return; } } array[count++] = theObject; - printf("%s\n", "YSArray: object added."); + //printf("%s\n", "YSArray: object added."); } -(void) removeObject: (unsigned int) index { diff --git a/YSObject.h b/YSObject.h index 19f3081..00511f8 100644 --- a/YSObject.h +++ b/YSObject.h @@ -2,10 +2,11 @@ #define YSOBJECT_H #import "YSZone.h" +#import typedef unsigned int YSUInteger; -@protocol YSObject +/* @protocol YSObject -(Class) class; -(Class) superclass; //-(BOOL) isEqual: (id)anObject; @@ -33,20 +34,12 @@ typedef unsigned int YSUInteger; //-(YSUInteger) retainCount; //-(YSString *) description; -(YSZone *)zone; -@end +@end */ -@interface YSObject { +@interface YSObject : Object { } --(Class) class; --(Class) superclass; --(id) self; -//-(YSString *) description; -+(id) copyWithZone: (YSZone *) zone; --(YSZone *) zone; -+(YSZone *) zone; - @end #endif \ No newline at end of file diff --git a/YSObject.m b/YSObject.m index dc5c425..e083cb3 100644 --- a/YSObject.m +++ b/YSObject.m @@ -1,169 +1,9 @@ #include #include #include -#include -#include #import "YSObject.h" #import "YSZone.h" -#ifdef __MINGW32__ -#define DLLSPEC __declspec(dllexport) -#endif - -typedef struct obj_layout_unpadded { - int32_t retained; -} unp; -#define UNP sizeof(unp) - -#ifndef __BIGGEST_ALIGNMENT__ -#define __BIGGEST_ALIGNMENT__ sizeof(void *) + sizeof(void *) -#endif - -struct obj_layout { - char padding[__BIGGEST_ALIGNMENT__ - ((UNP % __BIGGEST_ALIGNMENT__) - ? (UNP % __BIGGEST_ALIGNMENT__) : __BIGGEST_ALIGNMENT__)]; - int32_t retained; -}; -typedef struct obj_layout *obj; - - -inline id YSAllocateObject(Class theClass, YSUInteger extraBytes, YSZone *zone) { - id new; - int size; - - size = class_getInstanceSize(theClass) + extraBytes + sizeof(struct obj_layout); - if (zone == 0) { - zone = YSDefaultMallocZone(); - } - - new = YSZoneMalloc(zone, size); - if (new != nil) { - memset(new, 0, size); - new = (id) &( (obj)new )[1]; - object_setClass(new, theClass); - //AADD - } - - return new; -} - -inline id YSDeallocateObject(id theObject) { - Class theClass = object_getClass(theObject); - - if ( (theObject != nil) && !class_isMetaClass(theClass) ) { - object_dispose(theObject); - } -} - @implementation YSObject -/* -+(void) load { - //impl - return; -}*/ - --(id) init { - return self; -} - --(id) self { - return self; -} - -+(void) initialize { - //implement later - return; -} - -+(id) allocWithZone: (YSZone *) zone { - return YSAllocateObject(self, 0, zone); -} - -+(id) copyWithZone: (YSZone *) zone { - return self; -} - -+(id) alloc { - return [self allocWithZone: YSDefaultMallocZone()]; -} - -+(id) new { - return [[self alloc] init]; -} - --(Class) class { - return object_getClass(self); -} - --(void) dealloc { - YSDeallocateObject(self); -} - --(id) copy { - return [(id)self copyWithZone: YSDefaultMallocZone()]; -} - -+(Class) superclass { - return class_getSuperclass(self); -} --(Class) superclass { - return class_getSuperclass(object_getClass(self)); -} - -+(Class) class { - return self; -} - --(BOOL) isEqual: (id) anObject { - return (self == anObject); -} - -+(BOOL) isKindOfClass: (Class) theClass { - if (theClass == [YSObject class]) { - return YES; - } - - return NO; -} - --(BOOL) isProxy { - return NO; -} - --(id) performSelector: (SEL) theSelector { - IMP msg; - - if (theSelector == 0) { - //raise exception - perror("null selector given"); - return; - } - - msg = objc_msg_lookup(self, theSelector); - if (!msg) { - //raise exception - perror("invalid selector"); - return nil; - } - - return (*msg)(self, theSelector); -} - --(YSZone *) zone { - return YSZoneFromPointer(self); -} - -+(YSZone *) zone { - return YSDefaultMallocZone(); -} - -//dummy methods -+(oneway void) release { - return; -} - -+(id) retain { - return self; -} @end diff --git a/makefile b/makefile index 13ed922..50ac38b 100644 --- a/makefile +++ b/makefile @@ -4,27 +4,29 @@ CC=gcc LIB := -L OS := ifeq ($(OS),windows) -LIB += lib/win64 +#change these if needed +LIB += ../lib +LIB += -l:objc-1.dll -l:test.dll CC=x86_64-w64-mingw32-gcc endif ifeq ($(OS),linux) -LIB += lib/linux64 +LIB += ~/code/objc/wow/lib/linux64 endif -LIB += -lobjc - static: $(CC) YSObject.m -c $(CC) YSZone.m -c $(CC) YSArray.m -c - ar rcs libyeslib.a YSObject.o YSZone.o YSArray.o + $(CC) -I ../include YSTest.m -c + ar rcs libyeslib.a YSObject.o YSZone.o YSArray.o YSTest.o shared: - $(CC) YSObject.m -c + $(CC) YSObject.m -c -Wl,--enable-auto-import $(CC) YSZone.m -c $(CC) YSArray.m -c - $(CC) -shared -fPIC -o yeslib.dll YSObject.o YSZone.o YSArray.o $(LIB) + $(CC) -I ../include YSTest.m -c + $(CC) -shared -o yeslib.dll YSObject.o YSZone.o YSArray.o YSTest.o $(LIB) clean: rm *.o \ No newline at end of file