unified: Bulk migrate all corpus tests to the new system

This commit is contained in:
Asger F
2026-06-29 13:49:02 +02:00
parent 3e1ca82cbf
commit 12bd3e2860
203 changed files with 5215 additions and 5464 deletions

View File

@@ -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"

View File

@@ -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"

View File

@@ -0,0 +1 @@
let f = { [weak self] in self?.doThing() }

View File

@@ -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"

View File

@@ -0,0 +1 @@
let f = { (x: Int) -> Int in x * 2 }

View File

@@ -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"

View File

@@ -0,0 +1 @@
let f = { $0 + $1 }

View File

@@ -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"

View File

@@ -0,0 +1,4 @@
let f = { (x: Int) -> Int in
let y = x + 1
return y * 2
}

View File

@@ -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"

View File

@@ -0,0 +1 @@
xs.map { $0 * 2 }

View File

@@ -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"

View File

@@ -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"

View File

@@ -0,0 +1 @@
let xs = [1, 2, 3]

View File

@@ -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]"

View File

@@ -0,0 +1 @@
let d = ["a": 1, "b": 2]

View File

@@ -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"

View File

@@ -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"]

View File

@@ -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 "[]"

View File

@@ -0,0 +1 @@
let xs: [Int] = []

View File

@@ -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"

View File

@@ -0,0 +1 @@
let s: Set<Int> = [1, 2, 3]

View File

@@ -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"

View File

@@ -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]

View File

@@ -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)"

View File

@@ -0,0 +1 @@
let t = (1, "two", 3.0)

View File

@@ -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"

View File

@@ -0,0 +1 @@
let n = t.0

View File

@@ -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"

View File

@@ -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"

View File

@@ -0,0 +1 @@
guard let value = optional else { return }

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
if case let x = x + 10 {
print(x)
}

View File

@@ -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"

View File

@@ -0,0 +1,7 @@
if x > 0 {
print(1)
} else if x < 0 {
print(2)
} else {
print(3)
}

View File

@@ -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"

View File

@@ -0,0 +1,5 @@
if x > 0 {
print(x)
} else {
print(-x)
}

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
if let value = optional {
print(value)
}

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
if x > 0 {
print(x)
}

View File

@@ -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"

View File

@@ -0,0 +1,8 @@
switch x {
case 1:
print("one")
case 2, 3:
print("two or three")
default:
print("other")
}

View File

@@ -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"

View File

@@ -0,0 +1,6 @@
switch shape {
case .circle(let r):
print(r)
case .square(let s):
print(s)
}

View File

@@ -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"

View File

@@ -0,0 +1,6 @@
switch x {
case .implicit(isAcknowledged: false):
print("yes")
case .thread(threadRowId: _, let rowId):
print(rowId)
}

View File

@@ -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"

View File

@@ -0,0 +1 @@
let y = x > 0 ? 1 : -1

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -0,0 +1 @@
import Foundation.Networking.URLSession

View File

@@ -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"

View File

@@ -0,0 +1 @@
import Foundation.Networking

View File

@@ -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"

View File

@@ -0,0 +1 @@
import struct Foundation.Date

View File

@@ -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"

View File

@@ -0,0 +1 @@
import Foundation

View File

@@ -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"

View File

@@ -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"

View File

@@ -0,0 +1 @@
greet(person: "Bob")

View File

@@ -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"

View File

@@ -0,0 +1 @@
foo(1, 2)

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
func greet(name: String = "world") {
print(name)
}

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
func greet(person name: String) {
print(name)
}

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
func greet() {
print("hello")
}

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
func identity<T>(_ x: T) -> T {
return x
}

View File

@@ -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"

View File

@@ -0,0 +1 @@
let y = .some(1)

View File

@@ -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"

View File

@@ -0,0 +1 @@
let x = .foo

View File

@@ -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"

View File

@@ -0,0 +1 @@
list.append(1)

View File

@@ -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"

View File

@@ -0,0 +1,3 @@
func sum(_ values: Int...) -> Int {
return values.reduce(0, +)
}

View File

@@ -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)\""

View File

@@ -0,0 +1,18 @@
true
false
---
source_file
statement:
boolean_literal
boolean_literal
---
top_level
body:
block
stmt:
boolean_literal "true"
boolean_literal "false"

View File

@@ -0,0 +1,2 @@
true
false

View File

@@ -0,0 +1,13 @@
3.14
---
source_file
statement: real_literal "3.14"
---
top_level
body:
block
stmt: float_literal "3.14"

View File

@@ -0,0 +1,13 @@
42
---
source_file
statement: integer_literal "42"
---
top_level
body:
block
stmt: int_literal "42"

View File

@@ -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 "-"

View File

@@ -0,0 +1,13 @@
nil
---
source_file
statement: nil
---
top_level
body:
block
stmt: builtin_expr "nil"

View File

@@ -0,0 +1 @@
nil

View File

@@ -0,0 +1,15 @@
"hello"
---
source_file
statement:
line_string_literal
text: line_str_text "hello"
---
top_level
body:
block
stmt: string_literal "\"hello\""

View File

@@ -0,0 +1 @@
"hello"

View File

@@ -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)\""

View File

@@ -0,0 +1 @@
"hello \(name)"

Some files were not shown because too many files have changed in this diff Show More