Commit Graph

719 Commits

Author SHA1 Message Date
Joe Pamer
1d34a88477 Revert "Fix two problems with implicit conversions: - rdar://problem/16776273, wherein conversions between nil and .None were permitted due to an implicit conversion between nil and COpaquePointer. - rdar://problem/16877526, where we needed to add new equality overloads to handle conversions between nil and .None given the supression of user conversions. (Thanks to Ted for the overloads and test.)"
This reverts commit r18473.

Swift SVN r18477
2014-05-21 00:28:46 +00:00
Joe Pamer
f469d8f1f6 Fix two problems with implicit conversions:
- rdar://problem/16776273, wherein conversions between nil and .None were permitted
due to an implicit conversion between nil and COpaquePointer.
- rdar://problem/16877526, where we needed to add new equality overloads to handle
conversions between nil and .None given the supression of user conversions.
(Thanks to Ted for the overloads and test.)

Swift SVN r18473
2014-05-20 23:53:34 +00:00
Dmitri Hrybenko
dc2b0a2c7b stdlib/Dictionary: fix test after r18454
Swift SVN r18456
2014-05-20 18:25:46 +00:00
Joe Groff
38130ca9db Remove uniqueness forcing from CMutablePointer array conversion.
Arrays aren't value types anymore, so this is no longer correct. Fixes <rdar://problem/16970879>.

Swift SVN r18455
2014-05-20 17:21:21 +00:00
Doug Gregor
1cb05e5b0b When force-casting AnyObject to a contextual type, bridge through Objective-C.
Previously, we were relying on user-defined conversions to perform the
final bridging from the Objective-C class type (e.g., NSString) to its
Swift value type (String). That works for NSString <-> String, but not
for arbitrary arrays. Use the bridgeFromObjectiveC() witness instead,
so we can handle:

  let obj: AnyObject = ...
  let strArr: String[] = obj!

Fixes <rdar://problem/16952771>.

Swift SVN r18422
2014-05-19 15:32:06 +00:00
Doug Gregor
57f75b7448 Implement bridging from NSNumber to Int/UInt/Float/Double/Bool.
This makes fun bridging like

  var obj: AnyObject! = [3.14159, 2.71828, 0] as Double[]
  if let intArr = obj as Int[] {
    println("Array of doubles as ints is \(intArr)")
  }

"work", given that NSNumber is the common class type through which we
are bridging.




Swift SVN r18398
2014-05-19 07:33:15 +00:00
Doug Gregor
10380943d4 Support checked downcasting through a class type to a non-verbatim bridged value type.
This allows us to cast an AnyObject (or optional thereof) down to a
specific array, e.g.,

  if let strArr = obj as String[] { ... }

Addresses most of <rdar://problem/16952771>.



Swift SVN r18397
2014-05-19 07:15:30 +00:00
John McCall
f7c2aed668 Add an implicit conversion from CFString to String.
Unfortunately, we can't add an implicit conversion from
String to CFString, or anything analogous like string
literal support, without introducing ambiguities
when converting to AnyObject.

rdar://16271682

Swift SVN r18387
2014-05-19 04:00:46 +00:00
Doug Gregor
41439be708 Clear out some FIXMEs for functionality that's working now.
Swift SVN r18363
2014-05-18 22:08:16 +00:00
Doug Gregor
9c8f571d96 Teach "is" expressions to cope with optionals.
The "is" expression itself isn't really able to cope with optionals
well itself, so in the hard cases we'll defer to a conditional checked
cast and then check whether the resulting optional is non-empty. Fixes
the rest of <rdar://problem/16953860>.

Swift SVN r18361
2014-05-18 22:05:20 +00:00
Doug Gregor
2df46e4733 Don't unwrap implicitly unwrapped optionals before casting.
Checked casting handles multiple levels of optionality properly
already, and does so by binding rather than forcing. Fixes the
immediate issue in <rdar://problem/16953860>.

Swift SVN r18351
2014-05-18 21:03:56 +00:00
Doug Gregor
e7ad745be0 Support downcasting from AnyObject to a bridged value type.
This allows us to cast "through" a bridged class type in an "as" case,
e.g.,

  if let str = obj as String { ... }

where obj is an AnyObject (or optional/implicitly unwrapped optional
thereof). In such cases, we perform a checked cast to the
corresponding class type (NSString in this case) and then convert the
(optional!) result down to the value type.

Addresses the main part of <rdar://problem/15288553>, but we still
have trouble with "is" with optionals, and the #if false'd out
testcase incorrectly fails due to <rdar://problem/16953860>.

Swift SVN r18347
2014-05-18 20:30:39 +00:00
Ted Kremenek
16dea15a24 Hide CocoaArray ('_' to mark as private API).
Swift SVN r18302
2014-05-18 04:03:32 +00:00
Doug Gregor
d360ecd4f7 Extend availability checking to other expressions that have declarations.
We weren't diagnosing initializer delegation/chaining, subscripts, or
(the one that got me concerned) members accessed through AnyObject.

Swift SVN r18271
2014-05-17 20:51:01 +00:00
Ted Kremenek
eab7f90a81 Per design discussion today, rename UnsafePointer ".pointee" to ".memory".
Swift SVN r18269
2014-05-17 20:35:16 +00:00
Doug Gregor
f338c9f9bf Extend ObjC methods whitelist to support adding an "unavailable" attribute.
Use this for -class and +class, to make them less ad hoc. More to follow.

As part of this, actually mark imported unavailable declarations in a
protocol as "optional", because nobody should have to implement an
unavailable declaration.

Swift SVN r18262
2014-05-17 19:18:02 +00:00
Joe Groff
e8f71c12a2 Rename ObjCMutablePointer to AutoreleasingUnsafePointer.
This relates its interface and behavior to that of UnsafePointer, and draws an analogy to '__autoreleasing *' in ARC.

Swift SVN r18236
2014-05-17 04:44:44 +00:00
Joe Groff
f5500f2c57 Typos
Swift SVN r18227
2014-05-16 23:21:59 +00:00
Joe Groff
e49ca88a55 Check that some pattern-matching-heavy demo code actually runs.
Swift SVN r18223
2014-05-16 22:55:42 +00:00
Arnold Schwaighofer
da6d9152b6 Differentiate between user assertion and preconditions and the like
assert() and fatalError()
These functions are meant to be used in user code. They are enabled in debug
mode and disabled in release or fast mode.

_precondition() and _preconditionFailure()
These functions are meant to be used in library code to check preconditions at
the api boundry. They are enabled in debug mode (with a verbose message) and
release mode (trap). In fast mode they are disabled.

_debugPrecondition() and _debugPreconditionFailure()
These functions are meant to be used in library code to check preconditions that
are not neccesarily comprehensive for safety (UnsafePointer can be null or an
invalid pointer but we can't check both). They are enabled only in debug mode.

_sanityCheck() and _fatalError()
These are meant to be used for internal consistency checks. They are only
enabled when the library is build with -DSWIFT_STDLIB_INTERNAL_CHECKS=ON.

I modified the code in the standard library to the best of my judgement.

rdar://16477198

Swift SVN r18212
2014-05-16 20:49:54 +00:00
Joe Pamer
b10a2bf48a Fix regression in implicit conversions of implicitly unwrapped optional AnyObject types to their contextual types. (rdar://problem/16922332)
Swift SVN r18203
2014-05-16 18:13:35 +00:00
Dmitri Hrybenko
828acd2738 stdlib: hide _NSSwiftArray, _NSSwiftDictionary, _NSSwiftEnumerator
Swift SVN r18187
2014-05-16 08:29:17 +00:00
Ted Kremenek
178e2a32df Printing routines should append ".0" to floats, *not* taking locales into account.
Implements <rdar://problem/16895801>.

Swift SVN r18185
2014-05-16 07:27:54 +00:00
Ted Kremenek
4bb475a1c8 Rename UnsafePointer.get/set to a "ptr.pointee" property.
Implements <rdar://problem/16531067>.

Swift SVN r18178
2014-05-16 05:48:05 +00:00
Ted Kremenek
fe0dbb701d Remove shorthand "x as T!" instead of "(x as T)!"
Implements <rdar://problem/16806243>.

Swift SVN r18156
2014-05-16 01:07:53 +00:00
Jordan Rose
bfa7566aec [ClangImporter] Put implicit properties into the list of all class members.
This allows "obj.description!" to work on iOS when 'obj' is an AnyObject,
even though 'description' is an implicit property created by the importer.

Swift SVN r18149
2014-05-16 00:30:55 +00:00
Doug Gregor
01f3f7777e Make _convertNSArrayToArray work for non-verbatim bridged types.
The runtime diagnostics here are awful, but the monkey dances
<rdar://problem/16899681>.



Swift SVN r18121
2014-05-15 19:25:58 +00:00
Doug Gregor
87904b8228 Make ImplicitlyUnwrappedOptional conform to _ConditionallyBridgedToObjectiveC.
This is a better solution to <rdar://problem/16899681> because the
runtime magic is limited to implementing the witnesses of this
conformance.

The type checker fixes are because we can end up using unchecked
optionals in more places, via bridging, than we could before.


Swift SVN r18120
2014-05-15 19:00:52 +00:00
Joe Pamer
a74c44a6e4 Fix two crashing bugs related to checked downcasts - rdar://problem/16093456 and rdar://problem/16892211.
Swift SVN r18118
2014-05-15 18:36:44 +00:00
Joe Groff
f1fa77e140 IRGen: Fix heap array destructor for types where size != stride.
Use TypeInfo::indexArray to get the bounds of the array instead of duplicating its logic incorrectly. Fixes <rdar://problem/16916422>.

Swift SVN r18115
2014-05-15 18:15:04 +00:00
Dmitri Hrybenko
d50a8b476d stdlib/Foundation overlay: add Printable conformance to Selector
rdar://16897592


Swift SVN r18109
2014-05-15 17:25:43 +00:00
Dmitri Hrybenko
8ee468e974 stdlib/Foundation overlay: add Printable conformance to ObjCBool
rdar://16897579


Swift SVN r18108
2014-05-15 17:02:40 +00:00
Doug Gregor
bf8fbfc32e Teach isBridgedToObjectiveC and bridgeToObjectiveC to unwrap implicitly unwrapped optionals.
This allows us to, for example, convert an array of unchecked
optionals of some bridged type T to NSArray. It's a runtime failure if
the unchecked optional contains nil.

This is most of <rdar://problem/16899681>, but I want to improve the
testing and look into the various FIXMEs.


Swift SVN r18106
2014-05-15 16:16:35 +00:00
Ted Kremenek
9eea282719 Switch range operators ".." and "...".
- 1..3 now means 1,2
- 1...3 now means 1,2,3

Implements <rdar://problem/16839891>

Swift SVN r18066
2014-05-14 07:36:00 +00:00
Fariborz Jahanian
f914b05873 Fix typo in test.
Swift SVN r18021
2014-05-13 20:28:14 +00:00
Joe Pamer
5d95457efc Disallow operator overloads that require implicit conversions for all arguments (rdar://problem/16785445)
Swift SVN r18019
2014-05-13 20:09:50 +00:00
Fariborz Jahanian
2fb6e3f8f1 Test for // rdar://16726444
Swift SVN r18017
2014-05-13 19:40:11 +00:00
Doug Gregor
d5a9c2ab94 Only supersede initializers with other imported initializers when the types match.
This fixes a case where the Swift-variadic and C-varargs versions of
various initializers were superseding each other
<rdar://problem/16801456>.

It also uncovered some more cases where we weren't getting quite the
right semantics for factory-methods-as-initializers, which are also
fixed here.

Swift SVN r18010
2014-05-13 16:49:39 +00:00
Dmitri Hrybenko
2cc8fe40d4 stdlib/printing: replace four printing systems with one new one
The old ones were:

- print/println
- printAny
- printf
- Console

The new printing story is just print/println.  Every object can be printed.
You can customize the way it is printed by adopting Printable protocol.  Full
details in comments inside stdlib/core/OutputStream.swift.

Printing is not completely finished yet.  We still have ReplPrintable, which
should be removed, string interpolation still uses String constructors, and
printing objects that don't conform to Printable will result in printing
mangled names.


Swift SVN r18001
2014-05-13 13:07:59 +00:00
Doug Gregor
73528dc0e0 Enable importing factory methods as initializers by default.
Finishes <rdar://problem/16509024>.

Swift SVN r17972
2014-05-12 23:01:20 +00:00
Ted Kremenek
fad874708e Adjust test cases.
Swift SVN r17964
2014-05-12 22:01:52 +00:00
Joe Groff
9598880928 Forward SwiftObject's -description to use reflect(x).summary.
On the swift side, add an asmname'd "getSummary" function to make it easier for the runtime to access 'reflect(x).summary' (and to make it easy to change this when we get a real printing solution). On the C++ side, implement -description by trying to find convertStringToNSString if Foundation is loaded, and falling back to just returning @"SwiftObject" if not. It's unlikely SwiftObject's methods will be exercised if Foundation isn't loaded.

Swift SVN r17954
2014-05-12 19:54:40 +00:00
Joe Groff
4ddcc41c49 Add an interpreter test that we can witness Swift protocols with objc methods.
Swift SVN r17744
2014-05-09 00:26:30 +00:00
Fariborz Jahanian
b56392e643 Overlay for -[NSPredicate predicateWithFormat:] and
-[NSExpression expressionWithFormat:]
// rdar://16726530


Swift SVN r17186
2014-05-01 21:44:00 +00:00
Joe Groff
164870c0c3 SILGen: Reenable partial application of ObjC methods.
Make ObjC method partial applications go through a native-to-foreign thunk so that we properly handle bridging conversions in the resulting function value. Partial applications through dynamic lookup are still broken because they apparently go through a different path.

Swift SVN r17108
2014-04-30 19:57:44 +00:00
Joe Groff
01c5eeab94 Foundation overlay: Provide an "NSLog" replacement.
Use NSLogv, which we can import and call using DaveA's withVaList hacks, to implement NSLog.

Swift SVN r16664
2014-04-22 21:51:31 +00:00
Joe Groff
fbf0a1529c Add an interpreter test that uses an inner-pointer method.
Swift SVN r16636
2014-04-22 00:25:17 +00:00
Doug Gregor
82a7f1f87b Improve de-duplication logic for imported Objective-C class initializers.
Before we create a new initializer, check whether it would collide
with existing initializers. If it's better than the existing
initializer, mark the existing one as unavailable; if it's not better,
don't build it.

In support of this, we tweak a few things w.r.t. unavailble
declarations:
  - An unavailable declaration is shadowed by an available one,
  - Don't emit SIL unavailable, imported initializers

This fixes the last problem with <rdar://problem/16509024>.



Swift SVN r16611
2014-04-21 06:26:52 +00:00
John McCall
4d16346b4e Split out the autorelease test and XFAIL it on i386,
which does not support the autorelease optimization.

Swift SVN r16377
2014-04-15 21:26:17 +00:00
Joe Groff
75e5ae9e9b Sema: Type-check the conformances of imported structs.
This makes it so that we actually register the RawOptionSet conformance of imported structs and emit it into executables, fixing <rdar://problem/16295991>.

Swift SVN r16323
2014-04-14 17:33:07 +00:00