First pass at key value coding from issues 6 and 7, addition of objc framework

This commit is contained in:
Christopher Lloyd 2007-01-02 17:52:07 +00:00
parent 578873e3cf
commit d971345b27
26 changed files with 1373 additions and 68 deletions

View File

@ -44,6 +44,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSHost.h>
#import <Foundation/NSInvocation.h>
#import <Foundation/NSKeyedUnarchiver.h>
#import <Foundation/NSKeyValueCoding.h>
#import <Foundation/NSLock.h>
#import <Foundation/NSMapTable.h>
#import <Foundation/NSMethodSignature.h>

View File

@ -297,7 +297,7 @@
6E2805D309747D0400EC542B /* NSPipe_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B309747D0400EC542B /* NSPipe_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805D509747D0400EC542B /* NSPlatform_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B509747D0400EC542B /* NSPlatform_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805D709747D0400EC542B /* NSReadInBackground_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B709747D0400EC542B /* NSReadInBackground_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805D909747D0400EC542B /* NSStreamInputSource_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B909747D0400EC542B /* NSStreamInputSource_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805D909747D0400EC542B /* NSSocketInputSource_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805B909747D0400EC542B /* NSSocketInputSource_windows.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805DB09747D0400EC542B /* NSString_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805BB09747D0400EC542B /* NSString_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805DD09747D0400EC542B /* NSTask_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805BD09747D0400EC542B /* NSTask_win32.h */; settings = {ATTRIBUTES = (Private, ); }; };
6E2805E909747D1000EC542B /* NSXMLAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2805DF09747D1000EC542B /* NSXMLAttribute.h */; settings = {ATTRIBUTES = (Private, ); }; };
@ -813,7 +813,7 @@
6E71DB21097B5AB50071C089 /* NSPipe_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805B409747D0400EC542B /* NSPipe_win32.m */; };
6E71DB22097B5AB70071C089 /* NSPlatform_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805B609747D0400EC542B /* NSPlatform_win32.m */; };
6E71DB23097B5AB80071C089 /* NSReadInBackground_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805B809747D0400EC542B /* NSReadInBackground_win32.m */; };
6E71DB24097B5AB90071C089 /* NSStreamInputSource_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BA09747D0400EC542B /* NSStreamInputSource_win32.m */; };
6E71DB24097B5AB90071C089 /* NSSocketInputSource_windows.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BA09747D0400EC542B /* NSSocketInputSource_windows.m */; };
6E71DB25097B5ABA0071C089 /* NSString_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BC09747D0400EC542B /* NSString_win32.m */; };
6E71DB26097B5ABB0071C089 /* NSTask_win32.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2805BE09747D0400EC542B /* NSTask_win32.m */; };
6E8113740A54BA9C000DE3F1 /* objc_msg_sendv.s in Sources */ = {isa = PBXBuildFile; fileRef = 6E28055D09747CC300EC542B /* objc_msg_sendv.s */; };
@ -1225,12 +1225,30 @@
6EC4AB540A35157600E8D6CA /* NSSocketMonitorSet_Unix.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC4AB520A35157600E8D6CA /* NSSocketMonitorSet_Unix.m */; };
6EC4AB550A35157600E8D6CA /* NSSocketMonitorSet_Unix.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EC4AB510A35157600E8D6CA /* NSSocketMonitorSet_Unix.h */; settings = {ATTRIBUTES = (Private, ); }; };
6EC4AB560A35157600E8D6CA /* NSSocketMonitorSet_Unix.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC4AB520A35157600E8D6CA /* NSSocketMonitorSet_Unix.m */; };
FE35CAED0B4AB85800FE7AB3 /* objc.m in Sources */ = {isa = PBXBuildFile; fileRef = FE35CAEC0B4AB85800FE7AB3 /* objc.m */; };
FE35CAEE0B4AB85800FE7AB3 /* objc.m in Sources */ = {isa = PBXBuildFile; fileRef = FE35CAEC0B4AB85800FE7AB3 /* objc.m */; };
FE35CAEF0B4AB85800FE7AB3 /* objc.m in Sources */ = {isa = PBXBuildFile; fileRef = FE35CAEC0B4AB85800FE7AB3 /* objc.m */; };
FE405A6C0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE405A6D0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */; };
FE405A6E0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE405A6F0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */; };
FE405A700B4450FD001B183D /* NSHTTPURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE405A710B4450FD001B183D /* NSHTTPURLResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */; };
FEB6CBB00B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
FEB6CBB10B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */; };
FEB6CBB20B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
FEB6CBB30B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */; };
FEB6CBB40B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */; settings = {ATTRIBUTES = (Public, ); }; };
FEB6CBB50B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */; };
FEB6CC0F0B4A169C004FADF2 /* objc-class.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC0E0B4A169C004FADF2 /* objc-class.m */; };
FEB6CC100B4A169C004FADF2 /* objc-class.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC0E0B4A169C004FADF2 /* objc-class.m */; };
FEB6CC110B4A169D004FADF2 /* objc-class.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC0E0B4A169C004FADF2 /* objc-class.m */; };
FEB6CC8B0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */; };
FEB6CC8C0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */; };
FEB6CC8D0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */; };
FEB6CC8E0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */; };
FEB6CC8F0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */; };
FEB6CC900B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */; };
FEB9D30E0B4374F700C239BB /* NSInputStream_data.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB9D30C0B4374F700C239BB /* NSInputStream_data.h */; settings = {ATTRIBUTES = (Private, ); }; };
FEB9D30F0B4374F700C239BB /* NSInputStream_data.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB9D30D0B4374F700C239BB /* NSInputStream_data.m */; };
FEB9D3100B4374F700C239BB /* NSInputStream_data.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB9D30C0B4374F700C239BB /* NSInputStream_data.h */; settings = {ATTRIBUTES = (Private, ); }; };
@ -1545,6 +1563,48 @@
remoteGlobalIDString = 6EA048CA09E57D5F0067589C;
remoteInfo = "Foundation-Linux-i386-gcc-4.0.3-redhat";
};
FEB6CC470B4A1922004FADF2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 8DC2EF5B0486A6940098B216;
remoteInfo = "objc-Windows-i386";
};
FEB6CC490B4A1922004FADF2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = FE4034590B42E8AF00CEC41A;
remoteInfo = "objc-Linux-i386";
};
FEB6CC4B0B4A1922004FADF2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = FE40348A0B42E94D00CEC41A;
remoteInfo = "objc-Solaris-sparc";
};
FEB6CC4E0B4A1944004FADF2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = "objc-Windows-i386";
};
FEB6CC500B4A194C004FADF2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = FE4034530B42E8AF00CEC41A;
remoteInfo = "objc-Linux-i386";
};
FEB6CC520B4A1952004FADF2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = FE4034840B42E94D00CEC41A;
remoteInfo = "objc-Solaris-sparc";
};
FEFC42400B0A5D050041512F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
@ -1862,8 +1922,8 @@
6E2805B609747D0400EC542B /* NSPlatform_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSPlatform_win32.m; path = platform_win32/NSPlatform_win32.m; sourceTree = "<group>"; };
6E2805B709747D0400EC542B /* NSReadInBackground_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSReadInBackground_win32.h; path = platform_win32/NSReadInBackground_win32.h; sourceTree = "<group>"; };
6E2805B809747D0400EC542B /* NSReadInBackground_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSReadInBackground_win32.m; path = platform_win32/NSReadInBackground_win32.m; sourceTree = "<group>"; };
6E2805B909747D0400EC542B /* NSStreamInputSource_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSStreamInputSource_win32.h; path = platform_win32/NSStreamInputSource_win32.h; sourceTree = "<group>"; };
6E2805BA09747D0400EC542B /* NSStreamInputSource_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSStreamInputSource_win32.m; path = platform_win32/NSStreamInputSource_win32.m; sourceTree = "<group>"; };
6E2805B909747D0400EC542B /* NSSocketInputSource_windows.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSSocketInputSource_windows.h; path = platform_win32/NSSocketInputSource_windows.h; sourceTree = "<group>"; };
6E2805BA09747D0400EC542B /* NSSocketInputSource_windows.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSSocketInputSource_windows.m; path = platform_win32/NSSocketInputSource_windows.m; sourceTree = "<group>"; };
6E2805BB09747D0400EC542B /* NSString_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSString_win32.h; path = platform_win32/NSString_win32.h; sourceTree = "<group>"; };
6E2805BC09747D0400EC542B /* NSString_win32.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = NSString_win32.m; path = platform_win32/NSString_win32.m; sourceTree = "<group>"; };
6E2805BD09747D0400EC542B /* NSTask_win32.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = NSTask_win32.h; path = platform_win32/NSTask_win32.h; sourceTree = "<group>"; };
@ -1994,8 +2054,15 @@
6EC4AB520A35157600E8D6CA /* NSSocketMonitorSet_Unix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSSocketMonitorSet_Unix.m; path = platform_posix/NSSocketMonitorSet_Unix.m; sourceTree = "<group>"; };
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8DC2EF5B0486A6940098B216 /* Foundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FE35CAEC0B4AB85800FE7AB3 /* objc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = objc.m; sourceTree = "<group>"; };
FE405A6A0B4450FD001B183D /* NSHTTPURLResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSHTTPURLResponse.h; sourceTree = "<group>"; };
FE405A6B0B4450FD001B183D /* NSHTTPURLResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSHTTPURLResponse.m; sourceTree = "<group>"; };
FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NSKeyValueCoding.h; sourceTree = "<group>"; };
FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NSKeyValueCoding.m; sourceTree = "<group>"; };
FEB6CC0E0B4A169C004FADF2 /* objc-class.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "objc-class.m"; sourceTree = "<group>"; };
FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = objc.xcodeproj; path = ../objc/objc.xcodeproj; sourceTree = SOURCE_ROOT; };
FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NSKVCMutableArray.h; sourceTree = "<group>"; };
FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NSKVCMutableArray.m; sourceTree = "<group>"; };
FEB9D30C0B4374F700C239BB /* NSInputStream_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSInputStream_data.h; sourceTree = "<group>"; };
FEB9D30D0B4374F700C239BB /* NSInputStream_data.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSInputStream_data.m; sourceTree = "<group>"; };
FEB9D31A0B43781500C239BB /* NSOutputStream_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSOutputStream_data.h; sourceTree = "<group>"; };
@ -2114,6 +2181,8 @@
0867D691FE84028FC02AAC07 /* Foundation */ = {
isa = PBXGroup;
children = (
FEB6CC800B4A1C7A004FADF2 /* NSKeyValueCoding */,
FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */,
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
6E280B2909747F1F00EC542B /* Foundation.h */,
6E28030D0974787200EC542B /* NSArchiver.h */,
@ -2697,8 +2766,10 @@
6E28034609747A2500EC542B /* objc */ = {
isa = PBXGroup;
children = (
FEB6CC0E0B4A169C004FADF2 /* objc-class.m */,
6E28052609747C8900EC542B /* objc_functions.m */,
6E8115B20A55CB99000DE3F1 /* objc_msg_lookup.m */,
6E28055F09747CCA00EC542B /* objc_msg_sendv.m */,
6E28052709747C8900EC542B /* ObjCArray.h */,
6E28052809747C8900EC542B /* ObjCArray.m */,
6E28052909747C8900EC542B /* ObjCClass.h */,
@ -2720,8 +2791,8 @@
6E28053D09747C8900EC542B /* ObjectiveC.m */,
6E28055A09747C8F00EC542B /* platform_linux */,
6E28055B09747C9900EC542B /* platform_solaris */,
6E28055F09747CCA00EC542B /* objc_msg_sendv.m */,
6E28055C09747CAC00EC542B /* platform_win32 */,
FE35CAEC0B4AB85800FE7AB3 /* objc.m */,
);
path = objc;
sourceTree = "<group>";
@ -2802,8 +2873,8 @@
6E2805B609747D0400EC542B /* NSPlatform_win32.m */,
6E2805B709747D0400EC542B /* NSReadInBackground_win32.h */,
6E2805B809747D0400EC542B /* NSReadInBackground_win32.m */,
6E2805B909747D0400EC542B /* NSStreamInputSource_win32.h */,
6E2805BA09747D0400EC542B /* NSStreamInputSource_win32.m */,
6E2805B909747D0400EC542B /* NSSocketInputSource_windows.h */,
6E2805BA09747D0400EC542B /* NSSocketInputSource_windows.m */,
6E2805BB09747D0400EC542B /* NSString_win32.h */,
6E2805BC09747D0400EC542B /* NSString_win32.m */,
6E2805BD09747D0400EC542B /* NSTask_win32.h */,
@ -2929,6 +3000,27 @@
name = NSCharacterSet;
sourceTree = "<group>";
};
FEB6CC410B4A1922004FADF2 /* Products */ = {
isa = PBXGroup;
children = (
FEB6CC480B4A1922004FADF2 /* objc.framework */,
FEB6CC4A0B4A1922004FADF2 /* objc.framework */,
FEB6CC4C0B4A1922004FADF2 /* objc.framework */,
);
name = Products;
sourceTree = "<group>";
};
FEB6CC800B4A1C7A004FADF2 /* NSKeyValueCoding */ = {
isa = PBXGroup;
children = (
FEB6CC890B4A1D4D004FADF2 /* NSKVCMutableArray.h */,
FEB6CC8A0B4A1D4D004FADF2 /* NSKVCMutableArray.m */,
FEB6CBAE0B4A139F004FADF2 /* NSKeyValueCoding.h */,
FEB6CBAF0B4A139F004FADF2 /* NSKeyValueCoding.m */,
);
path = NSKeyValueCoding;
sourceTree = "<group>";
};
FEB9D2F00B42F85100C239BB /* NSConnection */ = {
isa = PBXGroup;
children = (
@ -3275,6 +3367,8 @@
FEB9D6ED0B4440F200C239BB /* NSMessagePortNameServer.h in Headers */,
FEB9D7060B44414000C239BB /* NSSocketPortNameServer.h in Headers */,
FE405A6E0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */,
FEB6CBB40B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */,
FEB6CC8D0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3515,6 +3609,8 @@
FEB9D6E90B4440F200C239BB /* NSMessagePortNameServer.h in Headers */,
FEB9D7020B44414000C239BB /* NSSocketPortNameServer.h in Headers */,
FE405A700B4450FD001B183D /* NSHTTPURLResponse.h in Headers */,
FEB6CBB20B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */,
FEB6CC8F0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3659,7 +3755,7 @@
6E2805D309747D0400EC542B /* NSPipe_win32.h in Headers */,
6E2805D509747D0400EC542B /* NSPlatform_win32.h in Headers */,
6E2805D709747D0400EC542B /* NSReadInBackground_win32.h in Headers */,
6E2805D909747D0400EC542B /* NSStreamInputSource_win32.h in Headers */,
6E2805D909747D0400EC542B /* NSSocketInputSource_windows.h in Headers */,
6E2805DB09747D0400EC542B /* NSString_win32.h in Headers */,
6E2805DD09747D0400EC542B /* NSTask_win32.h in Headers */,
6E2805E909747D1000EC542B /* NSXMLAttribute.h in Headers */,
@ -3759,6 +3855,8 @@
FEB9D6EB0B4440F200C239BB /* NSMessagePortNameServer.h in Headers */,
FEB9D7040B44414000C239BB /* NSSocketPortNameServer.h in Headers */,
FE405A6C0B4450FD001B183D /* NSHTTPURLResponse.h in Headers */,
FEB6CBB00B4A139F004FADF2 /* NSKeyValueCoding.h in Headers */,
FEB6CC8B0B4A1D4D004FADF2 /* NSKVCMutableArray.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3779,6 +3877,7 @@
6E4D93260A2642BD003D335C /* PBXBuildRule */,
);
dependencies = (
FEB6CC530B4A1952004FADF2 /* PBXTargetDependency */,
);
name = "Foundation-Solaris-sparc";
productInstallPath = "$(HOME)/Library/Frameworks";
@ -3800,6 +3899,7 @@
6EA04A7209E57D5F0067589C /* PBXBuildRule */,
);
dependencies = (
FEB6CC510B4A194C004FADF2 /* PBXTargetDependency */,
);
name = "Foundation-Linux-i386";
productInstallPath = "$(HOME)/Library/Frameworks";
@ -3821,6 +3921,7 @@
6E280B2F09747FCF00EC542B /* PBXBuildRule */,
);
dependencies = (
FEB6CC4F0B4A1944004FADF2 /* PBXTargetDependency */,
);
name = "Foundation-Windows-i386";
productInstallPath = "$(HOME)/Library/Frameworks";
@ -3838,6 +3939,12 @@
mainGroup = 0867D691FE84028FC02AAC07 /* Foundation */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = FEB6CC410B4A1922004FADF2 /* Products */;
ProjectRef = FEB6CC400B4A1922004FADF2 /* objc.xcodeproj */;
},
);
targets = (
8DC2EF4F0486A6940098B216 /* Foundation-Windows-i386 */,
6EA048CA09E57D5F0067589C /* Foundation-Linux-i386 */,
@ -3847,6 +3954,30 @@
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
FEB6CC480B4A1922004FADF2 /* objc.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = objc.framework;
remoteRef = FEB6CC470B4A1922004FADF2 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FEB6CC4A0B4A1922004FADF2 /* objc.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = objc.framework;
remoteRef = FEB6CC490B4A1922004FADF2 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
FEB6CC4C0B4A1922004FADF2 /* objc.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = objc.framework;
remoteRef = FEB6CC4B0B4A1922004FADF2 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
6E4D93160A2642BD003D335C /* Resources */ = {
isa = PBXResourcesBuildPhase;
@ -4145,6 +4276,10 @@
FEB9D6EE0B4440F200C239BB /* NSMessagePortNameServer.m in Sources */,
FEB9D7070B44414000C239BB /* NSSocketPortNameServer.m in Sources */,
FE405A6F0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */,
FEB6CBB50B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */,
FEB6CC100B4A169C004FADF2 /* objc-class.m in Sources */,
FEB6CC8E0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */,
FE35CAEF0B4AB85800FE7AB3 /* objc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -4385,6 +4520,10 @@
FEB9D6EA0B4440F200C239BB /* NSMessagePortNameServer.m in Sources */,
FEB9D7030B44414000C239BB /* NSSocketPortNameServer.m in Sources */,
FE405A710B4450FD001B183D /* NSHTTPURLResponse.m in Sources */,
FEB6CBB30B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */,
FEB6CC110B4A169D004FADF2 /* objc-class.m in Sources */,
FEB6CC900B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */,
FE35CAED0B4AB85800FE7AB3 /* objc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -4577,7 +4716,7 @@
6E71DB21097B5AB50071C089 /* NSPipe_win32.m in Sources */,
6E71DB22097B5AB70071C089 /* NSPlatform_win32.m in Sources */,
6E71DB23097B5AB80071C089 /* NSReadInBackground_win32.m in Sources */,
6E71DB24097B5AB90071C089 /* NSStreamInputSource_win32.m in Sources */,
6E71DB24097B5AB90071C089 /* NSSocketInputSource_windows.m in Sources */,
6E71DB25097B5ABA0071C089 /* NSString_win32.m in Sources */,
6E71DB26097B5ABB0071C089 /* NSTask_win32.m in Sources */,
6E903FFB0A07B65500938799 /* NSConstantString.m in Sources */,
@ -4629,6 +4768,10 @@
FEB9D6EC0B4440F200C239BB /* NSMessagePortNameServer.m in Sources */,
FEB9D7050B44414000C239BB /* NSSocketPortNameServer.m in Sources */,
FE405A6D0B4450FD001B183D /* NSHTTPURLResponse.m in Sources */,
FEB6CBB10B4A139F004FADF2 /* NSKeyValueCoding.m in Sources */,
FEB6CC0F0B4A169C004FADF2 /* objc-class.m in Sources */,
FEB6CC8C0B4A1D4D004FADF2 /* NSKVCMutableArray.m in Sources */,
FE35CAEE0B4AB85800FE7AB3 /* objc.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -4645,6 +4788,21 @@
target = 6EA048CA09E57D5F0067589C /* Foundation-Linux-i386 */;
targetProxy = 6E3877330A0A78F800643D29 /* PBXContainerItemProxy */;
};
FEB6CC4F0B4A1944004FADF2 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = "objc-Windows-i386";
targetProxy = FEB6CC4E0B4A1944004FADF2 /* PBXContainerItemProxy */;
};
FEB6CC510B4A194C004FADF2 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = "objc-Linux-i386";
targetProxy = FEB6CC500B4A194C004FADF2 /* PBXContainerItemProxy */;
};
FEB6CC530B4A1952004FADF2 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = "objc-Solaris-sparc";
targetProxy = FEB6CC520B4A1952004FADF2 /* PBXContainerItemProxy */;
};
FEFC42410B0A5D050041512F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 6E4D91880A2642BD003D335C /* Foundation-Solaris-sparc */;
@ -4677,6 +4835,7 @@
INSTALL_PATH = /Developer/Cocotron/1.0/Windows/i386/Frameworks;
OTHER_CFLAGS = (
"-DFOUNDATION_INSIDE_BUILD",
"-DOBJC_INSIDE_BUILD",
"-D__LITTLE_ENDIAN__",
);
OTHER_LDFLAGS = (
@ -4722,6 +4881,7 @@
INSTALL_PATH = /Developer/Cocotron/1.0/Solaris/sparc/Frameworks;
OTHER_CFLAGS = (
"-DFOUNDATION_INSIDE_BUILD",
"-DOBJC_INSIDE_BUILD",
"-D__BIG_ENDIAN__",
"-fPIC",
);
@ -4751,6 +4911,7 @@
INSTALL_PATH = /Developer/Cocotron/1.0/Linux/i386/Frameworks;
OTHER_CFLAGS = (
"-DFOUNDATION_INSIDE_BUILD",
"-DOBJC_INSIDE_BUILD",
"-D__LITTLE_ENDIAN__",
"-fPIC",
);

View File

@ -33,12 +33,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
return NSAllocateObject(self,0,zone);
}
-init {
return [self initWithObjects:NULL count:0];
}
-initWithArray:(NSArray *)array {
unsigned count=[array count];
id *objects=alloca(sizeof(id)*count);

View File

@ -18,4 +18,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
return NSArray_concreteNew(NULL,objects,count);
}
-init {
return [self initWithObjects:NULL count:0];
}
@end

View File

@ -0,0 +1,39 @@
/* Copyright (c) 2006-2007 Johannes Fortmann
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <Foundation/NSMutableArray.h>
@interface NSKVCMutableArray : NSMutableArray
{
id proxyObject;
id key;
IMP insert;
IMP remove;
IMP replace;
IMP objectAtIndex;
IMP count;
IMP accessor;
IMP setter;
SEL insertSel;
SEL removeSel;
SEL replaceSel;
SEL objectAtIndexSel;
SEL countSel;
SEL accessorSel;
SEL setterSel;
}
-(id)initWithKey:(id)theKey forProxyObject:(id)object;
- (unsigned)count;
- (id)objectAtIndex:(unsigned)index;
- (void)addObject:(id)anObject;
- (void)insertObject:(id)anObject atIndex:(unsigned)index;
- (void)removeLastObject;
- (void)removeObjectAtIndex:(unsigned)index;
- (void)replaceObjectAtIndex:(unsigned)index withObject:(id)anObject;
@end

View File

@ -0,0 +1,146 @@
/* Copyright (c) 2006-2007 Johannes Fortmann
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import "NSKVCMutableArray.h"
#import <Foundation/NSString.h>
#import <Foundation/NSKeyValueCoding.h>
@implementation NSKVCMutableArray
-(id)initWithKey:(id)theKey forProxyObject:(id)object
{
[super init];
proxyObject = [object retain];
key = [theKey retain];
id ukey=[key capitalizedString];
insertSel = NSSelectorFromString([NSString stringWithFormat:@"insertObject:in%@AtIndex:", ukey]);
removeSel = NSSelectorFromString([NSString stringWithFormat:@"removeObjectFrom%@AtIndex:", ukey]);
replaceSel = NSSelectorFromString([NSString stringWithFormat:@"replaceObjectIn%@AtIndex:withObject:", ukey]);
accessorSel = NSSelectorFromString(key);
objectAtIndexSel = NSSelectorFromString([NSString stringWithFormat:@"objectIn%@AtIndex:", ukey]);
setterSel = NSSelectorFromString([NSString stringWithFormat:@"set%@:", ukey]);
countSel = NSSelectorFromString([NSString stringWithFormat:@"countOf%@", ukey]);
if([proxyObject respondsToSelector:insertSel])
insert=[proxyObject methodForSelector:insertSel];
if([proxyObject respondsToSelector:replaceSel])
replace=[proxyObject methodForSelector:replaceSel];
if([proxyObject respondsToSelector:removeSel])
remove=[proxyObject methodForSelector:removeSel];
if([proxyObject respondsToSelector:accessorSel])
accessor=[proxyObject methodForSelector:accessorSel];
if([proxyObject respondsToSelector:setterSel])
setter=[proxyObject methodForSelector:setterSel];
if([proxyObject respondsToSelector:objectAtIndexSel])
objectAtIndex=[proxyObject methodForSelector:objectAtIndexSel];
if([proxyObject respondsToSelector:countSel])
count=[proxyObject methodForSelector:countSel];
return self;
}
-(id)_representedObject
{
if(accessor)
return accessor(proxyObject, accessorSel);
return [proxyObject valueForKey:key];
}
-(void)_setRepresentedObject:(id)object
{
if(setter)
setter(proxyObject, setterSel, object);
else
[proxyObject setValue:object forKey:key];
}
-(void)dealloc
{
[key release];
[proxyObject release];
[super dealloc];
}
- (unsigned)count;
{
if(count)
return (int)count(proxyObject, countSel);
return [[self _representedObject] count];
}
- (id)objectAtIndex:(unsigned)index;
{
if(objectAtIndex)
return objectAtIndex(proxyObject, objectAtIndexSel, index);
return [[self _representedObject] objectAtIndex:index];
}
- (void)addObject:(id)anObject;
{
if(insert)
insert(proxyObject, insertSel, anObject, [self count]);
else
{
id target=[[self _representedObject] mutableCopy];
[target addObject:anObject];
[self _setRepresentedObject:target];
[target release];
}
}
- (void)insertObject:(id)anObject atIndex:(unsigned)index;
{
if(insert)
insert(proxyObject, insertSel, anObject, index);
else
{
id target=[[self _representedObject] mutableCopy];
[target insertObject:anObject atIndex:index];
[self _setRepresentedObject:target];
[target release];
}
}
- (void)removeLastObject;
{
if(remove)
remove(proxyObject, removeSel, [self count]-1);
else
{
id target=[[self _representedObject] mutableCopy];
[target removeLastObject];
[self _setRepresentedObject:target];
[target release];
}
}
- (void)removeObjectAtIndex:(unsigned)index;
{
if(remove)
remove(proxyObject, removeSel, index);
else
{
id target=[[self _representedObject] mutableCopy];
[target removeObjectAtIndex:index];
[self _setRepresentedObject:target];
[target release];
}
}
- (void)replaceObjectAtIndex:(unsigned)index withObject:(id)anObject;
{
if(replace)
replace(proxyObject, replaceSel, index, anObject);
else
{
[self removeObjectAtIndex:index];
[self insertObject:anObject atIndex:index];
}
}
@end

View File

@ -0,0 +1,35 @@
/* Copyright (c) 2006-2007 Johannes Fortmann
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <Foundation/NSObject.h>
@class NSDictionary, NSArray, NSError;
@interface NSObject (KeyValueCoding)
+(BOOL)accessInstanceVariablesDirectly;
// primitive methods
-(id)valueForKey:(NSString*)key;
-(void)setValue:(id)value forKey:(NSString *)key;
-(BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError;
// key path methods
-(id)valueForKeyPath:(NSString*)keyPath;
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath;
-(BOOL)validateValue:(id *)ioValue forKeyPath:(NSString *)keyPath error:(NSError **)outError;
// dictionary methods
-(NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
-(void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
// undefined keys etc.
-(id)valueForUndefinedKey:(NSString *)key;
-(void)setValue:(id)value forUndefinedKey:(NSString *)key;
-(void)setNilValueForKey:(id)key;
-(id)mutableArrayValueForKey:(id)key;
@end

View File

@ -0,0 +1,359 @@
/* Copyright (c) 2006-2007 Johannes Fortmann
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <Foundation/NSKeyValueCoding.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSDictionary.h>
#import <Foundation/NSException.h>
#import <Foundation/NSEnumerator.h>
#import <Foundation/NSNull.h>
#import <Foundation/NSValue.h>
#import <Foundation/NSString.h>
#import <Foundation/NSInvocation.h>
#import <Foundation/NSMethodSignature.h>
#include <objc/objc-class.h>
#include <malloc.h>
#import "NSKVCMutableArray.h"
@implementation NSObject (KeyValueCoding)
#pragma mark -
#pragma mark Private helper methods
-(void)_demangleTypeEncoding:(const char*)type to:(char*)cleanType
{
while(*type)
{
if(*type=='"')
{
type++;
while(*type && *type!='"')
type++;
type++;
}
*cleanType=*type;
type++; cleanType++;
*cleanType=0;
}
}
-(id)_wrapValue:(void*)value ofType:(const char*)type
{
if(type[0]!='@' && strlen(type)>1)
{
// valueWithBytes:objCType: doesn't like quotes in its types
char* cleanType=alloca(strlen(type)+1);
[self _demangleTypeEncoding:type to:cleanType];
return [NSValue valueWithBytes:value objCType:cleanType];
}
switch(type[0])
{
case '@':
return *(id*)value;
case 'i':
return [NSNumber numberWithInt:*(int*)value];
case 'I':
return [NSNumber numberWithUnsignedInt:*(int*)value];
case 'f':
return [NSNumber numberWithFloat:*(float*)value];
case 'd':
return [NSNumber numberWithDouble:*(double*)value];
case 's':
return [NSNumber numberWithShort:*(short*)value];
case 'S':
return [NSNumber numberWithUnsignedShort:*(unsigned short*)value];
default:
// FIX #warning some wrapping types unimplemented
return [NSString stringWithFormat:@"FIXME: wrap value of type %s unimplemented for get", type];
}
}
-(BOOL)_setValue:(id)value toBuffer:(void*)buffer ofType:(const char*)type
{
if(type[0]!='@' && strlen(type)>1)
{
char* cleanType=alloca(strlen(type)+1);
[self _demangleTypeEncoding:type to:cleanType];
if(strcmp([value objCType], cleanType))
{
return NO;
}
[value getValue:buffer];
return YES;
}
switch(type[0])
{
case '@':
*(id*)buffer = value;
return YES;
case 'i':
*(int*)buffer = [value intValue];
return YES;
case 'I':
*(unsigned int*)buffer = [value unsignedIntValue];
return YES;
case 'f':
*(float*)buffer = [value floatValue];
return YES;
case 'd':
*(double*)buffer = [value doubleValue];
return YES;
default:
// FIX #warning some wrapping types unimplemented
NSLog(@"FIXME: wrap value of type %s unimplemented for set", type);
return NO;
}
}
-(id)_wrapReturnValueForSelector:(SEL)sel
{
id sig=[self methodSignatureForSelector:sel];
const char* type=[sig methodReturnType];
if(strcmp(type, "@"))
{
id inv=[NSInvocation invocationWithMethodSignature:sig];
[inv setSelector:sel];
[inv setTarget:self];
[inv invoke];
int returnLength=[sig methodReturnLength];
void *returnValue=alloca(returnLength);
[inv getReturnValue:returnValue];
return [self _wrapValue:returnValue ofType:type];
}
return [self performSelector:sel];
}
-(void)_setValue:(id)value withSelector:(SEL)sel fromKey:(id)key
{
id sig=[self methodSignatureForSelector:sel];
const char* type=[sig getArgumentTypeAtIndex:2];
if(strcmp(type, "@"))
{
if(!value)
{
// value is nil and accessor doesn't take object type
return [self setNilValueForKey:key];
}
unsigned int size, align;
id inv=[NSInvocation invocationWithMethodSignature:sig];
[inv setSelector:sel];
[inv setTarget:self];
NSGetSizeAndAlignment(type, &size, &align);
void *buffer=alloca(size);
[self _setValue:value toBuffer:buffer ofType:type];
[inv setArgument:buffer atIndex:2];
[inv invoke];
return;
}
[self performSelector:sel withObject:value];
}
#pragma mark -
#pragma mark Primary methods
-(id)valueForKey:(NSString*)key
{
SEL sel=NSSelectorFromString(key);
// FIXME: getKey, _getKey, isKey, _isKey are missing
if([self respondsToSelector:sel])
{
return [self _wrapReturnValueForSelector:sel];
}
if([isa accessInstanceVariablesDirectly])
{
sel=NSSelectorFromString([NSString stringWithFormat:@"_%@", key]);
if([self respondsToSelector:sel])
{
return [self _wrapReturnValueForSelector:sel];
}
Ivar ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"_%@", key] cString]);
if(!ivar)
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"%@", key] cString]);
if(ivar)
{
return [self _wrapValue:(void*)self+ivar->ivar_offset ofType:ivar->ivar_type];
}
}
return [self valueForUndefinedKey:key];
}
- (void)setValue:(id)value forKey:(NSString *)key
{
id ukey = [key capitalizedString];
SEL sel = NSSelectorFromString([NSString stringWithFormat:@"set%@:", ukey]);
if([self respondsToSelector:sel])
{
return [self _setValue:value withSelector:sel fromKey:key];
}
if([isa accessInstanceVariablesDirectly])
{
sel = NSSelectorFromString([NSString stringWithFormat:@"_set%@:", ukey]);
if([self respondsToSelector:sel])
{
return [self _setValue:value withSelector:sel fromKey:key];
}
Ivar ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"_%@", key] cString]);
if(!ivar)
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"_is%@", ukey] cString]);
if(!ivar)
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"%@", key] cString]);
if(!ivar)
ivar = class_getInstanceVariable(isa, [[NSString stringWithFormat:@"is%@", ukey] cString]);
if(ivar)
{
// if value is nil and ivar is not an object type
if(!value && ivar->ivar_type[0]!='@')
return [self setNilValueForKey:key];
if([self _setValue:value toBuffer:(void*)self+ivar->ivar_offset ofType:ivar->ivar_type])
return;
}
}
[self setValue:value forUndefinedKey:key];
}
- (BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError
{
SEL sel=NSSelectorFromString([NSString stringWithFormat:@"validate%@:error:", [key capitalizedString]]);
if([self respondsToSelector:sel])
{
id inv=[NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:sel]];
[inv setSelector:sel];
[inv setTarget:self];
[inv setArgument:ioValue atIndex:2];
[inv setArgument:outError atIndex:3];
[inv invoke];
BOOL ret;
[inv getReturnValue:&ret];
return ret;
}
return YES;
}
#pragma mark -
#pragma mark Secondary methods
+(BOOL)accessInstanceVariablesDirectly
{
return YES;
}
- (id)valueForUndefinedKey:(NSString *)key
{
[NSException raise:@"NSUndefinedKeyException"
format:@"%@: trying to get undefined key %@", [self className], key];
return nil;
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
[NSException raise:@"NSUndefinedKeyException"
format:@"%@: trying to set undefined key %@", [self className], key];
}
-(void)setNilValueForKey:(id)key
{
[NSException raise:@"NSInvalidArgumentException"
format:@"%@: trying to set nil value for key %@", [self className], key];
}
-(id)valueForKeyPath:(NSString*)keyPath
{
// FIXME: operators missing
id en=[[keyPath componentsSeparatedByString:@"."] objectEnumerator];
id pathComponent;
id ret=self;
while((pathComponent = [en nextObject]) && ret)
{
ret = [ret valueForKey:pathComponent];
}
return ret;
}
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath
{
id array=[[[keyPath componentsSeparatedByString:@"."] mutableCopy] autorelease];
id lastPathComponent=[array lastObject];
[array removeObject:lastPathComponent];
id en=[array objectEnumerator];
id pathComponent;
id ret=self;
while((pathComponent = [en nextObject]) && ret)
{
ret = [ret valueForKey:pathComponent];
}
[ret setValue:value forKey:lastPathComponent];
}
- (BOOL)validateValue:(id *)ioValue forKeyPath:(NSString *)keyPath error:(NSError **)outError
{
id array=[[[keyPath componentsSeparatedByString:@"."] mutableCopy] autorelease];
id lastPathComponent=[array lastObject];
[array removeObject:lastPathComponent];
id en=[array objectEnumerator];
id pathComponent;
id ret=self;
while((pathComponent = [en nextObject]) && ret)
{
ret = [ret valueForKey:pathComponent];
}
return [self validateValue:ioValue forKey:lastPathComponent error:outError];
}
-(NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys
{
id en=[keys objectEnumerator];
id ret=[NSMutableDictionary dictionary];
id key;
while(key=[en nextObject])
{
id value=[self valueForKey:key];
[ret setObject:value ? value : [NSNull null] forKey:key];
}
return ret;
}
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues
{
id en=[keyedValues keyEnumerator];
NSString* key;
NSNull* null=[NSNull null];
while(key=[en nextObject])
{
id value=[keyedValues objectForKey:key];
[self setValue:value == null ? nil : value forKey:key];
}
}
-(id)mutableArrayValueForKey:(id)key
{
return [[[NSKVCMutableArray alloc] initWithKey:key forProxyObject:self] autorelease];
}
@end

View File

@ -9,8 +9,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSInputStream.h>
@interface NSInputStream_data : NSInputStream {
NSData *_data;
unsigned _position;
NSStreamStatus _status;
NSData *_data;
unsigned _position;
}
@end

View File

@ -8,6 +8,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSInputStream.h>
@interface NSInputStream_file : NSInputStream {
NSStreamStatus _status;
}

View File

@ -10,6 +10,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
@interface NSInputStream_socket : NSInputStream {
NSStreamStatus _status;
}

View File

@ -9,6 +9,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSOutputStream.h>
@interface NSOutputStream_buffer : NSOutputStream {
NSStreamStatus _status;
}

View File

@ -11,6 +11,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
@class NSMutableData;
@interface NSOutputStream_data : NSOutputStream {
NSStreamStatus _status;
NSMutableData *_data;
}

View File

@ -8,6 +8,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSOutputStream.h>
@interface NSOutputStream_file : NSOutputStream {
NSStreamStatus _status;
}

View File

@ -9,6 +9,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSOutputStream.h>
@interface NSOutputStream_socket : NSOutputStream {
NSStreamStatus _status;
}

View File

@ -9,6 +9,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/ObjCHashTable.h>
#import <Foundation/ObjCTypes.h>
#import <Foundation/ObjCSelector.h>
#import <objc/objc-class.h>
enum {
CLASS_INFO_CLASS=0x001,
@ -18,12 +19,6 @@ enum {
CLASS_INFO_LINKED=0x100
};
typedef struct {
char *name;
char *type;
int offset;
} OBJCInstanceVariable;
typedef struct {
int count;
OBJCInstanceVariable list[1];

View File

@ -97,7 +97,7 @@ static OBJCInstanceVariable *instanceVariableWithName(OBJCClassTemplate *class,c
int i;
for(i=0;ivarList!=NULL && i<ivarList->count;i++){
if(strcmp(ivarList->list[i].name,name)==0)
if(strcmp(ivarList->list[i].ivar_name,name)==0)
return &(ivarList->list[i]);
}
if(class->isa->isa==class)
@ -120,7 +120,7 @@ void OBJCSetInstanceVariable(id object,const char *name,void *value) {
OBJCInstanceVariable *ivar=instanceVariableWithName(object->isa,name);
if(ivar!=NULL)
ivarCopy(object,ivar->offset,value,sizeof(id));
ivarCopy(object,ivar->ivar_offset,value,sizeof(id));
}
BOOL OBJCIsKindOfClass(id object,Class kindOf) {

View File

@ -0,0 +1,25 @@
/* Copyright (c) 2007 Christopher J. W. Lloyd
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <objc/objc-class.h>
#import <Foundation/OBJCClass.h>
Ivar class_getInstanceVariable(Class class,const char *variableName) {
for(;;class=class->superclass){
OBJCInstanceVariableList *ivarList=class->ivars;
int i;
for(i=0;ivarList!=NULL && i<ivarList->count;i++){
if(strcmp(ivarList->list[i].ivar_name,variableName)==0)
return &(ivarList->list[i]);
}
if(class->isa->isa==class)
break;
}
return NULL;
}

7
Foundation/objc/objc.m Normal file
View File

@ -0,0 +1,7 @@
/* Copyright (c) 2007 Christopher J. W. Lloyd
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */

View File

@ -19,7 +19,7 @@ enum {
XYXSocketExceptionalActivity=4
};
@interface NSStreamInputSource_win32 : NSInputSource {
@interface NSSocketInputSource_windows : NSInputSource {
SOCKET _socket;
int _index;
id _delegate;
@ -44,11 +44,11 @@ enum {
@end
@interface NSObject(NSStreamInputSource_win32_delegate)
@interface NSObject(NSSocketInputSource_windows_delegate)
-(void)activityMonitorIndicatesReadable:(NSStreamInputSource_win32 *)activityMonitor;
-(void)activityMonitorIndicatesWriteable:(NSStreamInputSource_win32 *)activityMonitor;
-(void)activityMonitorIndicatesException:(NSStreamInputSource_win32 *)activityMonitor;
-(void)activityMonitorIndicatesReadable:(NSSocketInputSource_windows *)activityMonitor;
-(void)activityMonitorIndicatesWriteable:(NSSocketInputSource_windows *)activityMonitor;
-(void)activityMonitorIndicatesException:(NSSocketInputSource_windows *)activityMonitor;
@end
#endif

View File

@ -8,7 +8,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
// Original - Christopher Lloyd <cjwl@objc.net>
#if defined(WIN32)
#import <Foundation/NSStreamInputSource_win32.h>
#import <Foundation/NSSocketInputSource_windows.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSRunLoop.h>
#import <Foundation/NSDate.h>
@ -17,10 +17,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
typedef struct {
unsigned _max;
fd_set *_set;
} YRSelectSet;
} Win32SelectSet;
YRSelectSet *YRSelectSetNew() {
YRSelectSet *sset=NSZoneMalloc(NSDefaultMallocZone(),sizeof(YRSelectSet));
Win32SelectSet *Win32SelectSetNew() {
Win32SelectSet *sset=NSZoneMalloc(NSDefaultMallocZone(),sizeof(Win32SelectSet));
sset->_max=FD_SETSIZE;
@ -30,17 +30,17 @@ YRSelectSet *YRSelectSetNew() {
return sset;
}
void YRSelectSetDealloc(YRSelectSet *sset) {
void Win32SelectSetDealloc(Win32SelectSet *sset) {
NSZoneFree(NSDefaultMallocZone(),sset->_set);
NSZoneFree(NSDefaultMallocZone(),sset);
}
void YRSelectSetZero(YRSelectSet *sset) {
void Win32SelectSetZero(Win32SelectSet *sset) {
sset->_set->fd_count=0;
}
void YRSelectSetClear(YRSelectSet *sset,SOCKET socket) {
void Win32SelectSetClear(Win32SelectSet *sset,SOCKET socket) {
int i;
for(i=0;i<sset->_set->fd_count;i++){
@ -56,7 +56,7 @@ void YRSelectSetClear(YRSelectSet *sset,SOCKET socket) {
}
void YRSelectSetSet(YRSelectSet *sset,SOCKET socket) {
void Win32SelectSetSet(Win32SelectSet *sset,SOCKET socket) {
if(sset->_set->fd_count>=sset->_max){
sset->_max*=2;
sset->_set=NSZoneRealloc(NSDefaultMallocZone(),sset->_set,
@ -65,7 +65,7 @@ void YRSelectSetSet(YRSelectSet *sset,SOCKET socket) {
sset->_set->fd_array[sset->_set->fd_count++]=socket;
}
BOOL YRSelectSetIsSet(YRSelectSet *sset,SOCKET socket) {
BOOL Win32SelectSetIsSet(Win32SelectSet *sset,SOCKET socket) {
int i;
for(i=0;i<sset->_set->fd_count;i++)
@ -75,28 +75,28 @@ BOOL YRSelectSetIsSet(YRSelectSet *sset,SOCKET socket) {
return NO;
}
fd_set *YRSelectSetFDSet(YRSelectSet *sset) {
fd_set *Win32SelectSetFDSet(Win32SelectSet *sset) {
return sset->_set;
}
NSString *YRSocketErrorStringFromCode(int code) {
NSString *Win32SocketErrorStringFromCode(int code) {
return [NSString stringWithFormat:@"code=%d",code];
}
NSString *YRSocketErrorString(void) {
return YRSocketErrorStringFromCode(WSAGetLastError());
NSString *Win32SocketErrorString(void) {
return Win32SocketErrorStringFromCode(WSAGetLastError());
}
BOOL _YRSocketAssert(int r,int line,const char *file){
if(r<0){
NSLog(@"socket error %@ at %d in %s",YRSocketErrorString(),line,file);
NSLog(@"socket error %@ at %d in %s",Win32SocketErrorString(),line,file);
return YES;
}
return NO;
}
#define YRSocketAssert(call) _YRSocketAssert(call,__LINE__,__FILE__)
#define Win32SocketAssert(call) _YRSocketAssert(call,__LINE__,__FILE__)
@implementation NSStreamInputSource_win32
@implementation NSSocketInputSource_windows
static HANDLE eventHandle=NULL;
static NSHandleMonitor_win32 *eventMonitor=nil;
@ -114,20 +114,20 @@ static volatile struct monitorStruct {
} *monitors;
static WINAPI DWORD selectThread(LPVOID arg){
YRSelectSet *readset,*writeset,*exceptset;
Win32SelectSet *readset,*writeset,*exceptset;
int i,nfds;
unsigned activity;
readset=YRSelectSetNew();
writeset=YRSelectSetNew();
exceptset=YRSelectSetNew();
readset=Win32SelectSetNew();
writeset=Win32SelectSetNew();
exceptset=Win32SelectSetNew();
while(YES){
BOOL setEvent;
YRSelectSetZero(readset);
YRSelectSetZero(writeset);
YRSelectSetZero(exceptset);
Win32SelectSetZero(readset);
Win32SelectSetZero(writeset);
Win32SelectSetZero(exceptset);
EnterCriticalSection (threadLock);
nfds=0;
@ -137,26 +137,26 @@ static WINAPI DWORD selectThread(LPVOID arg){
nfds=monitors[i].socket;
if(monitors[i].activity&XYXSocketReadableActivity)
YRSelectSetSet(readset,monitors[i].socket);
Win32SelectSetSet(readset,monitors[i].socket);
if(monitors[i].activity&XYXSocketWritableActivity)
YRSelectSetSet(writeset,monitors[i].socket);
Win32SelectSetSet(writeset,monitors[i].socket);
if(monitors[i].activity&XYXSocketExceptionalActivity)
YRSelectSetSet(exceptset,monitors[i].socket);
Win32SelectSetSet(exceptset,monitors[i].socket);
}
}
LeaveCriticalSection (threadLock);
nfds++;
YRSelectSetSet(readset,threadPingRead);
Win32SelectSetSet(readset,threadPingRead);
if(nfds<=threadPingRead)
nfds=threadPingRead+1;
if(select(nfds,YRSelectSetFDSet(readset),YRSelectSetFDSet(writeset), YRSelectSetFDSet(exceptset),NULL)<0)
if(select(nfds,Win32SelectSetFDSet(readset),Win32SelectSetFDSet(writeset), Win32SelectSetFDSet(exceptset),NULL)<0)
continue;
if(YRSelectSetIsSet(readset,threadPingRead)){
if(Win32SelectSetIsSet(readset,threadPingRead)){
char buf[4096];
recv(threadPingRead,buf,4096,0);
@ -170,11 +170,11 @@ static WINAPI DWORD selectThread(LPVOID arg){
if(monitors[i].socket==INVALID_SOCKET)
continue;
if(YRSelectSetIsSet(readset,monitors[i].socket))
if(Win32SelectSetIsSet(readset,monitors[i].socket))
activity|=XYXSocketReadableActivity;
if(YRSelectSetIsSet(writeset,monitors[i].socket))
if(Win32SelectSetIsSet(writeset,monitors[i].socket))
activity|=XYXSocketWritableActivity;
if(YRSelectSetIsSet(exceptset,monitors[i].socket))
if(Win32SelectSetIsSet(exceptset,monitors[i].socket))
activity|=XYXSocketExceptionalActivity;
if(activity!=XYXSocketNoActivity){
@ -202,19 +202,19 @@ static void createPingPair(int pair[2]){
struct sockaddr_in address;
int namelen;
YRSocketAssert(readSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
YRSocketAssert(writeSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
Win32SocketAssert(readSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
Win32SocketAssert(writeSocket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP));
byteZero(&address,sizeof(struct sockaddr_in));
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");
address.sin_port=0;
YRSocketAssert(bind(readSocket,(struct sockaddr *)&address,
Win32SocketAssert(bind(readSocket,(struct sockaddr *)&address,
sizeof(struct sockaddr_in)));
namelen=sizeof(address);
YRSocketAssert (getsockname(readSocket,(struct sockaddr *)&address,&namelen));
Win32SocketAssert (getsockname(readSocket,(struct sockaddr *)&address,&namelen));
YRSocketAssert(connect(writeSocket,(struct sockaddr *)&address,
Win32SocketAssert(connect(writeSocket,(struct sockaddr *)&address,
sizeof(struct sockaddr_in)));
pair[0]=readSocket;
@ -247,7 +247,7 @@ static void createPingPair(int pair[2]){
}
-(void)pingThread {
YRSocketAssert(send(threadPingWrite," ",1,0));
Win32SocketAssert(send(threadPingWrite," ",1,0));
}
+(void)handleMonitorIndicatesSignaled:(NSHandleMonitor_win32 *)monitor {

26
objc/Info.plist Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>org.cocotron.objc</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>

17
objc/objc-class.h Normal file
View File

@ -0,0 +1,17 @@
/* Copyright (c) 2007 Christopher J. W. Lloyd
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <objc/objc-export.h>
typedef struct objc_ivar {
char *ivar_name;
char *ivar_type;
int ivar_offset;
} *Ivar, OBJCInstanceVariable;
OBJC_EXPORT Ivar class_getInstanceVariable(Class class,const char *variableName);

19
objc/objc-export.h Normal file
View File

@ -0,0 +1,19 @@
/* Copyright (c) 2007 Christopher J. W. Lloyd
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <stdlib.h>
#if defined(__WIN32__)
#if defined(OBJC_INSIDE_BUILD)
#define OBJC_EXPORT __declspec(dllexport)
#else
#define OBJC_EXPORT __declspec(dllimport)
#endif
#else
#define OBJC_EXPORT extern
#endif

10
objc/objc.h Normal file
View File

@ -0,0 +1,10 @@
/* Copyright (c) 2007 Christopher J. W. Lloyd
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#import <objc/objc-export.h>

View File

@ -0,0 +1,460 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXAggregateTarget section */
FE4034A10B42F1BC00CEC41A /* objc */ = {
isa = PBXAggregateTarget;
buildConfigurationList = FE4034AE0B42F1D600CEC41A /* Build configuration list for PBXAggregateTarget "objc" */;
buildPhases = (
);
dependencies = (
FE4034A30B42F1C100CEC41A /* PBXTargetDependency */,
FE4034A50B42F1C400CEC41A /* PBXTargetDependency */,
FE4034A70B42F1C800CEC41A /* PBXTargetDependency */,
);
name = objc;
productName = objc;
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
FE4034BA0B42F24C00CEC41A /* objc-class.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034B90B42F24C00CEC41A /* objc-class.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE4034BB0B42F24C00CEC41A /* objc-class.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034B90B42F24C00CEC41A /* objc-class.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE4034BC0B42F24C00CEC41A /* objc-class.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034B90B42F24C00CEC41A /* objc-class.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE4034CF0B42F2C400CEC41A /* objc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034CE0B42F2C400CEC41A /* objc.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE4034D00B42F2C400CEC41A /* objc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034CE0B42F2C400CEC41A /* objc.h */; settings = {ATTRIBUTES = (Public, ); }; };
FE4034D10B42F2C400CEC41A /* objc.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4034CE0B42F2C400CEC41A /* objc.h */; settings = {ATTRIBUTES = (Public, ); }; };
FEB6CBFA0B4A1584004FADF2 /* objc-export.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBF90B4A1584004FADF2 /* objc-export.h */; settings = {ATTRIBUTES = (Public, ); }; };
FEB6CBFB0B4A1584004FADF2 /* objc-export.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBF90B4A1584004FADF2 /* objc-export.h */; settings = {ATTRIBUTES = (Public, ); }; };
FEB6CBFC0B4A1584004FADF2 /* objc-export.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB6CBF90B4A1584004FADF2 /* objc-export.h */; settings = {ATTRIBUTES = (Public, ); }; };
/* End PBXBuildFile section */
/* Begin PBXBuildRule section */
FE4034350B42E73300CEC41A /* PBXBuildRule */ = {
isa = PBXBuildRule;
compilerSpec = org.cocotron.1.0.windows.i386.gcc.4_0_3;
fileType = sourcecode.c;
isEditable = 1;
outputFiles = (
);
};
FE4034560B42E8AF00CEC41A /* PBXBuildRule */ = {
isa = PBXBuildRule;
compilerSpec = org.cocotron.1.0.linux.i386.gcc.4_0_3;
fileType = sourcecode.c;
isEditable = 1;
outputFiles = (
);
};
FE4034870B42E94D00CEC41A /* PBXBuildRule */ = {
isa = PBXBuildRule;
compilerSpec = org.cocotron.1.0.linux.i386.gcc.4_0_3;
fileType = sourcecode.c;
isEditable = 1;
outputFiles = (
);
};
/* End PBXBuildRule section */
/* Begin PBXContainerItemProxy section */
FE4034A20B42F1C100CEC41A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
remoteInfo = "objc-Windows-i386";
};
FE4034A40B42F1C400CEC41A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = FE4034530B42E8AF00CEC41A;
remoteInfo = "objc-Linux-i386";
};
FE4034A60B42F1C800CEC41A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = FE4034840B42E94D00CEC41A;
remoteInfo = "objc-Solaris-sparc";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8DC2EF5B0486A6940098B216 /* objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FE4034590B42E8AF00CEC41A /* objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FE40348A0B42E94D00CEC41A /* objc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = objc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FE4034B90B42F24C00CEC41A /* objc-class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "objc-class.h"; sourceTree = "<group>"; };
FE4034CE0B42F2C400CEC41A /* objc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc.h; sourceTree = "<group>"; };
FEB6CBF90B4A1584004FADF2 /* objc-export.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "objc-export.h"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
034768DFFF38A50411DB9C8B /* Products */ = {
isa = PBXGroup;
children = (
8DC2EF5B0486A6940098B216 /* objc.framework */,
FE4034590B42E8AF00CEC41A /* objc.framework */,
FE40348A0B42E94D00CEC41A /* objc.framework */,
);
name = Products;
sourceTree = "<group>";
};
0867D691FE84028FC02AAC07 /* objc */ = {
isa = PBXGroup;
children = (
08FB77AEFE84172EC02AAC07 /* Classes */,
32C88DFF0371C24200C91783 /* Other Sources */,
089C1665FE841158C02AAC07 /* Resources */,
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
034768DFFF38A50411DB9C8B /* Products */,
);
name = objc;
sourceTree = "<group>";
};
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */,
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */,
);
name = "External Frameworks and Libraries";
sourceTree = "<group>";
};
089C1665FE841158C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
8DC2EF5A0486A6940098B216 /* Info.plist */,
);
name = Resources;
sourceTree = "<group>";
};
08FB77AEFE84172EC02AAC07 /* Classes */ = {
isa = PBXGroup;
children = (
FE4034B90B42F24C00CEC41A /* objc-class.h */,
FE4034CE0B42F2C400CEC41A /* objc.h */,
FEB6CBF90B4A1584004FADF2 /* objc-export.h */,
);
name = Classes;
sourceTree = "<group>";
};
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
);
name = "Other Frameworks";
sourceTree = "<group>";
};
32C88DFF0371C24200C91783 /* Other Sources */ = {
isa = PBXGroup;
children = (
);
name = "Other Sources";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8DC2EF500486A6940098B216 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
FE4034BA0B42F24C00CEC41A /* objc-class.h in Headers */,
FE4034D00B42F2C400CEC41A /* objc.h in Headers */,
FEB6CBFA0B4A1584004FADF2 /* objc-export.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
FE4034540B42E8AF00CEC41A /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
FE4034BB0B42F24C00CEC41A /* objc-class.h in Headers */,
FE4034CF0B42F2C400CEC41A /* objc.h in Headers */,
FEB6CBFC0B4A1584004FADF2 /* objc-export.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
FE4034850B42E94D00CEC41A /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
FE4034BC0B42F24C00CEC41A /* objc-class.h in Headers */,
FE4034D10B42F2C400CEC41A /* objc.h in Headers */,
FEB6CBFB0B4A1584004FADF2 /* objc-export.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8DC2EF4F0486A6940098B216 /* objc-Windows-i386 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "objc-Windows-i386" */;
buildPhases = (
8DC2EF500486A6940098B216 /* Headers */,
8DC2EF520486A6940098B216 /* Resources */,
);
buildRules = (
FE4034350B42E73300CEC41A /* PBXBuildRule */,
);
dependencies = (
);
name = "objc-Windows-i386";
productInstallPath = "$(HOME)/Library/Frameworks";
productName = objc;
productReference = 8DC2EF5B0486A6940098B216 /* objc.framework */;
productType = "com.apple.product-type.framework";
};
FE4034530B42E8AF00CEC41A /* objc-Linux-i386 */ = {
isa = PBXNativeTarget;
buildConfigurationList = FE4034570B42E8AF00CEC41A /* Build configuration list for PBXNativeTarget "objc-Linux-i386" */;
buildPhases = (
FE4034540B42E8AF00CEC41A /* Headers */,
FE4034550B42E8AF00CEC41A /* Resources */,
);
buildRules = (
FE4034560B42E8AF00CEC41A /* PBXBuildRule */,
);
dependencies = (
);
name = "objc-Linux-i386";
productInstallPath = "$(HOME)/Library/Frameworks";
productName = objc;
productReference = FE4034590B42E8AF00CEC41A /* objc.framework */;
productType = "com.apple.product-type.framework";
};
FE4034840B42E94D00CEC41A /* objc-Solaris-sparc */ = {
isa = PBXNativeTarget;
buildConfigurationList = FE4034880B42E94D00CEC41A /* Build configuration list for PBXNativeTarget "objc-Solaris-sparc" */;
buildPhases = (
FE4034850B42E94D00CEC41A /* Headers */,
FE4034860B42E94D00CEC41A /* Resources */,
);
buildRules = (
FE4034870B42E94D00CEC41A /* PBXBuildRule */,
);
dependencies = (
);
name = "objc-Solaris-sparc";
productInstallPath = "$(HOME)/Library/Frameworks";
productName = objc;
productReference = FE40348A0B42E94D00CEC41A /* objc.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "objc" */;
hasScannedForEncodings = 1;
mainGroup = 0867D691FE84028FC02AAC07 /* objc */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
targets = (
8DC2EF4F0486A6940098B216 /* objc-Windows-i386 */,
FE4034530B42E8AF00CEC41A /* objc-Linux-i386 */,
FE4034840B42E94D00CEC41A /* objc-Solaris-sparc */,
FE4034A10B42F1BC00CEC41A /* objc */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8DC2EF520486A6940098B216 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
FE4034550B42E8AF00CEC41A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
FE4034860B42E94D00CEC41A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXTargetDependency section */
FE4034A30B42F1C100CEC41A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 8DC2EF4F0486A6940098B216 /* objc-Windows-i386 */;
targetProxy = FE4034A20B42F1C100CEC41A /* PBXContainerItemProxy */;
};
FE4034A50B42F1C400CEC41A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = FE4034530B42E8AF00CEC41A /* objc-Linux-i386 */;
targetProxy = FE4034A40B42F1C400CEC41A /* PBXContainerItemProxy */;
};
FE4034A70B42F1C800CEC41A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = FE4034840B42E94D00CEC41A /* objc-Solaris-sparc */;
targetProxy = FE4034A60B42F1C800CEC41A /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1DEB91AF08733DA50010E9CD /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = i386;
DEPLOYMENT_LOCATION = YES;
DSTROOT = /;
EXECUTABLE_SUFFIX = .1.0.dll;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = /Developer/Cocotron/1.0/Windows/i386/Frameworks;
OTHER_CFLAGS = (
"-DOBJC_INSIDE_BUILD",
"-D__LITTLE_ENDIAN__",
);
OTHER_LDFLAGS = (
"-shared",
"-Wl,--enable-auto-import",
"-Wl,--export-all-symbols",
"-Wl,--out-implib,$TARGET_BUILD_DIR/$(PRODUCT_NAME).framework/lib$(PRODUCT_NAME).a",
);
PREBINDING = NO;
PRODUCT_NAME = objc;
SYMROOT = /Developer/Cocotron/1.0/build/objc/Windows/i386;
};
name = Deployment;
};
1DEB91B308733DA50010E9CD /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Deployment;
};
FE4034580B42E8AF00CEC41A /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = i386;
DEPLOYMENT_LOCATION = YES;
DSTROOT = /;
EXECUTABLE_SUFFIX = .so;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = /Developer/Cocotron/1.0/Linux/i386/Frameworks;
OTHER_CFLAGS = (
"-DOBJC_INSIDE_BUILD",
"-D__LITTLE_ENDIAN__",
"-fPIC",
);
OTHER_LDFLAGS = "-shared";
PREBINDING = NO;
PRODUCT_NAME = objc;
SYMROOT = /Developer/Cocotron/1.0/build/objc/Linux/i386;
};
name = Deployment;
};
FE4034890B42E94D00CEC41A /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = sparc;
DEPLOYMENT_LOCATION = YES;
DSTROOT = /;
EXECUTABLE_SUFFIX = .so;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = /Developer/Cocotron/1.0/Solaris/sparc/Frameworks;
OTHER_CFLAGS = (
"-DOBJC_INSIDE_BUILD",
"-D__BIG_ENDIAN__",
"-fPIC",
);
OTHER_LDFLAGS = "-shared";
PREBINDING = NO;
PRODUCT_NAME = objc;
SYMROOT = /Developer/Cocotron/1.0/build/objc/Solaris/sparc;
};
name = Deployment;
};
FE4034AF0B42F1D600CEC41A /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
PRODUCT_NAME = objc;
ZERO_LINK = NO;
};
name = Deployment;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "objc-Windows-i386" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB91AF08733DA50010E9CD /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Deployment;
};
1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "objc" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB91B308733DA50010E9CD /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Deployment;
};
FE4034570B42E8AF00CEC41A /* Build configuration list for PBXNativeTarget "objc-Linux-i386" */ = {
isa = XCConfigurationList;
buildConfigurations = (
FE4034580B42E8AF00CEC41A /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Deployment;
};
FE4034880B42E94D00CEC41A /* Build configuration list for PBXNativeTarget "objc-Solaris-sparc" */ = {
isa = XCConfigurationList;
buildConfigurations = (
FE4034890B42E94D00CEC41A /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Deployment;
};
FE4034AE0B42F1D600CEC41A /* Build configuration list for PBXAggregateTarget "objc" */ = {
isa = XCConfigurationList;
buildConfigurations = (
FE4034AF0B42F1D600CEC41A /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Deployment;
};
/* End XCConfigurationList section */
};
rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
}