Skip to content

Commit fda6111

Browse files
committed
Merge branch 'master' into feature/NSJSONSerialization-deserialization
2 parents 4c642ef + 6681af4 commit fda6111

38 files changed

+974
-320
lines changed

CoreFoundation/Base.subproj/CFRuntime.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1808,7 +1808,7 @@ const char *_NSPrintForDebugger(void *cf) {
18081808
}
18091809
}
18101810

1811-
#if DEPLOYMENT_RUNTIME_SWIFT && DEPLOYMENT_TARGET_LINUX
1811+
#if DEPLOYMENT_RUNTIME_SWIFT
18121812

18131813
// For CF functions with 'Get' semantics, the compiler currently assumes that the result is autoreleased and must be retained. It does so on all platforms by emitting a call to objc_retainAutoreleasedReturnValue. On Darwin, this is implemented by the ObjC runtime. On Linux, there is no runtime, and therefore we have to stub it out here ourselves. The compiler will eventually call swift_release to balance the retain below. This is a workaround until the compiler no longer emits this callout on Linux.
18141814
CFTypeRef objc_retainAutoreleasedReturnValue(CFTypeRef cf) {

CoreFoundation/Locale.subproj/CFCalendar.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ static CFStringRef __CFCalendarCopyDescription(CFTypeRef cf) {
4949

5050
static void __CFCalendarDeallocate(CFTypeRef cf) {
5151
CFCalendarRef calendar = (CFCalendarRef)cf;
52-
CFRelease(calendar->_identifier);
52+
if (calendar->_identifier) CFRelease(calendar->_identifier);
5353
if (calendar->_locale) CFRelease(calendar->_locale);
5454
if (calendar->_localeID) CFRelease(calendar->_localeID);
55-
CFRelease(calendar->_tz);
55+
if (calendar->_tz) CFRelease(calendar->_tz);
5656
if (calendar->_cal) ucal_close(calendar->_cal);
5757
}
5858

@@ -236,15 +236,14 @@ CFCalendarRef CFCalendarCopyCurrent(void) {
236236
}
237237

238238
Boolean _CFCalendarInitWithIdentifier(CFCalendarRef calendar, CFStringRef identifier) {
239-
if (identifier != kCFGregorianCalendar && identifier != kCFBuddhistCalendar && identifier != kCFJapaneseCalendar && identifier != kCFIslamicCalendar && identifier != kCFIslamicCivilCalendar && identifier != kCFHebrewCalendar) {
240-
// if (identifier != kCFGregorianCalendar && identifier != kCFBuddhistCalendar && identifier != kCFJapaneseCalendar && identifier != kCFIslamicCalendar && identifier != kCFIslamicCivilCalendar && identifier != kCFHebrewCalendar && identifier != kCFChineseCalendar) {
239+
if (identifier != kCFGregorianCalendar && identifier != kCFBuddhistCalendar && identifier != kCFJapaneseCalendar && identifier != kCFIslamicCalendar && identifier != kCFIslamicCivilCalendar && identifier != kCFHebrewCalendar && identifier != kCFChineseCalendar) {
241240
if (CFEqual(kCFGregorianCalendar, identifier)) identifier = kCFGregorianCalendar;
242241
else if (CFEqual(kCFBuddhistCalendar, identifier)) identifier = kCFBuddhistCalendar;
243242
else if (CFEqual(kCFJapaneseCalendar, identifier)) identifier = kCFJapaneseCalendar;
244243
else if (CFEqual(kCFIslamicCalendar, identifier)) identifier = kCFIslamicCalendar;
245244
else if (CFEqual(kCFIslamicCivilCalendar, identifier)) identifier = kCFIslamicCivilCalendar;
246245
else if (CFEqual(kCFHebrewCalendar, identifier)) identifier = kCFHebrewCalendar;
247-
// else if (CFEqual(kCFChineseCalendar, identifier)) identifier = kCFChineseCalendar;
246+
else if (CFEqual(kCFChineseCalendar, identifier)) identifier = kCFChineseCalendar;
248247
else return false;
249248
}
250249

@@ -261,15 +260,14 @@ CFCalendarRef CFCalendarCreateWithIdentifier(CFAllocatorRef allocator, CFStringR
261260
__CFGenericValidateType(allocator, CFAllocatorGetTypeID());
262261
__CFGenericValidateType(identifier, CFStringGetTypeID());
263262
// return NULL until Chinese calendar is available
264-
if (identifier != kCFGregorianCalendar && identifier != kCFBuddhistCalendar && identifier != kCFJapaneseCalendar && identifier != kCFIslamicCalendar && identifier != kCFIslamicCivilCalendar && identifier != kCFHebrewCalendar) {
265-
// if (identifier != kCFGregorianCalendar && identifier != kCFBuddhistCalendar && identifier != kCFJapaneseCalendar && identifier != kCFIslamicCalendar && identifier != kCFIslamicCivilCalendar && identifier != kCFHebrewCalendar && identifier != kCFChineseCalendar) {
263+
if (identifier != kCFGregorianCalendar && identifier != kCFBuddhistCalendar && identifier != kCFJapaneseCalendar && identifier != kCFIslamicCalendar && identifier != kCFIslamicCivilCalendar && identifier != kCFHebrewCalendar && identifier != kCFChineseCalendar) {
266264
if (CFEqual(kCFGregorianCalendar, identifier)) identifier = kCFGregorianCalendar;
267265
else if (CFEqual(kCFBuddhistCalendar, identifier)) identifier = kCFBuddhistCalendar;
268266
else if (CFEqual(kCFJapaneseCalendar, identifier)) identifier = kCFJapaneseCalendar;
269267
else if (CFEqual(kCFIslamicCalendar, identifier)) identifier = kCFIslamicCalendar;
270268
else if (CFEqual(kCFIslamicCivilCalendar, identifier)) identifier = kCFIslamicCivilCalendar;
271269
else if (CFEqual(kCFHebrewCalendar, identifier)) identifier = kCFHebrewCalendar;
272-
// else if (CFEqual(kCFChineseCalendar, identifier)) identifier = kCFChineseCalendar;
270+
else if (CFEqual(kCFChineseCalendar, identifier)) identifier = kCFChineseCalendar;
273271
else return NULL;
274272
}
275273
struct __CFCalendar *calendar = NULL;
@@ -422,6 +420,7 @@ static UCalendarDateFields __CFCalendarGetICUFieldCodeFromChar(char ch) {
422420
case 'G': return UCAL_ERA;
423421
case 'y': return UCAL_YEAR;
424422
case 'M': return UCAL_MONTH;
423+
case 'l': return UCAL_IS_LEAP_MONTH;
425424
case 'd': return UCAL_DAY_OF_MONTH;
426425
case 'h': return UCAL_HOUR;
427426
case 'H': return UCAL_HOUR_OF_DAY;

CoreFoundation/Stream.subproj/CFConcreteStreams.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -592,21 +592,23 @@ static CFIndex dataRead(CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLen
592592

593593
static const UInt8 *dataGetBuffer(CFReadStreamRef stream, CFIndex maxBytesToRead, CFIndex *numBytesRead, CFStreamError *error, Boolean *atEOF, void *info) {
594594
_CFReadDataStreamContext *dataCtxt = (_CFReadDataStreamContext *)info;
595-
const UInt8 *bytes = CFDataGetBytePtr(dataCtxt->data);
596-
if (dataCtxt->loc - bytes > maxBytesToRead) {
595+
const UInt8 *bytePtr = CFDataGetBytePtr(dataCtxt->data);
596+
CFIndex length = CFDataGetLength(dataCtxt->data);
597+
CFIndex bytesToRead = bytePtr + length - dataCtxt->loc;
598+
if (bytesToRead > maxBytesToRead) {
597599
*numBytesRead = maxBytesToRead;
598600
*atEOF = FALSE;
599601
} else {
600-
*numBytesRead = dataCtxt->loc - bytes;
602+
*numBytesRead = bytesToRead;
601603
*atEOF = TRUE;
602604
}
603605
error->error = 0;
604-
bytes = dataCtxt->loc;
606+
const UInt8 *buffer = dataCtxt->loc;
605607
dataCtxt->loc += *numBytesRead;
606608
if (dataCtxt->scheduled && !*atEOF) {
607609
CFReadStreamSignalEvent(stream, kCFStreamEventHasBytesAvailable, NULL);
608610
}
609-
return bytes;
611+
return buffer;
610612
}
611613

612614
static Boolean dataCanRead(CFReadStreamRef stream, void *info) {

Docs/GettingStarted.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,11 @@ LD_LIBRARY_PATH=../build/Ninja-ReleaseAssert/foundation-linux-x86_64/Foundation/
7474
```
7575

7676
Just copy & paste the correct line.
77+
78+
When new source files or flags are added to the `build.py` script, the project will need to be reconfigured in order for the build system to pick them up. The top-level `swift/utils/build-script` can be used, but for quicker iteration you can use the following command to limit the reconfiguration to just the Foundation project:
79+
80+
```
81+
% ninja reconfigure
82+
% ninja
83+
```
84+

Foundation.xcodeproj/project.pbxproj

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
22B9C1E11C165D7A00DECFF9 /* TestNSDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B9C1E01C165D7A00DECFF9 /* TestNSDate.swift */; };
11+
4DC1D0801C12EEEF00B5948A /* TestNSPipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DC1D07F1C12EEEF00B5948A /* TestNSPipe.swift */; };
1012
525AECED1BF2C9C500D15BB0 /* TestNSFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525AECEB1BF2C96400D15BB0 /* TestNSFileManager.swift */; };
13+
52829AD71C160D64003BC4EF /* TestNSCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52829AD61C160D64003BC4EF /* TestNSCalendar.swift */; };
1114
528776141BF2629700CB0090 /* FoundationErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522C253A1BF16E1600804FC6 /* FoundationErrors.swift */; };
1215
528776191BF27D9500CB0090 /* Test.plist in Resources */ = {isa = PBXBuildFile; fileRef = 528776181BF27D9500CB0090 /* Test.plist */; };
1316
5B40F9EF1C124F47000E72E3 /* CFXMLInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B40F9EB1C124F45000E72E3 /* CFXMLInterface.c */; };
@@ -16,7 +19,6 @@
1619
5B40F9F41C12524C000E72E3 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B40F9F31C12524C000E72E3 /* libxml2.dylib */; };
1720
5B5D89761BBDADD300234F36 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D89751BBDADD300234F36 /* libicucore.dylib */; };
1821
5B5D89781BBDADDB00234F36 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D89771BBDADDB00234F36 /* libz.dylib */; };
19-
5B5D897A1BBDADDF00234F36 /* libobjc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B5D89791BBDADDF00234F36 /* libobjc.dylib */; };
2022
5B7C8A721BEA7FCE00C5B690 /* CFBase.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D895D1BBDABBF00234F36 /* CFBase.c */; };
2123
5B7C8A731BEA7FCE00C5B690 /* CFFileUtilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D89851BBDB18D00234F36 /* CFFileUtilities.c */; };
2224
5B7C8A741BEA7FCE00C5B690 /* CFPlatform.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D897B1BBDAE0800234F36 /* CFPlatform.c */; };
@@ -193,6 +195,10 @@
193195
5BF7AEBF1BCD51F9008F214A /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4A1BCC5DCB00ED97BB /* NSURL.swift */; };
194196
5BF7AEC01BCD51F9008F214A /* NSUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4B1BCC5DCB00ED97BB /* NSUUID.swift */; };
195197
5BF7AEC11BCD51F9008F214A /* NSValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4C1BCC5DCB00ED97BB /* NSValue.swift */; };
198+
844DC3331C17584F005611F9 /* TestNSScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844DC3321C17584F005611F9 /* TestNSScanner.swift */; };
199+
84BA558E1C16F90900F48C54 /* TestNSTimeZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BA558D1C16F90900F48C54 /* TestNSTimeZone.swift */; };
200+
C93559291C12C49F009FD6A9 /* TestNSAffineTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C93559281C12C49F009FD6A9 /* TestNSAffineTransform.swift */; };
201+
DCDBB8331C1768AC00313299 /* TestNSData.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCDBB8321C1768AC00313299 /* TestNSData.swift */; };
196202
E876A73E1C1180E000F279EC /* TestNSRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = E876A73D1C1180E000F279EC /* TestNSRange.swift */; };
197203
EA66F6361BEED03E00136161 /* TargetConditionals.h in Headers */ = {isa = PBXBuildFile; fileRef = EA66F6351BEED03E00136161 /* TargetConditionals.h */; settings = {ATTRIBUTES = (Public, ); }; };
198204
EA66F6441BF1619600136161 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA66F6381BF1619600136161 /* main.swift */; };
@@ -314,8 +320,11 @@
314320
/* End PBXCopyFilesBuildPhase section */
315321

316322
/* Begin PBXFileReference section */
323+
22B9C1E01C165D7A00DECFF9 /* TestNSDate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSDate.swift; sourceTree = "<group>"; };
324+
4DC1D07F1C12EEEF00B5948A /* TestNSPipe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSPipe.swift; sourceTree = "<group>"; };
317325
522C253A1BF16E1600804FC6 /* FoundationErrors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationErrors.swift; sourceTree = "<group>"; };
318326
525AECEB1BF2C96400D15BB0 /* TestNSFileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSFileManager.swift; sourceTree = "<group>"; };
327+
52829AD61C160D64003BC4EF /* TestNSCalendar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSCalendar.swift; sourceTree = "<group>"; };
319328
528776181BF27D9500CB0090 /* Test.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Test.plist; sourceTree = "<group>"; };
320329
5B40F9EB1C124F45000E72E3 /* CFXMLInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFXMLInterface.c; sourceTree = "<group>"; };
321330
5B40F9EC1C124F45000E72E3 /* CFXMLInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFXMLInterface.h; sourceTree = "<group>"; };
@@ -513,6 +522,10 @@
513522
5BDC3FCF1BCF17E600ED97BB /* NSCFSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSCFSet.swift; sourceTree = "<group>"; };
514523
5BDC405C1BD6D83B00ED97BB /* TestFoundation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestFoundation.app; sourceTree = BUILT_PRODUCTS_DIR; };
515524
5BF7AEC21BCD568D008F214A /* ForSwiftFoundationOnly.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForSwiftFoundationOnly.h; sourceTree = "<group>"; };
525+
844DC3321C17584F005611F9 /* TestNSScanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSScanner.swift; sourceTree = "<group>"; };
526+
84BA558D1C16F90900F48C54 /* TestNSTimeZone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSTimeZone.swift; sourceTree = "<group>"; };
527+
C93559281C12C49F009FD6A9 /* TestNSAffineTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSAffineTransform.swift; sourceTree = "<group>"; };
528+
DCDBB8321C1768AC00313299 /* TestNSData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSData.swift; sourceTree = "<group>"; };
516529
E876A73D1C1180E000F279EC /* TestNSRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSRange.swift; sourceTree = "<group>"; };
517530
EA313DFC1BE7F2E90060A403 /* CFURLComponents_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CFURLComponents_Internal.h; sourceTree = "<group>"; };
518531
EA313DFD1BE7F2E90060A403 /* CFURLComponents_URIParser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFURLComponents_URIParser.c; sourceTree = "<group>"; };
@@ -610,7 +623,6 @@
610623
files = (
611624
5B40F9F41C12524C000E72E3 /* libxml2.dylib in Frameworks */,
612625
5B7C8B031BEA86A900C5B690 /* libCoreFoundation.a in Frameworks */,
613-
5B5D897A1BBDADDF00234F36 /* libobjc.dylib in Frameworks */,
614626
5B5D89781BBDADDB00234F36 /* libz.dylib in Frameworks */,
615627
5B5D89761BBDADD300234F36 /* libicucore.dylib in Frameworks */,
616628
);
@@ -1002,10 +1014,13 @@
10021014
EA66F65A1BF1976100136161 /* Tests */ = {
10031015
isa = PBXGroup;
10041016
children = (
1017+
C93559281C12C49F009FD6A9 /* TestNSAffineTransform.swift */,
10051018
EA66F63C1BF1619600136161 /* TestNSArray.swift */,
1019+
52829AD61C160D64003BC4EF /* TestNSCalendar.swift */,
10061020
EA66F63D1BF1619600136161 /* TestNSDictionary.swift */,
10071021
EA66F63E1BF1619600136161 /* TestNSIndexSet.swift */,
10081022
EA66F63F1BF1619600136161 /* TestNSNumber.swift */,
1023+
4DC1D07F1C12EEEF00B5948A /* TestNSPipe.swift */,
10091024
EA66F6401BF1619600136161 /* TestNSPropertyList.swift */,
10101025
E876A73D1C1180E000F279EC /* TestNSRange.swift */,
10111026
EA66F6411BF1619600136161 /* TestNSSet.swift */,
@@ -1014,6 +1029,10 @@
10141029
5BC1D8BC1BF3ADFE009D3973 /* TestNSCharacterSet.swift */,
10151030
525AECEB1BF2C96400D15BB0 /* TestNSFileManager.swift */,
10161031
5B40F9F11C125187000E72E3 /* TestNSXMLParser.swift */,
1032+
22B9C1E01C165D7A00DECFF9 /* TestNSDate.swift */,
1033+
DCDBB8321C1768AC00313299 /* TestNSData.swift */,
1034+
84BA558D1C16F90900F48C54 /* TestNSTimeZone.swift */,
1035+
844DC3321C17584F005611F9 /* TestNSScanner.swift */,
10171036
ED58F76E1C134B3A00E6A5BE /* TestNSJSONSerialization.swift */,
10181037
);
10191038
name = Tests;
@@ -1699,9 +1718,16 @@
16991718
files = (
17001719
525AECED1BF2C9C500D15BB0 /* TestNSFileManager.swift in Sources */,
17011720
EA66F6501BF1619600136161 /* TestNSNumber.swift in Sources */,
1721+
844DC3331C17584F005611F9 /* TestNSScanner.swift in Sources */,
17021722
E876A73E1C1180E000F279EC /* TestNSRange.swift in Sources */,
17031723
EA66F6521BF1619600136161 /* TestNSPropertyList.swift in Sources */,
1724+
4DC1D0801C12EEEF00B5948A /* TestNSPipe.swift in Sources */,
1725+
84BA558E1C16F90900F48C54 /* TestNSTimeZone.swift in Sources */,
1726+
52829AD71C160D64003BC4EF /* TestNSCalendar.swift in Sources */,
1727+
C93559291C12C49F009FD6A9 /* TestNSAffineTransform.swift in Sources */,
1728+
DCDBB8331C1768AC00313299 /* TestNSData.swift in Sources */,
17041729
EA66F64E1BF1619600136161 /* TestNSIndexSet.swift in Sources */,
1730+
22B9C1E11C165D7A00DECFF9 /* TestNSDate.swift in Sources */,
17051731
EA66F6541BF1619600136161 /* TestNSSet.swift in Sources */,
17061732
EA66F64A1BF1619600136161 /* TestNSArray.swift in Sources */,
17071733
5BC1D8BE1BF3B09E009D3973 /* TestNSCharacterSet.swift in Sources */,
@@ -1739,6 +1765,7 @@
17391765
ALWAYS_SEARCH_USER_PATHS = NO;
17401766
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
17411767
CLANG_CXX_LIBRARY = "libc++";
1768+
CLANG_LINK_OBJC_RUNTIME = NO;
17421769
CLANG_MODULES_AUTOLINK = NO;
17431770
CLANG_WARN_BOOL_CONVERSION = YES;
17441771
CLANG_WARN_CONSTANT_CONVERSION = YES;
@@ -1757,6 +1784,7 @@
17571784
ENABLE_TESTABILITY = YES;
17581785
GCC_C_LANGUAGE_STANDARD = gnu99;
17591786
GCC_DYNAMIC_NO_PIC = NO;
1787+
GCC_ENABLE_OBJC_EXCEPTIONS = NO;
17601788
GCC_NO_COMMON_BLOCKS = YES;
17611789
GCC_OPTIMIZATION_LEVEL = 0;
17621790
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -1784,6 +1812,7 @@
17841812
ALWAYS_SEARCH_USER_PATHS = NO;
17851813
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
17861814
CLANG_CXX_LIBRARY = "libc++";
1815+
CLANG_LINK_OBJC_RUNTIME = NO;
17871816
CLANG_MODULES_AUTOLINK = NO;
17881817
CLANG_WARN_BOOL_CONVERSION = YES;
17891818
CLANG_WARN_CONSTANT_CONVERSION = YES;
@@ -1801,6 +1830,7 @@
18011830
ENABLE_NS_ASSERTIONS = NO;
18021831
ENABLE_STRICT_OBJC_MSGSEND = YES;
18031832
GCC_C_LANGUAGE_STANDARD = gnu99;
1833+
GCC_ENABLE_OBJC_EXCEPTIONS = NO;
18041834
GCC_NO_COMMON_BLOCKS = YES;
18051835
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
18061836
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
@@ -1874,7 +1904,6 @@
18741904
r,
18751905
r,
18761906
);
1877-
OTHER_SWIFT_FLAGS = "";
18781907
PRODUCT_BUNDLE_IDENTIFIER = com.apple.CoreFoundation;
18791908
PRODUCT_NAME = "$(TARGET_NAME)";
18801909
SKIP_INSTALL = YES;
@@ -1942,7 +1971,6 @@
19421971
r,
19431972
r,
19441973
);
1945-
OTHER_SWIFT_FLAGS = "";
19461974
PRODUCT_BUNDLE_IDENTIFIER = com.apple.CoreFoundation;
19471975
PRODUCT_NAME = "$(TARGET_NAME)";
19481976
SKIP_INSTALL = YES;
@@ -1954,7 +1982,6 @@
19541982
5B7C8A6F1BEA7F8F00C5B690 /* Debug */ = {
19551983
isa = XCBuildConfiguration;
19561984
buildSettings = {
1957-
CLANG_ENABLE_OBJC_ARC = YES;
19581985
CODE_SIGN_IDENTITY = "-";
19591986
EXECUTABLE_PREFIX = lib;
19601987
GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h;
@@ -1988,7 +2015,6 @@
19882015
5B7C8A701BEA7F8F00C5B690 /* Release */ = {
19892016
isa = XCBuildConfiguration;
19902017
buildSettings = {
1991-
CLANG_ENABLE_OBJC_ARC = YES;
19922018
CODE_SIGN_IDENTITY = "-";
19932019
EXECUTABLE_PREFIX = lib;
19942020
GCC_PREFIX_HEADER = CoreFoundation/Base.subproj/CoreFoundation_Prefix.h;

Foundation/NSAffineTransform.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ public struct NSAffineTransformStruct {
1616
public var tX: CGFloat
1717
public var tY: CGFloat
1818
public init() { NSUnimplemented() }
19-
public init(m11: CGFloat, m12: CGFloat, m21: CGFloat, m22: CGFloat, tX: CGFloat, tY: CGFloat) { NSUnimplemented() }
19+
public init(m11: CGFloat, m12: CGFloat, m21: CGFloat, m22: CGFloat, tX: CGFloat, tY: CGFloat) {
20+
(self.m11, self.m12, self.m21, self.m22) = (m11, m12, m21, m22)
21+
(self.tX, self.tY) = (tX, tY)
22+
}
2023
}
2124

2225
public class NSAffineTransform : NSObject, NSCopying, NSSecureCoding {
@@ -36,7 +39,9 @@ public class NSAffineTransform : NSObject, NSCopying, NSSecureCoding {
3639

3740
// Initialization
3841
public convenience init(transform: NSAffineTransform) { NSUnimplemented() }
39-
public override init() { NSUnimplemented() }
42+
public override init() {
43+
transformStruct = NSAffineTransformStruct(m11: CGFloat(1.0), m12: CGFloat(), m21: CGFloat(), m22: CGFloat(1.0), tX: CGFloat(), tY: CGFloat())
44+
}
4045

4146
// Translating
4247
public func translateXBy(deltaX: CGFloat, yBy deltaY: CGFloat) { NSUnimplemented() }

0 commit comments

Comments
 (0)