Kevin Newton 2023-11-20 21:38:03 -05:00 коммит произвёл git
Родитель 73d519ec46
Коммит 9fa524dd41
45 изменённых файлов: 247 добавлений и 135 удалений

Просмотреть файл

@ -768,6 +768,26 @@ nodes:
foo => [bar => baz]
^^^^^^^^^^^^
- name: CaseMatchNode
fields:
- name: predicate
type: node?
- name: conditions
type: node[]
- name: consequent
type: node?
kind: ElseNode
- name: case_keyword_loc
type: location
- name: end_keyword_loc
type: location
comment: |
Represents the use of a case statement for pattern matching.
case true
in false
end
^^^^^^^^^
- name: CaseNode
fields:
- name: predicate

Просмотреть файл

@ -87,6 +87,7 @@ static const char* const diagnostic_messages[PM_DIAGNOSTIC_ID_LEN] = {
[PM_ERR_CANNOT_PARSE_STRING_PART] = "Cannot parse the string part",
[PM_ERR_CASE_EXPRESSION_AFTER_CASE] = "Expected an expression after `case`",
[PM_ERR_CASE_EXPRESSION_AFTER_WHEN] = "Expected an expression after `when`",
[PM_ERR_CASE_MATCH_MISSING_PREDICATE] = "Expected a predicate for a case matching statement",
[PM_ERR_CASE_MISSING_CONDITIONS] = "Expected a `when` or `in` clause after `case`",
[PM_ERR_CASE_TERM] = "Expected an `end` to close the `case` statement",
[PM_ERR_CLASS_IN_METHOD] = "Unexpected class definition in a method body",

Просмотреть файл

@ -73,6 +73,7 @@ typedef enum {
PM_ERR_CANNOT_PARSE_STRING_PART,
PM_ERR_CASE_EXPRESSION_AFTER_CASE,
PM_ERR_CASE_EXPRESSION_AFTER_WHEN,
PM_ERR_CASE_MATCH_MISSING_PREDICATE,
PM_ERR_CASE_MISSING_CONDITIONS,
PM_ERR_CASE_TERM,
PM_ERR_CLASS_IN_METHOD,

Просмотреть файл

@ -2113,7 +2113,7 @@ pm_capture_pattern_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t
* Allocate and initialize a new CaseNode node.
*/
static pm_case_node_t *
pm_case_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node_t *predicate, pm_else_node_t *consequent, const pm_token_t *end_keyword) {
pm_case_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node_t *predicate, const pm_token_t *end_keyword) {
pm_case_node_t *node = PM_ALLOC_NODE(parser, pm_case_node_t);
*node = (pm_case_node_t) {
@ -2125,7 +2125,7 @@ pm_case_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node
},
},
.predicate = predicate,
.consequent = consequent,
.consequent = NULL,
.case_keyword_loc = PM_LOCATION_TOKEN_VALUE(case_keyword),
.end_keyword_loc = PM_LOCATION_TOKEN_VALUE(end_keyword),
.conditions = { 0 }
@ -2139,7 +2139,7 @@ pm_case_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node
*/
static void
pm_case_node_condition_append(pm_case_node_t *node, pm_node_t *condition) {
assert(PM_NODE_TYPE_P(condition, PM_WHEN_NODE) || PM_NODE_TYPE_P(condition, PM_IN_NODE));
assert(PM_NODE_TYPE_P(condition, PM_WHEN_NODE));
pm_node_list_append(&node->conditions, condition);
node->base.location.end = condition->location.end;
@ -2163,6 +2163,60 @@ pm_case_node_end_keyword_loc_set(pm_case_node_t *node, const pm_token_t *end_key
node->end_keyword_loc = PM_LOCATION_TOKEN_VALUE(end_keyword);
}
/**
* Allocate and initialize a new CaseMatchNode node.
*/
static pm_case_match_node_t *
pm_case_match_node_create(pm_parser_t *parser, const pm_token_t *case_keyword, pm_node_t *predicate, const pm_token_t *end_keyword) {
pm_case_match_node_t *node = PM_ALLOC_NODE(parser, pm_case_match_node_t);
*node = (pm_case_match_node_t) {
{
.type = PM_CASE_MATCH_NODE,
.location = {
.start = case_keyword->start,
.end = end_keyword->end
},
},
.predicate = predicate,
.consequent = NULL,
.case_keyword_loc = PM_LOCATION_TOKEN_VALUE(case_keyword),
.end_keyword_loc = PM_LOCATION_TOKEN_VALUE(end_keyword),
.conditions = { 0 }
};
return node;
}
/**
* Append a new condition to a CaseMatchNode node.
*/
static void
pm_case_match_node_condition_append(pm_case_match_node_t *node, pm_node_t *condition) {
assert(PM_NODE_TYPE_P(condition, PM_IN_NODE));
pm_node_list_append(&node->conditions, condition);
node->base.location.end = condition->location.end;
}
/**
* Set the consequent of a CaseMatchNode node.
*/
static void
pm_case_match_node_consequent_set(pm_case_match_node_t *node, pm_else_node_t *consequent) {
node->consequent = consequent;
node->base.location.end = consequent->base.location.end;
}
/**
* Set the end location for a CaseMatchNode node.
*/
static void
pm_case_match_node_end_keyword_loc_set(pm_case_match_node_t *node, const pm_token_t *end_keyword) {
node->base.location.end = end_keyword->end;
node->end_keyword_loc = PM_LOCATION_TOKEN_VALUE(end_keyword);
}
/**
* Allocate a new ClassNode node.
*/
@ -14190,15 +14244,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
if (accept1(parser, PM_TOKEN_KEYWORD_END)) {
pm_parser_err_token(parser, &case_keyword, PM_ERR_CASE_MISSING_CONDITIONS);
return (pm_node_t *) pm_case_node_create(parser, &case_keyword, predicate, NULL, &parser->previous);
return (pm_node_t *) pm_case_node_create(parser, &case_keyword, predicate, &parser->previous);
}
// At this point we can create a case node, though we don't yet know if it
// is a case-in or case-when node.
pm_token_t end_keyword = not_provided(parser);
pm_case_node_t *case_node = pm_case_node_create(parser, &case_keyword, predicate, NULL, &end_keyword);
pm_node_t *node;
if (match1(parser, PM_TOKEN_KEYWORD_WHEN)) {
pm_case_node_t *case_node = pm_case_node_create(parser, &case_keyword, predicate, &end_keyword);
// At this point we've seen a when keyword, so we know this is a
// case-when node. We will continue to parse the when nodes until we hit
// the end of the list.
@ -14238,7 +14294,23 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
pm_case_node_condition_append(case_node, (pm_node_t *) when_node);
}
// If we didn't parse any conditions (in or when) then we need
// to indicate that we have an error.
if (case_node->conditions.size == 0) {
pm_parser_err_token(parser, &case_keyword, PM_ERR_CASE_MISSING_CONDITIONS);
}
node = (pm_node_t *) case_node;
} else {
pm_case_match_node_t *case_node = pm_case_match_node_create(parser, &case_keyword, predicate, &end_keyword);
// If this is a case-match node (i.e., it is a pattern matching
// case statement) then we must have a predicate.
if (predicate == NULL) {
pm_parser_err_token(parser, &case_keyword, PM_ERR_CASE_MATCH_MISSING_PREDICATE);
}
// At this point we expect that we're parsing a case-in node. We will
// continue to parse the in nodes until we hit the end of the list.
while (match1(parser, PM_TOKEN_KEYWORD_IN)) {
@ -14292,14 +14364,16 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
// Now that we have the full pattern and statements, we can create the
// node and attach it to the case node.
pm_node_t *condition = (pm_node_t *) pm_in_node_create(parser, pattern, statements, &in_keyword, &then_keyword);
pm_case_node_condition_append(case_node, condition);
pm_case_match_node_condition_append(case_node, condition);
}
}
// If we didn't parse any conditions (in or when) then we need to
// indicate that we have an error.
if (case_node->conditions.size == 0) {
pm_parser_err_token(parser, &case_keyword, PM_ERR_CASE_MISSING_CONDITIONS);
// If we didn't parse any conditions (in or when) then we need
// to indicate that we have an error.
if (case_node->conditions.size == 0) {
pm_parser_err_token(parser, &case_keyword, PM_ERR_CASE_MISSING_CONDITIONS);
}
node = (pm_node_t *) case_node;
}
accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON);
@ -14313,12 +14387,21 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
else_node = pm_else_node_create(parser, &else_keyword, NULL, &parser->current);
}
pm_case_node_consequent_set(case_node, else_node);
if (PM_NODE_TYPE_P(node, PM_CASE_NODE)) {
pm_case_node_consequent_set((pm_case_node_t *) node, else_node);
} else {
pm_case_match_node_consequent_set((pm_case_match_node_t *) node, else_node);
}
}
expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CASE_TERM);
pm_case_node_end_keyword_loc_set(case_node, &parser->previous);
return (pm_node_t *) case_node;
if (PM_NODE_TYPE_P(node, PM_CASE_NODE)) {
pm_case_node_end_keyword_loc_set((pm_case_node_t *) node, &parser->previous);
} else {
pm_case_match_node_end_keyword_loc_set((pm_case_match_node_t *) node, &parser->previous);
}
return node;
}
case PM_TOKEN_KEYWORD_BEGIN: {
parser_lex(parser);

Просмотреть файл

@ -937,7 +937,7 @@ module Prism
end
def test_case_without_when_clauses_errors_on_else_clause
expected = CaseNode(
expected = CaseMatchNode(
SymbolNode(Location(), Location(), nil, "a"),
[],
ElseNode(Location(), nil, Location()),

Просмотреть файл

@ -201,6 +201,13 @@ module Prism
assert_location(CaseNode, "case foo; when bar; when baz; else; end")
end
def test_CaseMatchNode
assert_location(CaseMatchNode, "case foo; in bar; end")
assert_location(CaseMatchNode, "case foo; in bar; else; end")
assert_location(CaseMatchNode, "case foo; in bar; in baz; end")
assert_location(CaseMatchNode, "case foo; in bar; in baz; else; end")
end
def test_ClassNode
assert_location(ClassNode, "class Foo end")
assert_location(ClassNode, "class Foo < Bar; end")

Просмотреть файл

@ -306,7 +306,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (38,0)-(38,4) = "case"
│ └── end_keyword_loc: (38,21)-(38,24) = "end"
├── @ CaseNode (location: (40,0)-(42,3))
├── @ CaseMatchNode (location: (40,0)-(42,3))
│ ├── predicate:
│ │ @ MatchPredicateNode (location: (40,5)-(40,11))
│ │ ├── value:
@ -327,7 +327,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (40,0)-(40,4) = "case"
│ └── end_keyword_loc: (42,0)-(42,3) = "end"
└── @ CaseNode (location: (44,0)-(44,22))
└── @ CaseMatchNode (location: (44,0)-(44,22))
├── predicate:
│ @ MatchPredicateNode (location: (44,5)-(44,11))
│ ├── value:

Просмотреть файл

@ -2778,7 +2778,7 @@
│ │ ├── name: :bar
│ │ └── depth: 1
│ └── operator_loc: (125,4)-(125,6) = "in"
├── @ CaseNode (location: (127,0)-(127,25))
├── @ CaseMatchNode (location: (127,0)-(127,25))
│ ├── predicate:
│ │ @ CallNode (location: (127,5)-(127,8))
│ │ ├── receiver: ∅
@ -2802,7 +2802,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (127,0)-(127,4) = "case"
│ └── end_keyword_loc: (127,22)-(127,25) = "end"
├── @ CaseNode (location: (128,0)-(128,23))
├── @ CaseMatchNode (location: (128,0)-(128,23))
│ ├── predicate:
│ │ @ CallNode (location: (128,5)-(128,8))
│ │ ├── receiver: ∅
@ -2825,7 +2825,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (128,0)-(128,4) = "case"
│ └── end_keyword_loc: (128,20)-(128,23) = "end"
├── @ CaseNode (location: (129,0)-(129,25))
├── @ CaseMatchNode (location: (129,0)-(129,25))
│ ├── predicate:
│ │ @ CallNode (location: (129,5)-(129,8))
│ │ ├── receiver: ∅
@ -2847,7 +2847,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (129,0)-(129,4) = "case"
│ └── end_keyword_loc: (129,22)-(129,25) = "end"
├── @ CaseNode (location: (130,0)-(130,24))
├── @ CaseMatchNode (location: (130,0)-(130,24))
│ ├── predicate:
│ │ @ CallNode (location: (130,5)-(130,8))
│ │ ├── receiver: ∅
@ -2872,7 +2872,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (130,0)-(130,4) = "case"
│ └── end_keyword_loc: (130,21)-(130,24) = "end"
├── @ CaseNode (location: (131,0)-(131,24))
├── @ CaseMatchNode (location: (131,0)-(131,24))
│ ├── predicate:
│ │ @ CallNode (location: (131,5)-(131,8))
│ │ ├── receiver: ∅
@ -2897,7 +2897,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (131,0)-(131,4) = "case"
│ └── end_keyword_loc: (131,21)-(131,24) = "end"
├── @ CaseNode (location: (132,0)-(132,26))
├── @ CaseMatchNode (location: (132,0)-(132,26))
│ ├── predicate:
│ │ @ CallNode (location: (132,5)-(132,8))
│ │ ├── receiver: ∅
@ -2923,7 +2923,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (132,0)-(132,4) = "case"
│ └── end_keyword_loc: (132,23)-(132,26) = "end"
├── @ CaseNode (location: (133,0)-(133,29))
├── @ CaseMatchNode (location: (133,0)-(133,29))
│ ├── predicate:
│ │ @ CallNode (location: (133,5)-(133,8))
│ │ ├── receiver: ∅
@ -2949,7 +2949,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (133,0)-(133,4) = "case"
│ └── end_keyword_loc: (133,26)-(133,29) = "end"
├── @ CaseNode (location: (134,0)-(134,28))
├── @ CaseMatchNode (location: (134,0)-(134,28))
│ ├── predicate:
│ │ @ CallNode (location: (134,5)-(134,8))
│ │ ├── receiver: ∅
@ -2975,7 +2975,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (134,0)-(134,4) = "case"
│ └── end_keyword_loc: (134,25)-(134,28) = "end"
├── @ CaseNode (location: (135,0)-(135,27))
├── @ CaseMatchNode (location: (135,0)-(135,27))
│ ├── predicate:
│ │ @ CallNode (location: (135,5)-(135,8))
│ │ ├── receiver: ∅
@ -3002,7 +3002,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (135,0)-(135,4) = "case"
│ └── end_keyword_loc: (135,24)-(135,27) = "end"
├── @ CaseNode (location: (136,0)-(136,27))
├── @ CaseMatchNode (location: (136,0)-(136,27))
│ ├── predicate:
│ │ @ CallNode (location: (136,5)-(136,8))
│ │ ├── receiver: ∅
@ -3028,7 +3028,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (136,0)-(136,4) = "case"
│ └── end_keyword_loc: (136,24)-(136,27) = "end"
├── @ CaseNode (location: (137,0)-(137,29))
├── @ CaseMatchNode (location: (137,0)-(137,29))
│ ├── predicate:
│ │ @ CallNode (location: (137,5)-(137,8))
│ │ ├── receiver: ∅
@ -3054,7 +3054,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (137,0)-(137,4) = "case"
│ └── end_keyword_loc: (137,26)-(137,29) = "end"
├── @ CaseNode (location: (138,0)-(138,29))
├── @ CaseMatchNode (location: (138,0)-(138,29))
│ ├── predicate:
│ │ @ CallNode (location: (138,5)-(138,8))
│ │ ├── receiver: ∅
@ -3084,7 +3084,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (138,0)-(138,4) = "case"
│ └── end_keyword_loc: (138,26)-(138,29) = "end"
├── @ CaseNode (location: (139,0)-(139,29))
├── @ CaseMatchNode (location: (139,0)-(139,29))
│ ├── predicate:
│ │ @ CallNode (location: (139,5)-(139,8))
│ │ ├── receiver: ∅
@ -3114,7 +3114,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (139,0)-(139,4) = "case"
│ └── end_keyword_loc: (139,26)-(139,29) = "end"
├── @ CaseNode (location: (140,0)-(140,29))
├── @ CaseMatchNode (location: (140,0)-(140,29))
│ ├── predicate:
│ │ @ CallNode (location: (140,5)-(140,8))
│ │ ├── receiver: ∅
@ -3145,7 +3145,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (140,0)-(140,4) = "case"
│ └── end_keyword_loc: (140,26)-(140,29) = "end"
├── @ CaseNode (location: (141,0)-(141,29))
├── @ CaseMatchNode (location: (141,0)-(141,29))
│ ├── predicate:
│ │ @ CallNode (location: (141,5)-(141,8))
│ │ ├── receiver: ∅
@ -3176,7 +3176,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (141,0)-(141,4) = "case"
│ └── end_keyword_loc: (141,26)-(141,29) = "end"
├── @ CaseNode (location: (142,0)-(142,29))
├── @ CaseMatchNode (location: (142,0)-(142,29))
│ ├── predicate:
│ │ @ CallNode (location: (142,5)-(142,8))
│ │ ├── receiver: ∅
@ -3203,7 +3203,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (142,0)-(142,4) = "case"
│ └── end_keyword_loc: (142,26)-(142,29) = "end"
├── @ CaseNode (location: (143,0)-(143,29))
├── @ CaseMatchNode (location: (143,0)-(143,29))
│ ├── predicate:
│ │ @ CallNode (location: (143,5)-(143,8))
│ │ ├── receiver: ∅
@ -3230,7 +3230,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (143,0)-(143,4) = "case"
│ └── end_keyword_loc: (143,26)-(143,29) = "end"
├── @ CaseNode (location: (144,0)-(144,27))
├── @ CaseMatchNode (location: (144,0)-(144,27))
│ ├── predicate:
│ │ @ CallNode (location: (144,5)-(144,8))
│ │ ├── receiver: ∅
@ -3257,7 +3257,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (144,0)-(144,4) = "case"
│ └── end_keyword_loc: (144,24)-(144,27) = "end"
├── @ CaseNode (location: (145,0)-(145,25))
├── @ CaseMatchNode (location: (145,0)-(145,25))
│ ├── predicate:
│ │ @ CallNode (location: (145,5)-(145,8))
│ │ ├── receiver: ∅
@ -3279,7 +3279,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (145,0)-(145,4) = "case"
│ └── end_keyword_loc: (145,22)-(145,25) = "end"
├── @ CaseNode (location: (146,0)-(146,26))
├── @ CaseMatchNode (location: (146,0)-(146,26))
│ ├── predicate:
│ │ @ CallNode (location: (146,5)-(146,8))
│ │ ├── receiver: ∅
@ -3301,7 +3301,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (146,0)-(146,4) = "case"
│ └── end_keyword_loc: (146,23)-(146,26) = "end"
├── @ CaseNode (location: (147,0)-(147,26))
├── @ CaseMatchNode (location: (147,0)-(147,26))
│ ├── predicate:
│ │ @ CallNode (location: (147,5)-(147,8))
│ │ ├── receiver: ∅
@ -3323,7 +3323,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (147,0)-(147,4) = "case"
│ └── end_keyword_loc: (147,23)-(147,26) = "end"
├── @ CaseNode (location: (148,0)-(148,27))
├── @ CaseMatchNode (location: (148,0)-(148,27))
│ ├── predicate:
│ │ @ CallNode (location: (148,5)-(148,8))
│ │ ├── receiver: ∅
@ -3345,7 +3345,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (148,0)-(148,4) = "case"
│ └── end_keyword_loc: (148,24)-(148,27) = "end"
├── @ CaseNode (location: (149,0)-(149,30))
├── @ CaseMatchNode (location: (149,0)-(149,30))
│ ├── predicate:
│ │ @ CallNode (location: (149,5)-(149,8))
│ │ ├── receiver: ∅
@ -3368,7 +3368,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (149,0)-(149,4) = "case"
│ └── end_keyword_loc: (149,27)-(149,30) = "end"
├── @ CaseNode (location: (150,0)-(150,30))
├── @ CaseMatchNode (location: (150,0)-(150,30))
│ ├── predicate:
│ │ @ CallNode (location: (150,5)-(150,8))
│ │ ├── receiver: ∅
@ -3390,7 +3390,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (150,0)-(150,4) = "case"
│ └── end_keyword_loc: (150,27)-(150,30) = "end"
├── @ CaseNode (location: (151,0)-(151,34))
├── @ CaseMatchNode (location: (151,0)-(151,34))
│ ├── predicate:
│ │ @ CallNode (location: (151,5)-(151,8))
│ │ ├── receiver: ∅
@ -3412,7 +3412,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (151,0)-(151,4) = "case"
│ └── end_keyword_loc: (151,31)-(151,34) = "end"
├── @ CaseNode (location: (152,0)-(152,32))
├── @ CaseMatchNode (location: (152,0)-(152,32))
│ ├── predicate:
│ │ @ CallNode (location: (152,5)-(152,8))
│ │ ├── receiver: ∅
@ -3445,7 +3445,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (152,0)-(152,4) = "case"
│ └── end_keyword_loc: (152,29)-(152,32) = "end"
├── @ CaseNode (location: (154,0)-(154,32))
├── @ CaseMatchNode (location: (154,0)-(154,32))
│ ├── predicate:
│ │ @ CallNode (location: (154,5)-(154,8))
│ │ ├── receiver: ∅
@ -3481,7 +3481,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (154,0)-(154,4) = "case"
│ └── end_keyword_loc: (154,29)-(154,32) = "end"
├── @ CaseNode (location: (155,0)-(155,30))
├── @ CaseMatchNode (location: (155,0)-(155,30))
│ ├── predicate:
│ │ @ CallNode (location: (155,5)-(155,8))
│ │ ├── receiver: ∅
@ -3516,7 +3516,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (155,0)-(155,4) = "case"
│ └── end_keyword_loc: (155,27)-(155,30) = "end"
├── @ CaseNode (location: (156,0)-(156,32))
├── @ CaseMatchNode (location: (156,0)-(156,32))
│ ├── predicate:
│ │ @ CallNode (location: (156,5)-(156,8))
│ │ ├── receiver: ∅
@ -3550,7 +3550,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (156,0)-(156,4) = "case"
│ └── end_keyword_loc: (156,29)-(156,32) = "end"
├── @ CaseNode (location: (157,0)-(157,31))
├── @ CaseMatchNode (location: (157,0)-(157,31))
│ ├── predicate:
│ │ @ CallNode (location: (157,5)-(157,8))
│ │ ├── receiver: ∅
@ -3587,7 +3587,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (157,0)-(157,4) = "case"
│ └── end_keyword_loc: (157,28)-(157,31) = "end"
├── @ CaseNode (location: (158,0)-(158,31))
├── @ CaseMatchNode (location: (158,0)-(158,31))
│ ├── predicate:
│ │ @ CallNode (location: (158,5)-(158,8))
│ │ ├── receiver: ∅
@ -3624,7 +3624,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (158,0)-(158,4) = "case"
│ └── end_keyword_loc: (158,28)-(158,31) = "end"
├── @ CaseNode (location: (159,0)-(159,33))
├── @ CaseMatchNode (location: (159,0)-(159,33))
│ ├── predicate:
│ │ @ CallNode (location: (159,5)-(159,8))
│ │ ├── receiver: ∅
@ -3662,7 +3662,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (159,0)-(159,4) = "case"
│ └── end_keyword_loc: (159,30)-(159,33) = "end"
├── @ CaseNode (location: (160,0)-(160,36))
├── @ CaseMatchNode (location: (160,0)-(160,36))
│ ├── predicate:
│ │ @ CallNode (location: (160,5)-(160,8))
│ │ ├── receiver: ∅
@ -3700,7 +3700,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (160,0)-(160,4) = "case"
│ └── end_keyword_loc: (160,33)-(160,36) = "end"
├── @ CaseNode (location: (161,0)-(161,35))
├── @ CaseMatchNode (location: (161,0)-(161,35))
│ ├── predicate:
│ │ @ CallNode (location: (161,5)-(161,8))
│ │ ├── receiver: ∅
@ -3738,7 +3738,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (161,0)-(161,4) = "case"
│ └── end_keyword_loc: (161,32)-(161,35) = "end"
├── @ CaseNode (location: (162,0)-(162,34))
├── @ CaseMatchNode (location: (162,0)-(162,34))
│ ├── predicate:
│ │ @ CallNode (location: (162,5)-(162,8))
│ │ ├── receiver: ∅
@ -3777,7 +3777,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (162,0)-(162,4) = "case"
│ └── end_keyword_loc: (162,31)-(162,34) = "end"
├── @ CaseNode (location: (163,0)-(163,34))
├── @ CaseMatchNode (location: (163,0)-(163,34))
│ ├── predicate:
│ │ @ CallNode (location: (163,5)-(163,8))
│ │ ├── receiver: ∅
@ -3815,7 +3815,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (163,0)-(163,4) = "case"
│ └── end_keyword_loc: (163,31)-(163,34) = "end"
├── @ CaseNode (location: (164,0)-(164,36))
├── @ CaseMatchNode (location: (164,0)-(164,36))
│ ├── predicate:
│ │ @ CallNode (location: (164,5)-(164,8))
│ │ ├── receiver: ∅
@ -3853,7 +3853,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (164,0)-(164,4) = "case"
│ └── end_keyword_loc: (164,33)-(164,36) = "end"
├── @ CaseNode (location: (165,0)-(165,36))
├── @ CaseMatchNode (location: (165,0)-(165,36))
│ ├── predicate:
│ │ @ CallNode (location: (165,5)-(165,8))
│ │ ├── receiver: ∅
@ -3895,7 +3895,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (165,0)-(165,4) = "case"
│ └── end_keyword_loc: (165,33)-(165,36) = "end"
├── @ CaseNode (location: (166,0)-(166,36))
├── @ CaseMatchNode (location: (166,0)-(166,36))
│ ├── predicate:
│ │ @ CallNode (location: (166,5)-(166,8))
│ │ ├── receiver: ∅
@ -3937,7 +3937,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (166,0)-(166,4) = "case"
│ └── end_keyword_loc: (166,33)-(166,36) = "end"
├── @ CaseNode (location: (167,0)-(167,36))
├── @ CaseMatchNode (location: (167,0)-(167,36))
│ ├── predicate:
│ │ @ CallNode (location: (167,5)-(167,8))
│ │ ├── receiver: ∅
@ -3980,7 +3980,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (167,0)-(167,4) = "case"
│ └── end_keyword_loc: (167,33)-(167,36) = "end"
├── @ CaseNode (location: (168,0)-(168,36))
├── @ CaseMatchNode (location: (168,0)-(168,36))
│ ├── predicate:
│ │ @ CallNode (location: (168,5)-(168,8))
│ │ ├── receiver: ∅
@ -4023,7 +4023,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (168,0)-(168,4) = "case"
│ └── end_keyword_loc: (168,33)-(168,36) = "end"
├── @ CaseNode (location: (169,0)-(169,36))
├── @ CaseMatchNode (location: (169,0)-(169,36))
│ ├── predicate:
│ │ @ CallNode (location: (169,5)-(169,8))
│ │ ├── receiver: ∅
@ -4062,7 +4062,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (169,0)-(169,4) = "case"
│ └── end_keyword_loc: (169,33)-(169,36) = "end"
├── @ CaseNode (location: (170,0)-(170,36))
├── @ CaseMatchNode (location: (170,0)-(170,36))
│ ├── predicate:
│ │ @ CallNode (location: (170,5)-(170,8))
│ │ ├── receiver: ∅
@ -4101,7 +4101,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (170,0)-(170,4) = "case"
│ └── end_keyword_loc: (170,33)-(170,36) = "end"
├── @ CaseNode (location: (171,0)-(171,34))
├── @ CaseMatchNode (location: (171,0)-(171,34))
│ ├── predicate:
│ │ @ CallNode (location: (171,5)-(171,8))
│ │ ├── receiver: ∅
@ -4140,7 +4140,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (171,0)-(171,4) = "case"
│ └── end_keyword_loc: (171,31)-(171,34) = "end"
├── @ CaseNode (location: (172,0)-(172,32))
├── @ CaseMatchNode (location: (172,0)-(172,32))
│ ├── predicate:
│ │ @ CallNode (location: (172,5)-(172,8))
│ │ ├── receiver: ∅
@ -4174,7 +4174,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (172,0)-(172,4) = "case"
│ └── end_keyword_loc: (172,29)-(172,32) = "end"
├── @ CaseNode (location: (173,0)-(173,33))
├── @ CaseMatchNode (location: (173,0)-(173,33))
│ ├── predicate:
│ │ @ CallNode (location: (173,5)-(173,8))
│ │ ├── receiver: ∅
@ -4208,7 +4208,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (173,0)-(173,4) = "case"
│ └── end_keyword_loc: (173,30)-(173,33) = "end"
├── @ CaseNode (location: (174,0)-(174,33))
├── @ CaseMatchNode (location: (174,0)-(174,33))
│ ├── predicate:
│ │ @ CallNode (location: (174,5)-(174,8))
│ │ ├── receiver: ∅
@ -4242,7 +4242,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (174,0)-(174,4) = "case"
│ └── end_keyword_loc: (174,30)-(174,33) = "end"
├── @ CaseNode (location: (175,0)-(175,34))
├── @ CaseMatchNode (location: (175,0)-(175,34))
│ ├── predicate:
│ │ @ CallNode (location: (175,5)-(175,8))
│ │ ├── receiver: ∅
@ -4276,7 +4276,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (175,0)-(175,4) = "case"
│ └── end_keyword_loc: (175,31)-(175,34) = "end"
├── @ CaseNode (location: (176,0)-(176,37))
├── @ CaseMatchNode (location: (176,0)-(176,37))
│ ├── predicate:
│ │ @ CallNode (location: (176,5)-(176,8))
│ │ ├── receiver: ∅
@ -4311,7 +4311,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (176,0)-(176,4) = "case"
│ └── end_keyword_loc: (176,34)-(176,37) = "end"
├── @ CaseNode (location: (177,0)-(177,37))
├── @ CaseMatchNode (location: (177,0)-(177,37))
│ ├── predicate:
│ │ @ CallNode (location: (177,5)-(177,8))
│ │ ├── receiver: ∅
@ -4345,7 +4345,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (177,0)-(177,4) = "case"
│ └── end_keyword_loc: (177,34)-(177,37) = "end"
├── @ CaseNode (location: (178,0)-(178,41))
├── @ CaseMatchNode (location: (178,0)-(178,41))
│ ├── predicate:
│ │ @ CallNode (location: (178,5)-(178,8))
│ │ ├── receiver: ∅
@ -4379,7 +4379,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (178,0)-(178,4) = "case"
│ └── end_keyword_loc: (178,38)-(178,41) = "end"
├── @ CaseNode (location: (179,0)-(179,39))
├── @ CaseMatchNode (location: (179,0)-(179,39))
│ ├── predicate:
│ │ @ CallNode (location: (179,5)-(179,8))
│ │ ├── receiver: ∅

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(111,3))
└── body: (length: 28)
├── @ CaseNode (location: (1,0)-(3,3))
├── @ CaseMatchNode (location: (1,0)-(3,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (1,5)-(1,7))
│ │ ├── opening_loc: (1,5)-(1,6) = ":"
@ -34,7 +34,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (1,0)-(1,4) = "case"
│ └── end_keyword_loc: (3,0)-(3,3) = "end"
├── @ CaseNode (location: (5,0)-(7,3))
├── @ CaseMatchNode (location: (5,0)-(7,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (5,5)-(5,7))
│ │ ├── opening_loc: (5,5)-(5,6) = ":"
@ -64,7 +64,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (5,0)-(5,4) = "case"
│ └── end_keyword_loc: (7,0)-(7,3) = "end"
├── @ CaseNode (location: (9,0)-(11,3))
├── @ CaseMatchNode (location: (9,0)-(11,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (9,5)-(9,7))
│ │ ├── opening_loc: (9,5)-(9,6) = ":"
@ -96,7 +96,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (9,0)-(9,4) = "case"
│ └── end_keyword_loc: (11,0)-(11,3) = "end"
├── @ CaseNode (location: (13,0)-(15,3))
├── @ CaseMatchNode (location: (13,0)-(15,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (13,5)-(13,7))
│ │ ├── opening_loc: (13,5)-(13,6) = ":"
@ -126,7 +126,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (13,0)-(13,4) = "case"
│ └── end_keyword_loc: (15,0)-(15,3) = "end"
├── @ CaseNode (location: (17,0)-(19,3))
├── @ CaseMatchNode (location: (17,0)-(19,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (17,5)-(17,7))
│ │ ├── opening_loc: (17,5)-(17,6) = ":"
@ -158,7 +158,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (17,0)-(17,4) = "case"
│ └── end_keyword_loc: (19,0)-(19,3) = "end"
├── @ CaseNode (location: (21,0)-(23,3))
├── @ CaseMatchNode (location: (21,0)-(23,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (21,5)-(21,7))
│ │ ├── opening_loc: (21,5)-(21,6) = ":"
@ -181,7 +181,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (21,0)-(21,4) = "case"
│ └── end_keyword_loc: (23,0)-(23,3) = "end"
├── @ CaseNode (location: (25,0)-(27,3))
├── @ CaseMatchNode (location: (25,0)-(27,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (25,5)-(25,7))
│ │ ├── opening_loc: (25,5)-(25,6) = ":"
@ -204,7 +204,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (25,0)-(25,4) = "case"
│ └── end_keyword_loc: (27,0)-(27,3) = "end"
├── @ CaseNode (location: (29,0)-(31,3))
├── @ CaseMatchNode (location: (29,0)-(31,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (29,5)-(29,7))
│ │ ├── opening_loc: (29,5)-(29,6) = ":"
@ -227,7 +227,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (29,0)-(29,4) = "case"
│ └── end_keyword_loc: (31,0)-(31,3) = "end"
├── @ CaseNode (location: (33,0)-(35,3))
├── @ CaseMatchNode (location: (33,0)-(35,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (33,5)-(33,7))
│ │ ├── opening_loc: (33,5)-(33,6) = ":"
@ -252,7 +252,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (33,0)-(33,4) = "case"
│ └── end_keyword_loc: (35,0)-(35,3) = "end"
├── @ CaseNode (location: (37,0)-(39,3))
├── @ CaseMatchNode (location: (37,0)-(39,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (37,5)-(37,7))
│ │ ├── opening_loc: (37,5)-(37,6) = ":"
@ -270,7 +270,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (37,0)-(37,4) = "case"
│ └── end_keyword_loc: (39,0)-(39,3) = "end"
├── @ CaseNode (location: (41,0)-(43,3))
├── @ CaseMatchNode (location: (41,0)-(43,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (41,5)-(41,7))
│ │ ├── opening_loc: (41,5)-(41,6) = ":"
@ -295,7 +295,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (41,0)-(41,4) = "case"
│ └── end_keyword_loc: (43,0)-(43,3) = "end"
├── @ CaseNode (location: (45,0)-(47,3))
├── @ CaseMatchNode (location: (45,0)-(47,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (45,5)-(45,7))
│ │ ├── opening_loc: (45,5)-(45,6) = ":"
@ -317,7 +317,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (45,0)-(45,4) = "case"
│ └── end_keyword_loc: (47,0)-(47,3) = "end"
├── @ CaseNode (location: (49,0)-(51,3))
├── @ CaseMatchNode (location: (49,0)-(51,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (49,5)-(49,7))
│ │ ├── opening_loc: (49,5)-(49,6) = ":"
@ -356,7 +356,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (49,0)-(49,4) = "case"
│ └── end_keyword_loc: (51,0)-(51,3) = "end"
├── @ CaseNode (location: (53,0)-(55,3))
├── @ CaseMatchNode (location: (53,0)-(55,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (53,5)-(53,7))
│ │ ├── opening_loc: (53,5)-(53,6) = ":"
@ -396,7 +396,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (53,0)-(53,4) = "case"
│ └── end_keyword_loc: (55,0)-(55,3) = "end"
├── @ CaseNode (location: (57,0)-(59,3))
├── @ CaseMatchNode (location: (57,0)-(59,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (57,5)-(57,7))
│ │ ├── opening_loc: (57,5)-(57,6) = ":"
@ -421,7 +421,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (57,0)-(57,4) = "case"
│ └── end_keyword_loc: (59,0)-(59,3) = "end"
├── @ CaseNode (location: (61,0)-(63,3))
├── @ CaseMatchNode (location: (61,0)-(63,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (61,5)-(61,7))
│ │ ├── opening_loc: (61,5)-(61,6) = ":"
@ -461,7 +461,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (61,0)-(61,4) = "case"
│ └── end_keyword_loc: (63,0)-(63,3) = "end"
├── @ CaseNode (location: (65,0)-(67,3))
├── @ CaseMatchNode (location: (65,0)-(67,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (65,5)-(65,7))
│ │ ├── opening_loc: (65,5)-(65,6) = ":"
@ -501,7 +501,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (65,0)-(65,4) = "case"
│ └── end_keyword_loc: (67,0)-(67,3) = "end"
├── @ CaseNode (location: (69,0)-(71,3))
├── @ CaseMatchNode (location: (69,0)-(71,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (69,5)-(69,7))
│ │ ├── opening_loc: (69,5)-(69,6) = ":"
@ -552,7 +552,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (69,0)-(69,4) = "case"
│ └── end_keyword_loc: (71,0)-(71,3) = "end"
├── @ CaseNode (location: (73,0)-(75,3))
├── @ CaseMatchNode (location: (73,0)-(75,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (73,5)-(73,7))
│ │ ├── opening_loc: (73,5)-(73,6) = ":"
@ -605,7 +605,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (73,0)-(73,4) = "case"
│ └── end_keyword_loc: (75,0)-(75,3) = "end"
├── @ CaseNode (location: (77,0)-(79,3))
├── @ CaseMatchNode (location: (77,0)-(79,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (77,5)-(77,7))
│ │ ├── opening_loc: (77,5)-(77,6) = ":"
@ -635,7 +635,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (77,0)-(77,4) = "case"
│ └── end_keyword_loc: (79,0)-(79,3) = "end"
├── @ CaseNode (location: (81,0)-(83,3))
├── @ CaseMatchNode (location: (81,0)-(83,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (81,5)-(81,7))
│ │ ├── opening_loc: (81,5)-(81,6) = ":"
@ -691,7 +691,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (81,0)-(81,4) = "case"
│ └── end_keyword_loc: (83,0)-(83,3) = "end"
├── @ CaseNode (location: (85,0)-(87,3))
├── @ CaseMatchNode (location: (85,0)-(87,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (85,5)-(85,7))
│ │ ├── opening_loc: (85,5)-(85,6) = ":"
@ -714,7 +714,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (85,0)-(85,4) = "case"
│ └── end_keyword_loc: (87,0)-(87,3) = "end"
├── @ CaseNode (location: (89,0)-(91,3))
├── @ CaseMatchNode (location: (89,0)-(91,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (89,5)-(89,7))
│ │ ├── opening_loc: (89,5)-(89,6) = ":"
@ -752,7 +752,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (89,0)-(89,4) = "case"
│ └── end_keyword_loc: (91,0)-(91,3) = "end"
├── @ CaseNode (location: (93,0)-(95,3))
├── @ CaseMatchNode (location: (93,0)-(95,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (93,5)-(93,7))
│ │ ├── opening_loc: (93,5)-(93,6) = ":"
@ -790,7 +790,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (93,0)-(93,4) = "case"
│ └── end_keyword_loc: (95,0)-(95,3) = "end"
├── @ CaseNode (location: (97,0)-(99,3))
├── @ CaseMatchNode (location: (97,0)-(99,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (97,5)-(97,7))
│ │ ├── opening_loc: (97,5)-(97,6) = ":"
@ -811,7 +811,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (97,0)-(97,4) = "case"
│ └── end_keyword_loc: (99,0)-(99,3) = "end"
├── @ CaseNode (location: (101,0)-(103,3))
├── @ CaseMatchNode (location: (101,0)-(103,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (101,5)-(101,7))
│ │ ├── opening_loc: (101,5)-(101,6) = ":"
@ -837,7 +837,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (101,0)-(101,4) = "case"
│ └── end_keyword_loc: (103,0)-(103,3) = "end"
├── @ CaseNode (location: (105,0)-(107,3))
├── @ CaseMatchNode (location: (105,0)-(107,3))
│ ├── predicate:
│ │ @ SymbolNode (location: (105,5)-(105,7))
│ │ ├── opening_loc: (105,5)-(105,6) = ":"
@ -868,7 +868,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (105,0)-(105,4) = "case"
│ └── end_keyword_loc: (107,0)-(107,3) = "end"
└── @ CaseNode (location: (109,0)-(111,3))
└── @ CaseMatchNode (location: (109,0)-(111,3))
├── predicate:
│ @ SymbolNode (location: (109,5)-(109,7))
│ ├── opening_loc: (109,5)-(109,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ ArrayNode (location: (1,5)-(1,13))
│ ├── elements: (length: 2)

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ ArrayNode (location: (1,5)-(1,13))
│ ├── elements: (length: 2)

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ ConstantReadNode (location: (1,5)-(1,10))
│ └── name: :Array

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(6,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(6,3))
└── @ CaseMatchNode (location: (1,0)-(6,3))
├── predicate:
│ @ ConstantReadNode (location: (1,5)-(1,10))
│ └── name: :Array

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(3,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(3,3))
└── @ CaseMatchNode (location: (1,0)-(3,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(6,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(6,3))
└── @ CaseMatchNode (location: (1,0)-(6,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(6,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(6,3))
└── @ CaseMatchNode (location: (1,0)-(6,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ IntegerNode (location: (1,5)-(1,6))
│ └── flags: decimal

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ CallNode (location: (1,5)-(1,8))
│ ├── receiver: ∅

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ ArrayNode (location: (1,5)-(1,14))
│ ├── elements: (length: 3)

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ HashNode (location: (1,5)-(1,11))
│ ├── opening_loc: (1,5)-(1,6) = "{"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ HashNode (location: (1,5)-(1,11))
│ ├── opening_loc: (1,5)-(1,6) = "{"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ SymbolNode (location: (1,5)-(1,7))
│ ├── opening_loc: (1,5)-(1,6) = ":"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(4,3))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(4,3))
└── @ CaseMatchNode (location: (1,0)-(4,3))
├── predicate:
│ @ HashNode (location: (1,5)-(1,11))
│ ├── opening_loc: (1,5)-(1,6) = "{"

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(41,8))
└── body: (length: 4)
├── @ CaseNode (location: (1,0)-(33,3))
├── @ CaseMatchNode (location: (1,0)-(33,3))
│ ├── predicate:
│ │ @ CallNode (location: (1,5)-(1,8))
│ │ ├── receiver: ∅
@ -332,7 +332,7 @@
│ │ └── end_keyword_loc: (33,0)-(33,3) = "end"
│ ├── case_keyword_loc: (1,0)-(1,4) = "case"
│ └── end_keyword_loc: (33,0)-(33,3) = "end"
├── @ CaseNode (location: (34,0)-(36,3))
├── @ CaseMatchNode (location: (34,0)-(36,3))
│ ├── predicate:
│ │ @ CallNode (location: (34,5)-(34,8))
│ │ ├── receiver: ∅
@ -374,7 +374,7 @@
│ ├── consequent: ∅
│ ├── case_keyword_loc: (34,0)-(34,4) = "case"
│ └── end_keyword_loc: (36,0)-(36,3) = "end"
├── @ CaseNode (location: (37,0)-(40,3))
├── @ CaseMatchNode (location: (37,0)-(40,3))
│ ├── predicate:
│ │ @ CallNode (location: (37,5)-(37,8))
│ │ ├── receiver: ∅

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(14,1))
└── body: (length: 3)
├── @ CaseNode (location: (1,0)-(8,3))
├── @ CaseMatchNode (location: (1,0)-(8,3))
│ ├── predicate:
│ │ @ CallNode (location: (1,5)-(1,8))
│ │ ├── receiver: ∅

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,8)-(3,11))
└── body: (length: 1)
└── @ CaseNode (location: (1,8)-(3,11))
└── @ CaseMatchNode (location: (1,8)-(3,11))
├── predicate:
│ @ ArrayNode (location: (1,13)-(1,51))
│ ├── elements: (length: 3)

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(1,26))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(1,26))
└── @ CaseMatchNode (location: (1,0)-(1,26))
├── predicate:
│ @ IntegerNode (location: (1,5)-(1,6))
│ └── flags: decimal

Просмотреть файл

@ -3,7 +3,7 @@
└── statements:
@ StatementsNode (location: (1,0)-(1,29))
└── body: (length: 1)
└── @ CaseNode (location: (1,0)-(1,29))
└── @ CaseMatchNode (location: (1,0)-(1,29))
├── predicate:
│ @ IntegerNode (location: (1,5)-(1,6))
│ └── flags: decimal