mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Previously the "as" keyword could either represent coercion or or forced downcasting. This change separates the two notions. "as" now only means type conversion, while the new "as!" operator is used to perform forced downcasting. If a program uses "as" where "as!" is called for, we emit a diagnostic and fixit. Internally, this change removes the UnresolvedCheckedCastExpr class, in favor of directly instantiating CoerceExpr when parsing the "as" operator, and ForcedCheckedCastExpr when parsing the "as!" operator. Swift SVN r24253
64 lines
1.6 KiB
Swift
64 lines
1.6 KiB
Swift
// RUN: %target-run-simple-swift | FileCheck %s
|
||
|
||
import Foundation
|
||
|
||
// Add a method to String to make sure a value is really a String and not
|
||
// implicitly converted from an NSString, since method lookup doesn't see through
|
||
// implicit conversions.
|
||
extension String {
|
||
func reallyAString() -> String { return self }
|
||
}
|
||
|
||
func printString(x: String) {
|
||
println(x)
|
||
}
|
||
|
||
func printDescription(o: AnyObject) {
|
||
println(o.description!.reallyAString())
|
||
}
|
||
|
||
class Pootie : NSObject {
|
||
override var description : String {
|
||
return "cole me down on the panny sty"
|
||
}
|
||
|
||
func sinePittyOnRunnyKine(x: String) -> String {
|
||
return "\(x). sa-da-tay"
|
||
}
|
||
}
|
||
|
||
var a:NSNumber = 2001
|
||
printDescription(a) // CHECK: 2001
|
||
|
||
var p = Pootie()
|
||
printDescription(p) // CHECK: cole me down on the panny sty
|
||
|
||
var s1:String = "wa-da-ta"
|
||
// We don't say 'var s2:NSString = "..."' in order to keep this test independent of the
|
||
// ABI of NSString.convertFromStringLiteral.
|
||
var s2s:String = "kappa-chow"
|
||
var s2:NSString = s2s
|
||
printDescription(s2) // CHECK: kappa-chow
|
||
printDescription(p.sinePittyOnRunnyKine(s2)) // CHECK: kappa-chow. sa-da-tay
|
||
|
||
var s3:String = s2.stringByAppendingPathComponent(s1).reallyAString()
|
||
printDescription(s3) // CHECK: kappa-chow/wa-da-ta
|
||
|
||
// Unicode conversion
|
||
var s4 : String = NSString(string: "\u{f8ff}\u{fffd}")
|
||
printDescription(s4) // CHECK: <EFBFBD>
|
||
|
||
// NSCFConstantString conversion
|
||
var s5 : String = NSRangeException
|
||
printDescription(s5) // CHECK: NSRangeException
|
||
|
||
// Check conversions to AnyObject
|
||
var s6: NSString = "foo"
|
||
var ao: AnyObject = s6.copy()
|
||
var s7 = ao as! NSString
|
||
var s8 = ao as? String
|
||
|
||
|
||
// CHECK-NEXT: done
|
||
println("done")
|