blob: f9cbb945b613dffb712dc7450ec7223e15b4a939 [file] [log] [blame]
// RUN: %target-swift-ide-test -syntax-coloring -source-filename %s -D CONF | %FileCheck %s
// CHECK: <kw>var</kw> f : <type>Int</type>
var f : Int
// CHECK: <#kw>#if</#kw> <#id>os</#id>(<#id>macOS</#id>)
#if os(macOS)
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> x : <type>Int</type>
var x : Int
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> x : <type>Float</type>
var x : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> x2 : <type>Int</type>
var x2 : Int
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> x3 : <type>Int</type>
var x3 : Int
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> x3 : <type>Float</type>
var x3 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> x4 : <type>Int</type>
var x4 : Int
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> y1 : <type>Int</type>
var y1 : Int
// CHECK: <#kw>#elseif</#kw> <#id>BAZ</#id>
#elseif BAZ
// CHECK: <kw>var</kw> y1 : <type>String</type>
var y1 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y1 : <type>Float</type>
var y1 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> y2 : <type>Int</type>
var y2 : Int
// CHECK: <#kw>#elseif</#kw> <#id>BAZ</#id>
#elseif BAZ
// CHECK: <kw>var</kw> y2 : <type>String</type>
var y2 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y2 : <type>Float</type>
var y2 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> y3 : <type>Int</type>
var y3 : Int
// CHECK: <#kw>#elseif</#kw> <#id>CONF</#id>
#elseif CONF
// CHECK: <kw>var</kw> y3 : <type>String</type>
var y3 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y3 : <type>Float</type>
var y3 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <kw>var</kw> l : <type>Int</type>
var l : Int
// CHECK: <kw>class</kw> C1 {
class C1 {
// CHECK: <kw>var</kw> f : <type>Int</type>
var f : Int
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> x : <type>Int</type>
var x : Int
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> x : <type>Float</type>
var x : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> x2 : <type>Int</type>
var x2 : Int
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> x3 : <type>Int</type>
var x3 : Int
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> x3 : <type>Float</type>
var x3 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> x4 : <type>Int</type>
var x4 : Int
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> y1 : <type>Int</type>
var y1 : Int
// CHECK: <#kw>#elseif</#kw> <#id>BAZ</#id>
#elseif BAZ
// CHECK: <kw>var</kw> y1 : <type>String</type>
var y1 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y1 : <type>Float</type>
var y1 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> y2 : <type>Int</type>
var y2 : Int
// CHECK: <#kw>#elseif</#kw> <#id>BAZ</#id>
#elseif BAZ
// CHECK: <kw>var</kw> y2 : <type>String</type>
var y2 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y2 : <type>Float</type>
var y2 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> y3 : <type>Int</type>
var y3 : Int
// CHECK: <#kw>#elseif</#kw> <#id>CONF</#id>
#elseif CONF
// CHECK: <kw>var</kw> y3 : <type>String</type>
var y3 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y3 : <type>Float</type>
var y3 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <kw>var</kw> l : <type>Int</type>
var l : Int
}
// CHECK: <kw>func</kw> test1() {
func test1() {
// CHECK: <kw>var</kw> f : <type>Int</type>
var f : Int
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> x : <type>Int</type>
var x : Int
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> x : <type>Float</type>
var x : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> x2 : <type>Int</type>
var x2 : Int
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> x3 : <type>Int</type>
var x3 : Int
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> x3 : <type>Float</type>
var x3 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> x4 : <type>Int</type>
var x4 : Int
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> <#id>CONF</#id>
#if CONF
// CHECK: <kw>var</kw> y1 : <type>Int</type>
var y1 : Int
// CHECK: <#kw>#elseif</#kw> <#id>BAZ</#id>
#elseif BAZ
// CHECK: <kw>var</kw> y1 : <type>String</type>
var y1 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y1 : <type>Float</type>
var y1 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> y2 : <type>Int</type>
var y2 : Int
// CHECK: <#kw>#elseif</#kw> <#id>BAZ</#id>
#elseif BAZ
// CHECK: <kw>var</kw> y2 : <type>String</type>
var y2 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y2 : <type>Float</type>
var y2 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <#kw>#if</#kw> !<#id>CONF</#id>
#if !CONF
// CHECK: <kw>var</kw> y3 : <type>Int</type>
var y3 : Int
// CHECK: <#kw>#elseif</#kw> <#id>CONF</#id>
#elseif CONF
// CHECK: <kw>var</kw> y3 : <type>String</type>
var y3 : String
// CHECK: <#kw>#else</#kw>
#else
// CHECK: <kw>var</kw> y3 : <type>Float</type>
var y3 : Float
// CHECK: <#kw>#endif</#kw>
#endif
// CHECK: <kw>var</kw> l : <type>Int</type>
var l : Int
}
// CHECK: <kw>class</kw> C2 {
class C2 {
// CHECK: <#kw>#if</#kw> <#id>os</#id>(<#id>iOS</#id>)
#if os(iOS)
// CHECK: <kw>func</kw> foo() {}
func foo() {}
#endif
}
class NestedPoundIf {
// CHECK: <kw>class</kw> NestedPoundIf {
func foo1() {
// CHECK: <kw>func</kw> foo1() {
#if os(macOS)
// CHECK: <#kw>#if</#kw> <#id>os</#id>(<#id>macOS</#id>)
var a = 1
// CHECK: <kw>var</kw> a = <int>1</int>
#if USE_METAL
// CHECK: <#kw>#if</#kw> <#id>USE_METAL</#id>
var b = 2
// CHECK: <kw>var</kw> b = <int>2</int>
#if os(iOS)
// CHECK: <#kw>#if</#kw> <#id>os</#id>(<#id>iOS</#id>)
var c = 3
// CHECK: <kw>var</kw> c = <int>3</int>
#else
// CHECK: <#kw>#else</#kw>
var c = 3
// CHECK: <kw>var</kw> c = <int>3</int>
#endif
// CHECK: <#kw>#endif</#kw>
#else
// CHECK: <#kw>#else</#kw>
var b = 2
// CHECK: <kw>var</kw> b = <int>2</int>
#endif
// CHECK: <#kw>#endif</#kw>
#else
// CHECK: <#kw>#else</#kw>
var a = 1
// CHECK: <kw>var</kw> a = <int>1</int>
#endif
// CHECK: <#kw>#endif</#kw>
}
func foo2() {}
// CHECK: <kw>func</kw> foo2() {}
func foo3() {}
// CHECK: <kw>func</kw> foo3() {}
}
// CHECK: <#kw>#error</#kw>(<str>"Error"</str>)
#error("Error")
// CHECK: <#kw>#warning</#kw>(<str>"Warning"</str>)
#warning("Warning")
// CHECK: <#kw>#sourceLocation</#kw>(file: <str>"x"</str>, line: <int>1</int>)
#sourceLocation(file: "x", line: 1)
// CHECK: <kw>#line</kw> <int>17</int> <str>"abc.swift"</str>
#line 17 "abc.swift"
@available(iOS 8.0, OSX 10.10, *)
// CHECK: <attr-builtin>@available</attr-builtin>(<kw>iOS</kw> <float>8.0</float>, <kw>OSX</kw> <float>10.10</float>, *)
func foo() {
// CHECK: <kw>if</kw> <kw>#available</kw> (<kw>OSX</kw> <float>10.10</float>, <kw>iOS</kw> <float>8.01</float>, *) {<kw>let</kw> <kw>_</kw> = <str>"iOS"</str>}
if #available (OSX 10.10, iOS 8.01, *) {let _ = "iOS"}
}
// CHECK: <kw>func</kw> test4(<kw>inout</kw> a: <type>Int</type>) {{{$}}
func test4(inout a: Int) {
// CHECK-OLD: <kw>if</kw> <kw>#available</kw> (<kw>OSX</kw> >= <float>10.10</float>, <kw>iOS</kw> >= <float>8.01</float>) {<kw>let</kw> OSX = <str>"iOS"</str>}}{{$}}
// CHECK-NEW: <kw>if</kw> <kw>#available</kw> (OSX >= <float>10.10</float>, iOS >= <float>8.01</float>) {<kw>let</kw> OSX = <str>"iOS"</str>}}{{$}}
if #available (OSX >= 10.10, iOS >= 8.01) {let OSX = "iOS"}}
// CHECK: <kw>func</kw> test4b(a: <kw>inout</kw> <type>Int</type>) {{{$}}
func test4b(a: inout Int) {
}
let filename = #file
// CHECK: <kw>let</kw> filename = <kw>#file</kw>
let line = #line
// CHECK: <kw>let</kw> line = <kw>#line</kw>
let column = #column
// CHECK: <kw>let</kw> column = <kw>#column</kw>
let function = #function
// CHECK: <kw>let</kw> function = <kw>#function</kw>
let image = #imageLiteral(resourceName: "cloud.png")
// CHECK-OLD: <kw>let</kw> image = <object-literal>#imageLiteral(resourceName: "cloud.png")</object-literal>
// CHECK-NEW: <kw>let</kw> image = <object-literal>#imageLiteral</object-literal>(resourceName: <str>"cloud.png"</str>)
let file = #fileLiteral(resourceName: "cloud.png")
// CHECK-OLD: <kw>let</kw> file = <object-literal>#fileLiteral(resourceName: "cloud.png")</object-literal>
// CHECK-NEW: <kw>let</kw> file = <object-literal>#fileLiteral</object-literal>(resourceName: <str>"cloud.png"</str>)
let black = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
// CHECK-OLD: <kw>let</kw> black = <object-literal>#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)</object-literal>
// CHECK-NEW: <kw>let</kw> black = <object-literal>#colorLiteral</object-literal>(red: <int>0</int>, green: <int>0</int>, blue: <int>0</int>, alpha: <int>1</int>)
let rgb = [#colorLiteral(red: 1, green: 0, blue: 0, alpha: 1),
#colorLiteral(red: 0, green: 1, blue: 0, alpha: 1),
#colorLiteral(red: 0, green: 0, blue: 1, alpha: 1)]
// CHECK-OLD: <kw>let</kw> rgb = [<object-literal>#colorLiteral(red: 1, green: 0, blue: 0, alpha: 1)</object-literal>,
// CHECK-OLD: <object-literal>#colorLiteral(red: 0, green: 1, blue: 0, alpha: 1)</object-literal>,
// CHECK-OLD: <object-literal>#colorLiteral(red: 0, green: 0, blue: 1, alpha: 1)</object-literal>]
// CHECK-NEW: <kw>let</kw> rgb = [<object-literal>#colorLiteral</object-literal>(red: <int>1</int>, green: <int>0</int>, blue: <int>0</int>, alpha: <int>1</int>),
// CHECK-NEW: <object-literal>#colorLiteral</object-literal>(red: <int>0</int>, green: <int>1</int>, blue: <int>0</int>, alpha: <int>1</int>),
// CHECK-NEW: <object-literal>#colorLiteral</object-literal>(red: <int>0</int>, green: <int>0</int>, blue: <int>1</int>, alpha: <int>1</int>)]