mirror of
https://github.com/github/codeql.git
synced 2026-07-28 22:36:50 +02:00
yeast: Order AST dump fields by schema-declared order
The AST dump previously emitted named fields in field-id order, which made it dependant on registration order and so it could differ between front-ends. We now emit them in the order declared in the node-types YAML instead, so that the order is kept stable.
This commit is contained in:
@@ -252,6 +252,41 @@ pub fn extend_schema_from_yaml(
|
||||
let yaml: YamlNodeTypes =
|
||||
serde_yaml::from_str(yaml_input).map_err(|e| format!("Failed to parse YAML: {e}"))?;
|
||||
apply_yaml_to_schema(&yaml, schema);
|
||||
// The typed `YamlNodeTypes` stores each node's fields in a `BTreeMap`
|
||||
// (alphabetical), losing the authored order. Re-parse as an ordered value to
|
||||
// record the declared field order for presentation (see the AST dump).
|
||||
record_field_order(schema, yaml_input)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Record each node kind's declared (named) field order from the source YAML,
|
||||
/// which `serde`'s `BTreeMap`-based deserialization does not preserve.
|
||||
/// `serde_yaml::Value` mappings keep insertion (source) order.
|
||||
fn record_field_order(schema: &mut crate::schema::Schema, yaml_input: &str) -> Result<(), String> {
|
||||
let value: serde_yaml::Value = serde_yaml::from_str(yaml_input)
|
||||
.map_err(|e| format!("Failed to parse YAML for field order: {e}"))?;
|
||||
let Some(named) = value.get("named").and_then(|v| v.as_mapping()) else {
|
||||
return Ok(());
|
||||
};
|
||||
for (node_name, fields) in named {
|
||||
let Some(node_name) = node_name.as_str() else {
|
||||
continue;
|
||||
};
|
||||
let Some(fields) = fields.as_mapping() else {
|
||||
continue; // node with no fields (null)
|
||||
};
|
||||
let mut order = Vec::new();
|
||||
for (raw_field_name, _) in fields {
|
||||
let Some(raw) = raw_field_name.as_str() else {
|
||||
continue;
|
||||
};
|
||||
// Skip the unnamed/`child` slot; the dump handles it separately.
|
||||
if let Some(name) = parse_field_name(raw).name {
|
||||
order.push(schema.register_field(&name));
|
||||
}
|
||||
}
|
||||
schema.set_field_order(node_name, order);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -44,6 +44,11 @@ pub struct Schema {
|
||||
field_types: BTreeMap<(String, FieldId), Vec<NodeType>>,
|
||||
field_cardinalities: BTreeMap<(String, FieldId), FieldCardinality>,
|
||||
supertypes: BTreeMap<String, Vec<NodeType>>,
|
||||
/// Per-node-kind declared field order (named fields only), as written in
|
||||
/// the source node-types YAML. Field ids are not a stable ordering key
|
||||
/// across front-ends, so this preserves the authored order for
|
||||
/// presentation (see the AST dump).
|
||||
field_order: BTreeMap<String, Vec<FieldId>>,
|
||||
}
|
||||
|
||||
impl Default for Schema {
|
||||
@@ -65,6 +70,7 @@ impl Schema {
|
||||
field_types: BTreeMap::new(),
|
||||
field_cardinalities: BTreeMap::new(),
|
||||
supertypes: BTreeMap::new(),
|
||||
field_order: BTreeMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -269,6 +275,17 @@ impl Schema {
|
||||
.get(&(parent_kind.to_string(), field_id))
|
||||
}
|
||||
|
||||
/// Record the declared (named) field order for a node kind, as authored in
|
||||
/// the source node-types YAML.
|
||||
pub fn set_field_order(&mut self, kind: &str, field_ids: Vec<FieldId>) {
|
||||
self.field_order.insert(kind.to_string(), field_ids);
|
||||
}
|
||||
|
||||
/// The declared (named) field order for a node kind, if known.
|
||||
pub fn field_order(&self, kind: &str) -> Option<&Vec<FieldId>> {
|
||||
self.field_order.get(kind)
|
||||
}
|
||||
|
||||
pub fn set_field_cardinality(
|
||||
&mut self,
|
||||
parent_kind: &str,
|
||||
|
||||
@@ -223,11 +223,45 @@ fn dump_node(
|
||||
|
||||
writeln!(out).unwrap();
|
||||
|
||||
// Named fields first
|
||||
for (&field_id, children) in &node.fields {
|
||||
if field_id == CHILD_FIELD {
|
||||
continue; // Handle unnamed children last
|
||||
// Named fields first, in the schema's declared order when available
|
||||
// (front-end-independent), else in field-id order. Any present fields not
|
||||
// covered by the declared order are appended in field-id order.
|
||||
//
|
||||
// The declared order lives in the validation schema, keyed by *its* field
|
||||
// ids; the AST being dumped may key the same field names under different
|
||||
// ids. So map the declared order through field NAMES into this AST's own id
|
||||
// space, keeping the two schemas independent (they share names, not ids).
|
||||
let named_field_ids: Vec<u16> = {
|
||||
let present: Vec<u16> = node
|
||||
.fields
|
||||
.keys()
|
||||
.copied()
|
||||
.filter(|&f| f != CHILD_FIELD)
|
||||
.collect();
|
||||
match type_check.and_then(|(schema, _, _)| {
|
||||
schema
|
||||
.field_order(node.kind_name())
|
||||
.map(|order| (schema, order))
|
||||
}) {
|
||||
Some((schema, order)) => {
|
||||
let mut result: Vec<u16> = order
|
||||
.iter()
|
||||
.filter_map(|&f| schema.field_name_for_id(f))
|
||||
.filter_map(|name| ast.field_id_for_name(name))
|
||||
.filter(|&f| f != CHILD_FIELD && node.fields.contains_key(&f))
|
||||
.collect();
|
||||
for &f in &present {
|
||||
if !result.contains(&f) {
|
||||
result.push(f);
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
None => present,
|
||||
}
|
||||
};
|
||||
for field_id in named_field_ids {
|
||||
let children = &node.fields[&field_id];
|
||||
let field_name = ast.field_name_for_id(field_id).unwrap_or("?");
|
||||
let child_type_check = type_check.map(|(schema, _, _)| {
|
||||
let expected =
|
||||
|
||||
@@ -51,6 +51,12 @@ top_level
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
capture_declaration:
|
||||
variable_declaration
|
||||
modifier: modifier "weak"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "self"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
@@ -61,9 +67,3 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "self"
|
||||
member: identifier "doThing"
|
||||
capture_declaration:
|
||||
variable_declaration
|
||||
modifier: modifier "weak"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "self"
|
||||
|
||||
@@ -55,23 +55,23 @@ top_level
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
parameter:
|
||||
parameter
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "*"
|
||||
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"
|
||||
|
||||
@@ -38,10 +38,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "$0"
|
||||
operator: infix_operator "+"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "$1"
|
||||
|
||||
@@ -75,6 +75,17 @@ top_level
|
||||
identifier: identifier "f"
|
||||
value:
|
||||
function_expr
|
||||
parameter:
|
||||
parameter
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
@@ -85,27 +96,16 @@ top_level
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "+"
|
||||
right: int_literal "1"
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
operator: infix_operator "*"
|
||||
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"
|
||||
|
||||
@@ -28,6 +28,12 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
member: identifier "map"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
@@ -36,14 +42,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "$0"
|
||||
operator: infix_operator "*"
|
||||
right: int_literal "2"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
member: identifier "map"
|
||||
|
||||
@@ -43,9 +43,9 @@ top_level
|
||||
identifier: identifier "v"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"key\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "d"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"key\""
|
||||
|
||||
@@ -43,9 +43,9 @@ top_level
|
||||
identifier: identifier "first"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
|
||||
@@ -60,27 +60,27 @@ top_level
|
||||
identifier: identifier "x"
|
||||
value: int_literal "1"
|
||||
switch_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"matched\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr:
|
||||
name_expr
|
||||
identifier: identifier "someConstant"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"matched\""
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt: break_expr "break"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
|
||||
@@ -33,17 +33,17 @@ top_level
|
||||
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"
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "value"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "optional"
|
||||
|
||||
@@ -53,20 +53,20 @@ top_level
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "+"
|
||||
right: int_literal "10"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
@@ -73,47 +73,47 @@ top_level
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
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"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
else:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "<"
|
||||
right: int_literal "0"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "2"
|
||||
else:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "3"
|
||||
|
||||
@@ -53,15 +53,30 @@ top_level
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "0"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
else:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
@@ -70,18 +85,3 @@ top_level
|
||||
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"
|
||||
|
||||
@@ -42,17 +42,17 @@ top_level
|
||||
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"
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "value"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "optional"
|
||||
@@ -60,11 +60,11 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "value"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
@@ -36,20 +36,20 @@ top_level
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "0"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
@@ -76,32 +76,25 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
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"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"one\""
|
||||
switch_case
|
||||
pattern:
|
||||
or_pattern
|
||||
pattern:
|
||||
@@ -109,17 +102,24 @@ top_level
|
||||
expr: int_literal "2"
|
||||
expr_equality_pattern
|
||||
expr: int_literal "3"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"two or three\""
|
||||
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"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"other\""
|
||||
|
||||
@@ -86,55 +86,55 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "shape"
|
||||
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
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "circle"
|
||||
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
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "s"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
identifier: identifier "r"
|
||||
switch_case
|
||||
pattern:
|
||||
constructor_pattern
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "square"
|
||||
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"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "s"
|
||||
|
||||
@@ -88,45 +88,40 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"yes\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "implicit"
|
||||
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"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"yes\""
|
||||
switch_case
|
||||
pattern:
|
||||
constructor_pattern
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "thread"
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "threadRowId"
|
||||
@@ -135,10 +130,15 @@ top_level
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "rowId"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "thread"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "rowId"
|
||||
|
||||
@@ -41,13 +41,13 @@ top_level
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "0"
|
||||
then: int_literal "1"
|
||||
else:
|
||||
unary_expr
|
||||
operand: int_literal "1"
|
||||
operator: prefix_operator "-"
|
||||
then: int_literal "1"
|
||||
|
||||
@@ -16,6 +16,6 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left: int_literal "1"
|
||||
operator: infix_operator "+"
|
||||
right: int_literal "2"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
operator: infix_operator "+"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "bar"
|
||||
|
||||
@@ -19,7 +19,6 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking.URLSession"
|
||||
imported_expr:
|
||||
member_access_expr
|
||||
base:
|
||||
@@ -29,3 +28,4 @@ top_level
|
||||
identifier: identifier "Foundation"
|
||||
member: identifier "Networking"
|
||||
member: identifier "URLSession"
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking.URLSession"
|
||||
|
||||
@@ -18,10 +18,10 @@ top_level
|
||||
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"
|
||||
pattern: bulk_importing_pattern "import Foundation.Networking"
|
||||
|
||||
@@ -20,12 +20,12 @@ top_level
|
||||
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"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "Date"
|
||||
|
||||
@@ -16,7 +16,7 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
import_declaration
|
||||
pattern: bulk_importing_pattern "import Foundation"
|
||||
imported_expr:
|
||||
name_expr
|
||||
identifier: identifier "Foundation"
|
||||
pattern: bulk_importing_pattern "import Foundation"
|
||||
|
||||
@@ -26,10 +26,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "greet"
|
||||
argument:
|
||||
argument
|
||||
name: identifier "person"
|
||||
value: string_literal "\"Bob\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "greet"
|
||||
|
||||
@@ -23,11 +23,11 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
argument
|
||||
value: int_literal "2"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "foo"
|
||||
|
||||
@@ -43,22 +43,22 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
name: identifier "greet"
|
||||
parameter:
|
||||
parameter
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "name"
|
||||
default: string_literal "\"world\""
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
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"
|
||||
|
||||
@@ -41,18 +41,6 @@ top_level
|
||||
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
|
||||
@@ -60,3 +48,15 @@ top_level
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "name"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "name"
|
||||
|
||||
@@ -30,14 +30,14 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
name: identifier "greet"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"hello\""
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
name: identifier "greet"
|
||||
argument:
|
||||
argument
|
||||
value: string_literal "\"hello\""
|
||||
|
||||
@@ -58,19 +58,6 @@ top_level
|
||||
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
|
||||
@@ -86,3 +73,16 @@ top_level
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "+"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -47,13 +47,6 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
name: identifier "identity"
|
||||
parameter:
|
||||
parameter
|
||||
@@ -64,3 +57,10 @@ top_level
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "T"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
|
||||
@@ -40,10 +40,10 @@ top_level
|
||||
identifier: identifier "y"
|
||||
value:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
member_access_expr
|
||||
base: inferred_type_expr ".some"
|
||||
member: identifier "some"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
|
||||
@@ -26,12 +26,12 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "list"
|
||||
member: identifier "append"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "1"
|
||||
|
||||
@@ -60,25 +60,6 @@ top_level
|
||||
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
|
||||
@@ -89,3 +70,22 @@ top_level
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
call_expr
|
||||
callee:
|
||||
member_access_expr
|
||||
base:
|
||||
name_expr
|
||||
identifier: identifier "values"
|
||||
member: identifier "reduce"
|
||||
argument:
|
||||
argument
|
||||
value: int_literal "0"
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "+"
|
||||
|
||||
@@ -59,16 +59,22 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
for_each_stmt
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
iterable:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator "<"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "<"
|
||||
right: int_literal "0"
|
||||
then:
|
||||
block
|
||||
@@ -76,26 +82,20 @@ top_level
|
||||
if_expr
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "100"
|
||||
then:
|
||||
block
|
||||
stmt: break_expr "break"
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
iterable:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
|
||||
@@ -36,18 +36,6 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
for_each_stmt
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
@@ -57,3 +45,15 @@ top_level
|
||||
int_literal "1"
|
||||
int_literal "2"
|
||||
int_literal "3"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
|
||||
@@ -35,23 +35,23 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
for_each_stmt
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "i"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "i"
|
||||
iterable:
|
||||
binary_expr
|
||||
operator: infix_operator "..<"
|
||||
left: int_literal "0"
|
||||
operator: infix_operator "..<"
|
||||
right: int_literal "10"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "i"
|
||||
|
||||
@@ -39,28 +39,28 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
for_each_stmt
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
iterable:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
guard:
|
||||
binary_expr
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "0"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
guard:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
iterable:
|
||||
name_expr
|
||||
identifier: identifier "xs"
|
||||
|
||||
@@ -35,15 +35,15 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
compound_assign_expr
|
||||
operator: infix_operator "-="
|
||||
target:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "-="
|
||||
value: int_literal "1"
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "0"
|
||||
|
||||
@@ -31,19 +31,19 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
while_stmt
|
||||
condition:
|
||||
binary_expr
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator ">"
|
||||
right: int_literal "0"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
compound_assign_expr
|
||||
operator: infix_operator "-="
|
||||
target:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "-="
|
||||
value: int_literal "1"
|
||||
condition:
|
||||
binary_expr
|
||||
operator: infix_operator ">"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "0"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "+"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "<"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "<"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "/"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "/"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "=="
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "=="
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "&&"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "&&"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "||"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "||"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "*"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -20,16 +20,16 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "+"
|
||||
right:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
operator: infix_operator "*"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "c"
|
||||
|
||||
@@ -24,8 +24,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left: tuple_expr "(a + b)"
|
||||
operator: infix_operator "*"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "c"
|
||||
|
||||
@@ -16,6 +16,6 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "..."
|
||||
left: int_literal "1"
|
||||
operator: infix_operator "..."
|
||||
right: int_literal "10"
|
||||
|
||||
@@ -16,10 +16,10 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
binary_expr
|
||||
operator: infix_operator "-"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "a"
|
||||
operator: infix_operator "-"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "b"
|
||||
|
||||
@@ -61,11 +61,11 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "error"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
@@ -31,8 +31,8 @@ top_level
|
||||
identifier: identifier "n"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "??"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "opt"
|
||||
operator: infix_operator "??"
|
||||
right: int_literal "0"
|
||||
|
||||
@@ -31,12 +31,12 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
function_declaration
|
||||
name: identifier "read"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "String"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value: string_literal "\"\""
|
||||
name: identifier "read"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "String"
|
||||
|
||||
@@ -67,34 +67,34 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
accessor_declaration
|
||||
modifier: modifier "var"
|
||||
name: identifier "p"
|
||||
accessor_kind: accessor_kind "get"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
switch_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value: int_literal "1"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr:
|
||||
name_expr
|
||||
identifier: identifier "someConstant"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value: int_literal "1"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value: int_literal "2"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
modifier: modifier "var"
|
||||
name: identifier "p"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
accessor_kind: accessor_kind "get"
|
||||
|
||||
@@ -69,6 +69,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "class"
|
||||
name: identifier "Point"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "var"
|
||||
@@ -92,5 +94,3 @@ top_level
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
modifier: modifier "class"
|
||||
name: identifier "Point"
|
||||
|
||||
@@ -44,6 +44,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "class"
|
||||
name: identifier "Counter"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "var"
|
||||
@@ -52,15 +54,13 @@ top_level
|
||||
identifier: identifier "n"
|
||||
value: int_literal "0"
|
||||
function_declaration
|
||||
name: identifier "bump"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
compound_assign_expr
|
||||
operator: infix_operator "+="
|
||||
target:
|
||||
name_expr
|
||||
identifier: identifier "n"
|
||||
operator: infix_operator "+="
|
||||
value: int_literal "1"
|
||||
name: identifier "bump"
|
||||
modifier: modifier "class"
|
||||
name: identifier "Counter"
|
||||
|
||||
@@ -57,6 +57,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "class"
|
||||
name: identifier "Point"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "var"
|
||||
@@ -74,5 +76,3 @@ top_level
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
modifier: modifier "class"
|
||||
name: identifier "Point"
|
||||
|
||||
@@ -88,6 +88,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "class"
|
||||
name: identifier "Rect"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "var"
|
||||
@@ -106,24 +108,22 @@ top_level
|
||||
named_type_expr
|
||||
name: identifier "Double"
|
||||
accessor_declaration
|
||||
modifier: modifier "var"
|
||||
name: identifier "area"
|
||||
accessor_kind: accessor_kind "get"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Double"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "w"
|
||||
operator: infix_operator "*"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "h"
|
||||
modifier: modifier "var"
|
||||
name: identifier "area"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Double"
|
||||
accessor_kind: accessor_kind "get"
|
||||
modifier: modifier "class"
|
||||
name: identifier "Rect"
|
||||
|
||||
@@ -53,34 +53,34 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "enum"
|
||||
name: identifier "Shape"
|
||||
member:
|
||||
class_like_declaration
|
||||
modifier: modifier "enum_case"
|
||||
name: identifier "circle"
|
||||
member:
|
||||
constructor_declaration
|
||||
body: block "circle(radius: Double)"
|
||||
parameter:
|
||||
parameter
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Double"
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "radius"
|
||||
body: block "circle(radius: Double)"
|
||||
class_like_declaration
|
||||
modifier: modifier "enum_case"
|
||||
name: identifier "square"
|
||||
member:
|
||||
constructor_declaration
|
||||
parameter:
|
||||
parameter
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Double"
|
||||
modifier: modifier "enum_case"
|
||||
name: identifier "circle"
|
||||
class_like_declaration
|
||||
member:
|
||||
constructor_declaration
|
||||
body: block "square(side: Double)"
|
||||
parameter:
|
||||
parameter
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "side"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Double"
|
||||
modifier: modifier "enum_case"
|
||||
name: identifier "square"
|
||||
modifier: modifier "enum"
|
||||
name: identifier "Shape"
|
||||
body: block "square(side: Double)"
|
||||
|
||||
@@ -39,6 +39,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "enum"
|
||||
name: identifier "Direction"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "enum_case"
|
||||
@@ -60,5 +62,3 @@ top_level
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "west"
|
||||
modifier: modifier "enum"
|
||||
name: identifier "Direction"
|
||||
|
||||
@@ -30,6 +30,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "enum"
|
||||
name: identifier "Suit"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "enum_case"
|
||||
@@ -57,5 +59,3 @@ top_level
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "spades"
|
||||
modifier: modifier "enum"
|
||||
name: identifier "Suit"
|
||||
|
||||
@@ -45,24 +45,24 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "extension"
|
||||
name: identifier "Int"
|
||||
member:
|
||||
function_declaration
|
||||
name: identifier "squared"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
return_expr
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "*"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "self"
|
||||
operator: infix_operator "*"
|
||||
right:
|
||||
name_expr
|
||||
identifier: identifier "self"
|
||||
name: identifier "squared"
|
||||
return_type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
modifier: modifier "extension"
|
||||
name: identifier "Int"
|
||||
|
||||
@@ -80,6 +80,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "class"
|
||||
name: identifier "Box"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "var"
|
||||
@@ -88,6 +90,12 @@ top_level
|
||||
identifier: identifier "_v"
|
||||
value: int_literal "0"
|
||||
accessor_declaration
|
||||
modifier: modifier "var"
|
||||
name: identifier "v"
|
||||
accessor_kind: accessor_kind "get"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
@@ -95,13 +103,15 @@ top_level
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "_v"
|
||||
modifier: modifier "var"
|
||||
accessor_declaration
|
||||
modifier:
|
||||
modifier "var"
|
||||
modifier "chained_declaration"
|
||||
name: identifier "v"
|
||||
accessor_kind: accessor_kind "set"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
accessor_kind: accessor_kind "get"
|
||||
accessor_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
@@ -112,13 +122,3 @@ top_level
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "newValue"
|
||||
modifier:
|
||||
modifier "var"
|
||||
modifier "chained_declaration"
|
||||
name: identifier "v"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
accessor_kind: accessor_kind "set"
|
||||
modifier: modifier "class"
|
||||
name: identifier "Box"
|
||||
|
||||
@@ -21,9 +21,9 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
member:
|
||||
function_declaration
|
||||
body: block "func draw()"
|
||||
name: identifier "draw"
|
||||
modifier: modifier "protocol"
|
||||
name: identifier "Drawable"
|
||||
member:
|
||||
function_declaration
|
||||
name: identifier "draw"
|
||||
body: block "func draw()"
|
||||
|
||||
@@ -61,25 +61,25 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "protocol"
|
||||
name: identifier "P"
|
||||
member:
|
||||
accessor_declaration
|
||||
name: identifier "foo"
|
||||
accessor_kind: accessor_kind "get"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
accessor_kind: accessor_kind "get"
|
||||
accessor_declaration
|
||||
name: identifier "bar"
|
||||
accessor_kind: accessor_kind "get"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "String"
|
||||
accessor_kind: accessor_kind "get"
|
||||
accessor_declaration
|
||||
modifier: modifier "chained_declaration"
|
||||
name: identifier "bar"
|
||||
accessor_kind: accessor_kind "set"
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "String"
|
||||
accessor_kind: accessor_kind "set"
|
||||
modifier: modifier "protocol"
|
||||
name: identifier "P"
|
||||
|
||||
@@ -57,6 +57,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "struct"
|
||||
name: identifier "Point"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "let"
|
||||
@@ -74,5 +76,3 @@ top_level
|
||||
type:
|
||||
named_type_expr
|
||||
name: identifier "Int"
|
||||
modifier: modifier "struct"
|
||||
name: identifier "Point"
|
||||
|
||||
@@ -44,20 +44,20 @@ top_level
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
switch_expr
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
case:
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt: int_literal "1"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr:
|
||||
name_expr
|
||||
identifier: identifier "someConstant"
|
||||
body:
|
||||
block
|
||||
stmt: int_literal "1"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
stmt: int_literal "2"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "y"
|
||||
|
||||
@@ -18,8 +18,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
compound_assign_expr
|
||||
operator: infix_operator "+="
|
||||
target:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
operator: infix_operator "+="
|
||||
value: int_literal "1"
|
||||
|
||||
@@ -72,6 +72,8 @@ top_level
|
||||
block
|
||||
stmt:
|
||||
class_like_declaration
|
||||
modifier: modifier "class"
|
||||
name: identifier "C"
|
||||
member:
|
||||
variable_declaration
|
||||
modifier: modifier "var"
|
||||
@@ -83,40 +85,38 @@ top_level
|
||||
name: identifier "Int"
|
||||
value: int_literal "0"
|
||||
accessor_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "newValue"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
modifier:
|
||||
modifier "var"
|
||||
modifier "chained_declaration"
|
||||
name: identifier "x"
|
||||
accessor_kind: accessor_kind "willSet"
|
||||
accessor_declaration
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "oldValue"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
identifier: identifier "newValue"
|
||||
accessor_declaration
|
||||
modifier:
|
||||
modifier "var"
|
||||
modifier "chained_declaration"
|
||||
name: identifier "x"
|
||||
accessor_kind: accessor_kind "didSet"
|
||||
modifier: modifier "class"
|
||||
name: identifier "C"
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "oldValue"
|
||||
|
||||
Reference in New Issue
Block a user