Files
swift-mirror/test/Parse/identifiers.swift
Hamish Knight 565634c2cc Handle decl modifier keywords in isStartOfSwiftDecl
Previously we would always return true if we
encountered a decl modifier keyword, however this
could cause us to incorrectly consider SIL's
usage of such keywords, e.g 'private', to be the
start of a Swift decl.

Adjust the logic to check the next token for the
start of a Swift decl.
2020-02-04 13:00:42 -08:00

50 lines
2.6 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// RUN: %target-typecheck-verify-swift
func my_print<T>(_ t: T) {}
class {
class שלום {
class {
class Γειά {
class func привет() {
my_print("hello")
}
}
}
}
}
.שלום..Γειά.привет()
// Identifiers cannot start with combining chars.
_ = .́duh() // expected-error {{use of unresolved operator '.́'}} // expected-error{{use of unresolved identifier 'duh'}}
// Combining characters can be used within identifiers.
func s̈pin̈al_tap̈() {}
// Private-use characters aren't valid in Swift source.
() // expected-error{{invalid character in source file}} {{1-4= }}
// Placeholders are recognized as identifiers but with error.
func <#some name#>() {} // expected-error {{editor placeholder in source file}}
// Keywords as identifiers
class switch {} // expected-error {{keyword 'switch' cannot be used as an identifier here}} expected-note {{if this name is unavoidable, use backticks to escape it}} {{7-13=`switch`}}
struct Self {} // expected-error {{keyword 'Self' cannot be used as an identifier here}} expected-note {{if this name is unavoidable, use backticks to escape it}} {{8-12=`Self`}}
protocol enum {} // expected-error {{keyword 'enum' cannot be used as an identifier here}} expected-note {{if this name is unavoidable, use backticks to escape it}} {{10-14=`enum`}}
protocol test {
associatedtype public // expected-error {{keyword 'public' cannot be used as an identifier here}} expected-note {{if this name is unavoidable, use backticks to escape it}} {{18-24=`public`}}
}
func _(_ x: Int) {} // expected-error {{keyword '_' cannot be used as an identifier here}} // expected-note {{if this name is unavoidable, use backticks to escape it}} {{6-7=`_`}}
// SIL keywords are tokenized as normal identifiers in non-SIL mode.
_ = undef // expected-error {{use of unresolved identifier 'undef'}}
_ = sil // expected-error {{use of unresolved identifier 'sil'}}
_ = sil_stage // expected-error {{use of unresolved identifier 'sil_stage'}}
_ = sil_vtable // expected-error {{use of unresolved identifier 'sil_vtable'}}
_ = sil_global // expected-error {{use of unresolved identifier 'sil_global'}}
_ = sil_witness_table // expected-error {{use of unresolved identifier 'sil_witness_table'}}
_ = sil_default_witness_table // expected-error {{use of unresolved identifier 'sil_default_witness_table'}}
_ = sil_coverage_map // expected-error {{use of unresolved identifier 'sil_coverage_map'}}
_ = sil_scope // expected-error {{use of unresolved identifier 'sil_scope'}}