mirror of
https://github.com/github/codeql.git
synced 2026-06-30 17:15:34 +02:00
unified: Bulk migrate all corpus tests to the new system
This commit is contained in:
@@ -1,377 +0,0 @@
|
||||
===
|
||||
Closure with explicit parameters
|
||||
===
|
||||
|
||||
let f = { (x: Int) -> Int in x * 2 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statement:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
type:
|
||||
lambda_function_type
|
||||
params:
|
||||
lambda_function_type_parameters
|
||||
parameter:
|
||||
lambda_parameter
|
||||
name: simple_identifier "x"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "2"
|
||||
parameter:
|
||||
parameter
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
|
||||
===
|
||||
Closure with shorthand parameters
|
||||
===
|
||||
|
||||
let f = { $0 + $1 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statement:
|
||||
additive_expression
|
||||
lhs: simple_identifier "$0"
|
||||
op: +
|
||||
rhs: simple_identifier "$1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "$0"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "$1"
|
||||
|
||||
===
|
||||
Trailing closure
|
||||
===
|
||||
|
||||
xs.map { $0 * 2 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "map"
|
||||
target: simple_identifier "xs"
|
||||
suffix:
|
||||
call_suffix
|
||||
lambda:
|
||||
lambda_literal
|
||||
statement:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "$0"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "$0"
|
||||
right: int_literal "2"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
member: identifier "map"
|
||||
|
||||
===
|
||||
Closure with capture list
|
||||
===
|
||||
|
||||
let f = { [weak self] in self?.doThing() }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
captures:
|
||||
capture_list
|
||||
item:
|
||||
capture_list_item
|
||||
name: simple_identifier "self"
|
||||
ownership:
|
||||
ownership_modifier
|
||||
statement:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "doThing"
|
||||
target:
|
||||
optional_chain_marker
|
||||
expr:
|
||||
self_expression
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "self"
|
||||
member: identifier "doThing"
|
||||
capture_declaration:
|
||||
variable_declaration
|
||||
modifier: modifier "weak"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "self"
|
||||
|
||||
===
|
||||
Multi-statement closure
|
||||
===
|
||||
|
||||
let f = { (x: Int) -> Int in
|
||||
let y = x + 1
|
||||
return y * 2
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: +
|
||||
rhs: integer_literal "1"
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "y"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
type:
|
||||
lambda_function_type
|
||||
params:
|
||||
lambda_function_type_parameters
|
||||
parameter:
|
||||
lambda_parameter
|
||||
name: simple_identifier "x"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "1"
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
right: int_literal "2"
|
||||
parameter:
|
||||
parameter
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
@@ -0,0 +1,69 @@
|
||||
let f = { [weak self] in self?.doThing() }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
captures:
|
||||
capture_list
|
||||
item:
|
||||
capture_list_item
|
||||
name: simple_identifier "self"
|
||||
ownership:
|
||||
ownership_modifier
|
||||
statement:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "doThing"
|
||||
target:
|
||||
optional_chain_marker
|
||||
expr:
|
||||
self_expression
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "self"
|
||||
member: identifier "doThing"
|
||||
capture_declaration:
|
||||
variable_declaration
|
||||
modifier: modifier "weak"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "self"
|
||||
@@ -0,0 +1 @@
|
||||
let f = { [weak self] in self?.doThing() }
|
||||
@@ -0,0 +1,77 @@
|
||||
let f = { (x: Int) -> Int in x * 2 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statement:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
type:
|
||||
lambda_function_type
|
||||
params:
|
||||
lambda_function_type_parameters
|
||||
parameter:
|
||||
lambda_parameter
|
||||
name: simple_identifier "x"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "2"
|
||||
parameter:
|
||||
parameter
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
@@ -0,0 +1 @@
|
||||
let f = { (x: Int) -> Int in x * 2 }
|
||||
@@ -0,0 +1,47 @@
|
||||
let f = { $0 + $1 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statement:
|
||||
additive_expression
|
||||
lhs: simple_identifier "$0"
|
||||
op: +
|
||||
rhs: simple_identifier "$1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "$0"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "$1"
|
||||
@@ -0,0 +1 @@
|
||||
let f = { $0 + $1 }
|
||||
@@ -0,0 +1,111 @@
|
||||
let f = { (x: Int) -> Int in
|
||||
let y = x + 1
|
||||
return y * 2
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: +
|
||||
rhs: integer_literal "1"
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "y"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
type:
|
||||
lambda_function_type
|
||||
params:
|
||||
lambda_function_type_parameters
|
||||
parameter:
|
||||
lambda_parameter
|
||||
name: simple_identifier "x"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "1"
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
right: int_literal "2"
|
||||
parameter:
|
||||
parameter
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
@@ -0,0 +1,4 @@
|
||||
let f = { (x: Int) -> Int in
|
||||
let y = x + 1
|
||||
return y * 2
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
xs.map { $0 * 2 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "map"
|
||||
target: simple_identifier "xs"
|
||||
suffix:
|
||||
call_suffix
|
||||
lambda:
|
||||
lambda_literal
|
||||
statement:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "$0"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
function_expr
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "$0"
|
||||
right: int_literal "2"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
member: identifier "map"
|
||||
@@ -0,0 +1 @@
|
||||
xs.map { $0 * 2 }
|
||||
@@ -1,410 +0,0 @@
|
||||
===
|
||||
Array literal
|
||||
===
|
||||
|
||||
let xs = [1, 2, 3]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "xs"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "xs"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
int_literal "1"
|
||||
int_literal "2"
|
||||
int_literal "3"
|
||||
|
||||
===
|
||||
Empty array literal with type
|
||||
===
|
||||
|
||||
let xs: [Int] = []
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "xs"
|
||||
type:
|
||||
type_annotation
|
||||
type:
|
||||
type
|
||||
name:
|
||||
array_type
|
||||
element:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
value:
|
||||
array_literal
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "xs"
|
||||
type:
|
||||
generic_type_expr
|
||||
base:
|
||||
named_type_expr
|
||||
name: identifier "Array"
|
||||
type_argument:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
value: array_literal "[]"
|
||||
|
||||
===
|
||||
Dictionary literal
|
||||
===
|
||||
|
||||
let d = ["a": 1, "b": 2]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "d"
|
||||
value:
|
||||
dictionary_literal
|
||||
element:
|
||||
dictionary_literal_item
|
||||
key:
|
||||
line_string_literal
|
||||
text: line_str_text "a"
|
||||
value: integer_literal "1"
|
||||
dictionary_literal_item
|
||||
key:
|
||||
line_string_literal
|
||||
text: line_str_text "b"
|
||||
value: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "d"
|
||||
value: map_literal "[\"a\": 1, \"b\": 2]"
|
||||
|
||||
===
|
||||
Set literal
|
||||
===
|
||||
|
||||
let s: Set<Int> = [1, 2, 3]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "s"
|
||||
type:
|
||||
type_annotation
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
arguments:
|
||||
type_arguments
|
||||
argument:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
name: type_identifier "Set"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "s"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Set<Int>"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
int_literal "1"
|
||||
int_literal "2"
|
||||
int_literal "3"
|
||||
|
||||
===
|
||||
Tuple literal
|
||||
===
|
||||
|
||||
let t = (1, "two", 3.0)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "t"
|
||||
value:
|
||||
tuple_expression
|
||||
element:
|
||||
tuple_expression_item
|
||||
value: integer_literal "1"
|
||||
tuple_expression_item
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "two"
|
||||
tuple_expression_item
|
||||
value: real_literal "3.0"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "t"
|
||||
value: tuple_expr "(1, \"two\", 3.0)"
|
||||
|
||||
===
|
||||
Subscript access
|
||||
===
|
||||
|
||||
// TODO: tree-sitter-swift parses `xs[0]` as a call_expression (same shape
|
||||
// as `xs(0)`), so the mapping currently produces a call_expr. Update the
|
||||
// parser / add a separate subscript_expr node and remap when fixed.
|
||||
let first = xs[0]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "first"
|
||||
value:
|
||||
call_expression
|
||||
function: simple_identifier "xs"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "0"
|
||||
comment "// TODO: tree-sitter-swift parses `xs[0]` as a call_expression (same shape"
|
||||
comment "// as `xs(0)`), so the mapping currently produces a call_expr. Update the"
|
||||
comment "// parser / add a separate subscript_expr node and remap when fixed."
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "first"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
|
||||
===
|
||||
Dictionary subscript
|
||||
===
|
||||
|
||||
// TODO: same parser issue as the array subscript case above —
|
||||
// `d["key"]` is parsed as `call_expression(d, ("key"))`.
|
||||
let v = d["key"]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "v"
|
||||
value:
|
||||
call_expression
|
||||
function: simple_identifier "d"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "key"
|
||||
comment "// TODO: same parser issue as the array subscript case above —"
|
||||
comment "// `d[\"key\"]` is parsed as `call_expression(d, (\"key\"))`."
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "v"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"key\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "d"
|
||||
|
||||
===
|
||||
Tuple member access
|
||||
===
|
||||
|
||||
let n = t.0
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: integer_literal "0"
|
||||
target: simple_identifier "t"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "n"
|
||||
value:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "t"
|
||||
member: identifier "0"
|
||||
@@ -0,0 +1,39 @@
|
||||
let xs = [1, 2, 3]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "xs"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "xs"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
int_literal "1"
|
||||
int_literal "2"
|
||||
int_literal "3"
|
||||
@@ -0,0 +1 @@
|
||||
let xs = [1, 2, 3]
|
||||
@@ -0,0 +1,41 @@
|
||||
let d = ["a": 1, "b": 2]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "d"
|
||||
value:
|
||||
dictionary_literal
|
||||
element:
|
||||
dictionary_literal_item
|
||||
key:
|
||||
line_string_literal
|
||||
text: line_str_text "a"
|
||||
value: integer_literal "1"
|
||||
dictionary_literal_item
|
||||
key:
|
||||
line_string_literal
|
||||
text: line_str_text "b"
|
||||
value: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "d"
|
||||
value: map_literal "[\"a\": 1, \"b\": 2]"
|
||||
@@ -0,0 +1 @@
|
||||
let d = ["a": 1, "b": 2]
|
||||
@@ -0,0 +1,51 @@
|
||||
// TODO: same parser issue as the array subscript case above —
|
||||
// `d["key"]` is parsed as `call_expression(d, ("key"))`.
|
||||
let v = d["key"]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "v"
|
||||
value:
|
||||
call_expression
|
||||
function: simple_identifier "d"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "key"
|
||||
comment "// TODO: same parser issue as the array subscript case above —"
|
||||
comment "// `d[\"key\"]` is parsed as `call_expression(d, (\"key\"))`."
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "v"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"key\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "d"
|
||||
@@ -0,0 +1,3 @@
|
||||
// TODO: same parser issue as the array subscript case above —
|
||||
// `d["key"]` is parsed as `call_expression(d, ("key"))`.
|
||||
let v = d["key"]
|
||||
@@ -0,0 +1,51 @@
|
||||
let xs: [Int] = []
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "xs"
|
||||
type:
|
||||
type_annotation
|
||||
type:
|
||||
type
|
||||
name:
|
||||
array_type
|
||||
element:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
value:
|
||||
array_literal
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "xs"
|
||||
type:
|
||||
generic_type_expr
|
||||
base:
|
||||
named_type_expr
|
||||
name: identifier "Array"
|
||||
type_argument:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
value: array_literal "[]"
|
||||
@@ -0,0 +1 @@
|
||||
let xs: [Int] = []
|
||||
@@ -0,0 +1,60 @@
|
||||
let s: Set<Int> = [1, 2, 3]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "s"
|
||||
type:
|
||||
type_annotation
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
arguments:
|
||||
type_arguments
|
||||
argument:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
name: type_identifier "Set"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "s"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Set<Int>"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
int_literal "1"
|
||||
int_literal "2"
|
||||
int_literal "3"
|
||||
@@ -0,0 +1 @@
|
||||
let s: Set<Int> = [1, 2, 3]
|
||||
@@ -0,0 +1,51 @@
|
||||
// TODO: tree-sitter-swift parses `xs[0]` as a call_expression (same shape
|
||||
// as `xs(0)`), so the mapping currently produces a call_expr. Update the
|
||||
// parser / add a separate subscript_expr node and remap when fixed.
|
||||
let first = xs[0]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "first"
|
||||
value:
|
||||
call_expression
|
||||
function: simple_identifier "xs"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "0"
|
||||
comment "// TODO: tree-sitter-swift parses `xs[0]` as a call_expression (same shape"
|
||||
comment "// as `xs(0)`), so the mapping currently produces a call_expr. Update the"
|
||||
comment "// parser / add a separate subscript_expr node and remap when fixed."
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "first"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
@@ -0,0 +1,4 @@
|
||||
// TODO: tree-sitter-swift parses `xs[0]` as a call_expression (same shape
|
||||
// as `xs(0)`), so the mapping currently produces a call_expr. Update the
|
||||
// parser / add a separate subscript_expr node and remap when fixed.
|
||||
let first = xs[0]
|
||||
@@ -0,0 +1,39 @@
|
||||
let t = (1, "two", 3.0)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "t"
|
||||
value:
|
||||
tuple_expression
|
||||
element:
|
||||
tuple_expression_item
|
||||
value: integer_literal "1"
|
||||
tuple_expression_item
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "two"
|
||||
tuple_expression_item
|
||||
value: real_literal "3.0"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "t"
|
||||
value: tuple_expr "(1, \"two\", 3.0)"
|
||||
@@ -0,0 +1 @@
|
||||
let t = (1, "two", 3.0)
|
||||
@@ -0,0 +1,39 @@
|
||||
let n = t.0
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: integer_literal "0"
|
||||
target: simple_identifier "t"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "n"
|
||||
value:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "t"
|
||||
member: identifier "0"
|
||||
@@ -0,0 +1 @@
|
||||
let n = t.0
|
||||
@@ -1,966 +0,0 @@
|
||||
===
|
||||
If statement
|
||||
===
|
||||
|
||||
if x > 0 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
===
|
||||
If-else
|
||||
===
|
||||
|
||||
if x > 0 {
|
||||
print(x)
|
||||
} else {
|
||||
print(-x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
else_branch:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
unary_expr
|
||||
operand:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: prefix_operator "-"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
===
|
||||
If-else-if chain
|
||||
===
|
||||
|
||||
if x > 0 {
|
||||
print(1)
|
||||
} else if x < 0 {
|
||||
print(2)
|
||||
} else {
|
||||
print(3)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
else_branch:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "2"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: <
|
||||
rhs: integer_literal "0"
|
||||
else_branch:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator "<"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "3"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "2"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
===
|
||||
If-let optional binding
|
||||
===
|
||||
|
||||
if let value = optional {
|
||||
print(value)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "value"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
bound_identifier: simple_identifier "value"
|
||||
value: simple_identifier "optional"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "value"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base:
|
||||
named_type_expr
|
||||
name: identifier "Optional"
|
||||
member: identifier "some"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "optional"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "value"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
===
|
||||
Guard let
|
||||
===
|
||||
|
||||
guard let value = optional else { return }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
guard_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
bound_identifier: simple_identifier "value"
|
||||
value: simple_identifier "optional"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
guard_if_stmt
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "value"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base:
|
||||
named_type_expr
|
||||
name: identifier "Optional"
|
||||
member: identifier "some"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "optional"
|
||||
else:
|
||||
block
|
||||
stmt: return_expr "return"
|
||||
|
||||
===
|
||||
Ternary expression
|
||||
===
|
||||
|
||||
let y = x > 0 ? 1 : -1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
ternary_expression
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
if_false:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: integer_literal "1"
|
||||
if_true: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
unary_expr
|
||||
operand: int_literal "1"
|
||||
operator: prefix_operator "-"
|
||||
then: int_literal "1"
|
||||
|
||||
===
|
||||
Switch statement
|
||||
===
|
||||
|
||||
switch x {
|
||||
case 1:
|
||||
print("one")
|
||||
case 2, 3:
|
||||
print("two or three")
|
||||
default:
|
||||
print("other")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
switch_statement
|
||||
entry:
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind: integer_literal "1"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "one"
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind: integer_literal "2"
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind: integer_literal "3"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "two or three"
|
||||
switch_entry
|
||||
default: default_keyword "default"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "other"
|
||||
expr: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"one\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "1"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"two or three\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
or_pattern
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "2"
|
||||
expr_equality_pattern
|
||||
expr: int_literal "3"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"other\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
|
||||
===
|
||||
If-case-let with shadowing in condition value
|
||||
===
|
||||
|
||||
if case let x = x + 10 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: +
|
||||
rhs: integer_literal "10"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "10"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
===
|
||||
Switch with binding pattern
|
||||
===
|
||||
|
||||
switch shape {
|
||||
case .circle(let r):
|
||||
print(r)
|
||||
case .square(let s):
|
||||
print(s)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
switch_statement
|
||||
entry:
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "r"
|
||||
dot: .
|
||||
name: simple_identifier "circle"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "r"
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "s"
|
||||
dot: .
|
||||
name: simple_identifier "square"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "s"
|
||||
expr: simple_identifier "shape"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "r"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "r"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "circle"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "s"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "s"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "square"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "shape"
|
||||
|
||||
===
|
||||
Switch with labeled case pattern arguments
|
||||
===
|
||||
|
||||
switch x {
|
||||
case .implicit(isAcknowledged: false):
|
||||
print("yes")
|
||||
case .thread(threadRowId: _, let rowId):
|
||||
print(rowId)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
switch_statement
|
||||
entry:
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
name: simple_identifier "isAcknowledged"
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
boolean_literal
|
||||
dot: .
|
||||
name: simple_identifier "implicit"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "yes"
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
name: simple_identifier "threadRowId"
|
||||
pattern:
|
||||
pattern
|
||||
kind: wildcard_pattern "_"
|
||||
tuple_pattern_item
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "rowId"
|
||||
dot: .
|
||||
name: simple_identifier "thread"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "rowId"
|
||||
expr: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"yes\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "isAcknowledged"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: boolean_literal "false"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "implicit"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "rowId"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "threadRowId"
|
||||
pattern: ignore_pattern "_"
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "rowId"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "thread"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
@@ -0,0 +1,52 @@
|
||||
guard let value = optional else { return }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
guard_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
bound_identifier: simple_identifier "value"
|
||||
value: simple_identifier "optional"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
guard_if_stmt
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "value"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base:
|
||||
named_type_expr
|
||||
name: identifier "Optional"
|
||||
member: identifier "some"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "optional"
|
||||
else:
|
||||
block
|
||||
stmt: return_expr "return"
|
||||
@@ -0,0 +1 @@
|
||||
guard let value = optional else { return }
|
||||
@@ -0,0 +1,72 @@
|
||||
if case let x = x + 10 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: +
|
||||
rhs: integer_literal "10"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "10"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
@@ -0,0 +1,3 @@
|
||||
if case let x = x + 10 {
|
||||
print(x)
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
if x > 0 {
|
||||
print(1)
|
||||
} else if x < 0 {
|
||||
print(2)
|
||||
} else {
|
||||
print(3)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
else_branch:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "2"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: <
|
||||
rhs: integer_literal "0"
|
||||
else_branch:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator "<"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "3"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "2"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
@@ -0,0 +1,7 @@
|
||||
if x > 0 {
|
||||
print(1)
|
||||
} else if x < 0 {
|
||||
print(2)
|
||||
} else {
|
||||
print(3)
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
if x > 0 {
|
||||
print(x)
|
||||
} else {
|
||||
print(-x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
else_branch:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
unary_expr
|
||||
operand:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: prefix_operator "-"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
@@ -0,0 +1,5 @@
|
||||
if x > 0 {
|
||||
print(x)
|
||||
} else {
|
||||
print(-x)
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
if let value = optional {
|
||||
print(value)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "value"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
bound_identifier: simple_identifier "value"
|
||||
value: simple_identifier "optional"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "value"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base:
|
||||
named_type_expr
|
||||
name: identifier "Optional"
|
||||
member: identifier "some"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "optional"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "value"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
@@ -0,0 +1,3 @@
|
||||
if let value = optional {
|
||||
print(value)
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
if x > 0 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
@@ -0,0 +1,3 @@
|
||||
if x > 0 {
|
||||
print(x)
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
switch x {
|
||||
case 1:
|
||||
print("one")
|
||||
case 2, 3:
|
||||
print("two or three")
|
||||
default:
|
||||
print("other")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
switch_statement
|
||||
entry:
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind: integer_literal "1"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "one"
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind: integer_literal "2"
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind: integer_literal "3"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "two or three"
|
||||
switch_entry
|
||||
default: default_keyword "default"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "other"
|
||||
expr: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"one\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "1"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"two or three\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
or_pattern
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "2"
|
||||
expr_equality_pattern
|
||||
expr: int_literal "3"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"other\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
@@ -0,0 +1,8 @@
|
||||
switch x {
|
||||
case 1:
|
||||
print("one")
|
||||
case 2, 3:
|
||||
print("two or three")
|
||||
default:
|
||||
print("other")
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
switch shape {
|
||||
case .circle(let r):
|
||||
print(r)
|
||||
case .square(let s):
|
||||
print(s)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
switch_statement
|
||||
entry:
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "r"
|
||||
dot: .
|
||||
name: simple_identifier "circle"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "r"
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "s"
|
||||
dot: .
|
||||
name: simple_identifier "square"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "s"
|
||||
expr: simple_identifier "shape"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "r"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "r"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "circle"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "s"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "s"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "square"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "shape"
|
||||
@@ -0,0 +1,6 @@
|
||||
switch shape {
|
||||
case .circle(let r):
|
||||
print(r)
|
||||
case .square(let s):
|
||||
print(s)
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
switch x {
|
||||
case .implicit(isAcknowledged: false):
|
||||
print("yes")
|
||||
case .thread(threadRowId: _, let rowId):
|
||||
print(rowId)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
switch_statement
|
||||
entry:
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
name: simple_identifier "isAcknowledged"
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
boolean_literal
|
||||
dot: .
|
||||
name: simple_identifier "implicit"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "yes"
|
||||
switch_entry
|
||||
pattern:
|
||||
switch_pattern
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
case_pattern
|
||||
arguments:
|
||||
tuple_pattern
|
||||
item:
|
||||
tuple_pattern_item
|
||||
name: simple_identifier "threadRowId"
|
||||
pattern:
|
||||
pattern
|
||||
kind: wildcard_pattern "_"
|
||||
tuple_pattern_item
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "rowId"
|
||||
dot: .
|
||||
name: simple_identifier "thread"
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "rowId"
|
||||
expr: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"yes\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "isAcknowledged"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: boolean_literal "false"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "implicit"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "rowId"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "threadRowId"
|
||||
pattern: ignore_pattern "_"
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "rowId"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "thread"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
@@ -0,0 +1,6 @@
|
||||
switch x {
|
||||
case .implicit(isAcknowledged: false):
|
||||
print("yes")
|
||||
case .thread(threadRowId: _, let rowId):
|
||||
print(rowId)
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
let y = x > 0 ? 1 : -1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
ternary_expression
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
if_false:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: integer_literal "1"
|
||||
if_true: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
else:
|
||||
unary_expr
|
||||
operand: int_literal "1"
|
||||
operator: prefix_operator "-"
|
||||
then: int_literal "1"
|
||||
@@ -0,0 +1 @@
|
||||
let y = x > 0 ? 1 : -1
|
||||
@@ -1,186 +0,0 @@
|
||||
===
|
||||
Additive expression is desugared
|
||||
===
|
||||
|
||||
1 + 2
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
additive_expression
|
||||
lhs: integer_literal "1"
|
||||
op: +
|
||||
rhs: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left: int_literal "1"
|
||||
right: int_literal "2"
|
||||
|
||||
===
|
||||
Another additive expression is desugared
|
||||
===
|
||||
|
||||
foo + bar
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
additive_expression
|
||||
lhs: simple_identifier "foo"
|
||||
op: +
|
||||
rhs: simple_identifier "bar"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "bar"
|
||||
|
||||
===
|
||||
Simple import with single name
|
||||
===
|
||||
|
||||
import Foundation
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part: simple_identifier "Foundation"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation"
|
||||
imported_expr:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
|
||||
===
|
||||
Import with dotted path (two parts)
|
||||
===
|
||||
|
||||
import Foundation.Networking
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part:
|
||||
simple_identifier "Foundation"
|
||||
simple_identifier "Networking"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Networking"
|
||||
|
||||
===
|
||||
Import with deeply nested path (three parts)
|
||||
===
|
||||
|
||||
import Foundation.Networking.URLSession
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part:
|
||||
simple_identifier "Foundation"
|
||||
simple_identifier "Networking"
|
||||
simple_identifier "URLSession"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking.URLSession"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Networking"
|
||||
member: identifier "URLSession"
|
||||
|
||||
===
|
||||
Scoped import uses name_pattern
|
||||
===
|
||||
|
||||
import struct Foundation.Date
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part:
|
||||
simple_identifier "Foundation"
|
||||
simple_identifier "Date"
|
||||
scoped_import_kind: struct
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
modifier: modifier "struct"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "Date"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Date"
|
||||
@@ -0,0 +1,21 @@
|
||||
1 + 2
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
additive_expression
|
||||
lhs: integer_literal "1"
|
||||
op: +
|
||||
rhs: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left: int_literal "1"
|
||||
right: int_literal "2"
|
||||
@@ -0,0 +1 @@
|
||||
1 + 2
|
||||
@@ -0,0 +1,25 @@
|
||||
foo + bar
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
additive_expression
|
||||
lhs: simple_identifier "foo"
|
||||
op: +
|
||||
rhs: simple_identifier "bar"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "bar"
|
||||
@@ -0,0 +1 @@
|
||||
foo + bar
|
||||
@@ -0,0 +1,31 @@
|
||||
import Foundation.Networking.URLSession
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part:
|
||||
simple_identifier "Foundation"
|
||||
simple_identifier "Networking"
|
||||
simple_identifier "URLSession"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking.URLSession"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Networking"
|
||||
member: identifier "URLSession"
|
||||
@@ -0,0 +1 @@
|
||||
import Foundation.Networking.URLSession
|
||||
@@ -0,0 +1,27 @@
|
||||
import Foundation.Networking
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part:
|
||||
simple_identifier "Foundation"
|
||||
simple_identifier "Networking"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Networking"
|
||||
@@ -0,0 +1 @@
|
||||
import Foundation.Networking
|
||||
@@ -0,0 +1,31 @@
|
||||
import struct Foundation.Date
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part:
|
||||
simple_identifier "Foundation"
|
||||
simple_identifier "Date"
|
||||
scoped_import_kind: struct
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
modifier: modifier "struct"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "Date"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Date"
|
||||
@@ -0,0 +1 @@
|
||||
import struct Foundation.Date
|
||||
@@ -0,0 +1,22 @@
|
||||
import Foundation
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
import_declaration
|
||||
name:
|
||||
identifier
|
||||
part: simple_identifier "Foundation"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation"
|
||||
imported_expr:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
@@ -0,0 +1 @@
|
||||
import Foundation
|
||||
@@ -1,657 +0,0 @@
|
||||
===
|
||||
Function with no parameters
|
||||
===
|
||||
|
||||
func greet() {
|
||||
print("hello")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "hello"
|
||||
name: simple_identifier "greet"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"hello\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
|
||||
===
|
||||
Function with parameters and return type
|
||||
===
|
||||
|
||||
func add(_ a: Int, _ b: Int) -> Int {
|
||||
return a + b
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result:
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: +
|
||||
rhs: simple_identifier "b"
|
||||
name: simple_identifier "add"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "a"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "b"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
name: identifier "add"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "a"
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "b"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
|
||||
===
|
||||
Function with named parameters
|
||||
===
|
||||
|
||||
func greet(person name: String) {
|
||||
print(name)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "name"
|
||||
name: simple_identifier "greet"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "person"
|
||||
name: simple_identifier "name"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "String"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "name"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "person"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "name"
|
||||
|
||||
===
|
||||
Function with default parameter value
|
||||
===
|
||||
|
||||
func greet(name: String = "world") {
|
||||
print(name)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "name"
|
||||
name: simple_identifier "greet"
|
||||
parameter:
|
||||
function_parameter
|
||||
default_value:
|
||||
line_string_literal
|
||||
text: line_str_text "world"
|
||||
parameter:
|
||||
parameter
|
||||
name: simple_identifier "name"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "String"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "name"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
parameter:
|
||||
parameter
|
||||
default: string_literal "\"world\""
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "name"
|
||||
|
||||
===
|
||||
Variadic function
|
||||
===
|
||||
|
||||
func sum(_ values: Int...) -> Int {
|
||||
return values.reduce(0, +)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "reduce"
|
||||
target: simple_identifier "values"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "0"
|
||||
value_argument
|
||||
value:
|
||||
referenceable_operator
|
||||
operator: +
|
||||
name: simple_identifier "sum"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "values"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "+"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "values"
|
||||
member: identifier "reduce"
|
||||
name: identifier "sum"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "values"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
|
||||
===
|
||||
Function call
|
||||
===
|
||||
|
||||
foo(1, 2)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "foo"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
value_argument
|
||||
value: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
argument
|
||||
value: int_literal "2"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
|
||||
===
|
||||
Function call with labelled arguments
|
||||
===
|
||||
|
||||
greet(person: "Bob")
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "greet"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
name:
|
||||
value_argument_label
|
||||
name: simple_identifier "person"
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "Bob"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
name: identifier "person"
|
||||
value: string_literal "\"Bob\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "greet"
|
||||
|
||||
===
|
||||
Method call
|
||||
===
|
||||
|
||||
list.append(1)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "append"
|
||||
target: simple_identifier "list"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "list"
|
||||
member: identifier "append"
|
||||
|
||||
===
|
||||
Generic function
|
||||
===
|
||||
|
||||
func identity<T>(_ x: T) -> T {
|
||||
return x
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result: simple_identifier "x"
|
||||
name: simple_identifier "identity"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "x"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "T"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "T"
|
||||
type_parameters:
|
||||
type_parameters
|
||||
parameter:
|
||||
type_parameter
|
||||
name: type_identifier "T"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
name: identifier "identity"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "T"
|
||||
|
||||
===
|
||||
Leading-dot expression value
|
||||
===
|
||||
|
||||
let x = .foo
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value:
|
||||
prefix_expression
|
||||
operation: .
|
||||
target: simple_identifier "foo"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
member_access_expr
|
||||
base: inferred_type_expr ".foo"
|
||||
member: identifier "foo"
|
||||
|
||||
===
|
||||
Leading-dot expression call
|
||||
===
|
||||
|
||||
let y = .some(1)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
call_expression
|
||||
function:
|
||||
prefix_expression
|
||||
operation: .
|
||||
target: simple_identifier "some"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
member_access_expr
|
||||
base: inferred_type_expr ".some"
|
||||
member: identifier "some"
|
||||
@@ -0,0 +1,35 @@
|
||||
greet(person: "Bob")
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "greet"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
name:
|
||||
value_argument_label
|
||||
name: simple_identifier "person"
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "Bob"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
name: identifier "person"
|
||||
value: string_literal "\"Bob\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "greet"
|
||||
@@ -0,0 +1 @@
|
||||
greet(person: "Bob")
|
||||
@@ -0,0 +1,33 @@
|
||||
foo(1, 2)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "foo"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
value_argument
|
||||
value: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
argument
|
||||
value: int_literal "2"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
@@ -0,0 +1 @@
|
||||
foo(1, 2)
|
||||
@@ -0,0 +1,64 @@
|
||||
func greet(name: String = "world") {
|
||||
print(name)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "name"
|
||||
name: simple_identifier "greet"
|
||||
parameter:
|
||||
function_parameter
|
||||
default_value:
|
||||
line_string_literal
|
||||
text: line_str_text "world"
|
||||
parameter:
|
||||
parameter
|
||||
name: simple_identifier "name"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "String"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "name"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
parameter:
|
||||
parameter
|
||||
default: string_literal "\"world\""
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "name"
|
||||
@@ -0,0 +1,3 @@
|
||||
func greet(name: String = "world") {
|
||||
print(name)
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
func greet(person name: String) {
|
||||
print(name)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "name"
|
||||
name: simple_identifier "greet"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "person"
|
||||
name: simple_identifier "name"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "String"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "name"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "person"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "name"
|
||||
@@ -0,0 +1,3 @@
|
||||
func greet(person name: String) {
|
||||
print(name)
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
func greet() {
|
||||
print("hello")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "hello"
|
||||
name: simple_identifier "greet"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"hello\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
@@ -0,0 +1,3 @@
|
||||
func greet() {
|
||||
print("hello")
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
func add(_ a: Int, _ b: Int) -> Int {
|
||||
return a + b
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result:
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: +
|
||||
rhs: simple_identifier "b"
|
||||
name: simple_identifier "add"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "a"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "b"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
name: identifier "add"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "a"
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "b"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
@@ -0,0 +1,3 @@
|
||||
func add(_ a: Int, _ b: Int) -> Int {
|
||||
return a + b
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
func identity<T>(_ x: T) -> T {
|
||||
return x
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result: simple_identifier "x"
|
||||
name: simple_identifier "identity"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "x"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "T"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "T"
|
||||
type_parameters:
|
||||
type_parameters
|
||||
parameter:
|
||||
type_parameter
|
||||
name: type_identifier "T"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
name: identifier "identity"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "T"
|
||||
@@ -0,0 +1,3 @@
|
||||
func identity<T>(_ x: T) -> T {
|
||||
return x
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
let y = .some(1)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
call_expression
|
||||
function:
|
||||
prefix_expression
|
||||
operation: .
|
||||
target: simple_identifier "some"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
member_access_expr
|
||||
base: inferred_type_expr ".some"
|
||||
member: identifier "some"
|
||||
@@ -0,0 +1 @@
|
||||
let y = .some(1)
|
||||
@@ -0,0 +1,35 @@
|
||||
let x = .foo
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
property_declaration
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
declarator:
|
||||
property_binding
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value:
|
||||
prefix_expression
|
||||
operation: .
|
||||
target: simple_identifier "foo"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
member_access_expr
|
||||
base: inferred_type_expr ".foo"
|
||||
member: identifier "foo"
|
||||
@@ -0,0 +1 @@
|
||||
let x = .foo
|
||||
@@ -0,0 +1,37 @@
|
||||
list.append(1)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "append"
|
||||
target: simple_identifier "list"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "list"
|
||||
member: identifier "append"
|
||||
@@ -0,0 +1 @@
|
||||
list.append(1)
|
||||
@@ -0,0 +1,91 @@
|
||||
func sum(_ values: Int...) -> Int {
|
||||
return values.reduce(0, +)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
control_transfer_statement
|
||||
kind: return
|
||||
result:
|
||||
call_expression
|
||||
function:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "reduce"
|
||||
target: simple_identifier "values"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: integer_literal "0"
|
||||
value_argument
|
||||
value:
|
||||
referenceable_operator
|
||||
operator: +
|
||||
name: simple_identifier "sum"
|
||||
parameter:
|
||||
function_parameter
|
||||
parameter:
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name: simple_identifier "values"
|
||||
type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
return_type:
|
||||
type
|
||||
name:
|
||||
user_type
|
||||
part:
|
||||
simple_user_type
|
||||
name: type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "+"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "values"
|
||||
member: identifier "reduce"
|
||||
name: identifier "sum"
|
||||
parameter:
|
||||
parameter
|
||||
external_name: identifier "_"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "values"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
@@ -0,0 +1,3 @@
|
||||
func sum(_ values: Int...) -> Int {
|
||||
return values.reduce(0, +)
|
||||
}
|
||||
@@ -1,143 +0,0 @@
|
||||
===
|
||||
Integer literal
|
||||
===
|
||||
|
||||
42
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement: integer_literal "42"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: int_literal "42"
|
||||
|
||||
===
|
||||
Negative integer literal
|
||||
===
|
||||
|
||||
-7
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: integer_literal "7"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
unary_expr
|
||||
operand: int_literal "7"
|
||||
operator: prefix_operator "-"
|
||||
|
||||
===
|
||||
Floating-point literal
|
||||
===
|
||||
|
||||
3.14
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement: real_literal "3.14"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: float_literal "3.14"
|
||||
|
||||
===
|
||||
Boolean literals
|
||||
===
|
||||
|
||||
true
|
||||
false
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
boolean_literal
|
||||
boolean_literal
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
boolean_literal "true"
|
||||
boolean_literal "false"
|
||||
|
||||
===
|
||||
Nil literal
|
||||
===
|
||||
|
||||
nil
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement: nil
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: builtin_expr "nil"
|
||||
|
||||
===
|
||||
String literal
|
||||
===
|
||||
|
||||
"hello"
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
line_string_literal
|
||||
text: line_str_text "hello"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: string_literal "\"hello\""
|
||||
|
||||
===
|
||||
String with interpolation
|
||||
===
|
||||
|
||||
"hello \(name)"
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
line_string_literal
|
||||
interpolation:
|
||||
interpolated_expression
|
||||
value: simple_identifier "name"
|
||||
text: line_str_text "hello "
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: string_literal "\"hello \\(name)\""
|
||||
@@ -0,0 +1,18 @@
|
||||
true
|
||||
false
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
boolean_literal
|
||||
boolean_literal
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
boolean_literal "true"
|
||||
boolean_literal "false"
|
||||
@@ -0,0 +1,2 @@
|
||||
true
|
||||
false
|
||||
@@ -0,0 +1,13 @@
|
||||
3.14
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement: real_literal "3.14"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: float_literal "3.14"
|
||||
@@ -0,0 +1 @@
|
||||
3.14
|
||||
@@ -0,0 +1,13 @@
|
||||
42
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement: integer_literal "42"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: int_literal "42"
|
||||
@@ -0,0 +1 @@
|
||||
42
|
||||
@@ -0,0 +1,19 @@
|
||||
-7
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: integer_literal "7"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
unary_expr
|
||||
operand: int_literal "7"
|
||||
operator: prefix_operator "-"
|
||||
@@ -0,0 +1 @@
|
||||
-7
|
||||
@@ -0,0 +1,13 @@
|
||||
nil
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement: nil
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: builtin_expr "nil"
|
||||
@@ -0,0 +1 @@
|
||||
nil
|
||||
@@ -0,0 +1,15 @@
|
||||
"hello"
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
line_string_literal
|
||||
text: line_str_text "hello"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: string_literal "\"hello\""
|
||||
@@ -0,0 +1 @@
|
||||
"hello"
|
||||
@@ -0,0 +1,18 @@
|
||||
"hello \(name)"
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
line_string_literal
|
||||
interpolation:
|
||||
interpolated_expression
|
||||
value: simple_identifier "name"
|
||||
text: line_str_text "hello "
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt: string_literal "\"hello \\(name)\""
|
||||
@@ -0,0 +1 @@
|
||||
"hello \(name)"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user