// RUN: %target-typecheck-verify-swift %s -enable-astscope-lookup // Name binding in default arguments // FIXME: Semantic analysis should produce an error here, because 'x' // is not actually available. func functionParamScopes(x: Int, y: Int = x) -> Int { return x + y } // Name binding in instance methods. class C1 { var x = 0 var hashValue: Int { return x } } // Protocols involving 'Self'. protocol P1 { associatedtype A = Self } // Protocols involving associated types. protocol AProtocol { associatedtype e : e // expected-error@-1 {{use of undeclared type 'e'}} } // Extensions. protocol P2 { } extension P2 { func getSelf() -> Self { return self } } #if false // Lazy properties class LazyProperties { init() { lazy var localvar = 42 // FIXME: should error {{lazy is only valid for members of a struct or class}} {{5-10=}} localvar += 1 _ = localvar } var value: Int = 17 lazy var prop1: Int = value lazy var prop2: Int = { value + 1 }() lazy var prop3: Int = { [weak self] in self.value + 1 }() lazy var prop4: Int = self.value lazy var prop5: Int = { self.value + 1 }() } #endif // Protocol extensions. // Extending via a superclass constraint. class Superclass { func foo() { } static func bar() { } typealias Foo = Int } protocol PConstrained4 { } extension PConstrained4 where Self : Superclass { func testFoo() -> Foo { foo() self.foo() return Foo(5) } static func testBar() { bar() self.bar() } } // Local computed properties. func localComputedProperties() { var localProperty: Int { get { return localProperty // expected-warning{{attempting to access 'localProperty' within its own getter}} } set { print(localProperty) } } { print(localProperty) }() } // Top-level code. func topLevel() { } topLevel() let c1opt: C1? = C1() guard let c1 = c1opt else { } protocol Fooable { associatedtype Foo var foo: Foo { get } } // The extension below once caused infinite recursion. struct S // expected-error{{expected '{' in struct}} extension S // expected-error{{expected '{' in extension}} let a = b ; let b = a // expected-error{{could not infer type for 'a'}} // expected-error@-1 {{'a' used within its own type}} // FIXME: That second error is bogus.