Revert "Revert all of commits after Prism 0.19.0 release"

This reverts commit d242e8416e.
This commit is contained in:
Hiroshi SHIBATA 2023-12-25 17:34:06 +09:00
Родитель 12b69bf515
Коммит fa251d60aa
41 изменённых файлов: 141 добавлений и 98 удалений

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

@ -368,8 +368,8 @@ flags:
comment: Flags for integer nodes that correspond to the base of the integer.
- name: KeywordHashNodeFlags
values:
- name: STATIC_KEYS
comment: "a keyword hash which only has `AssocNode` elements all with static literal keys, which means the elements can be treated as keyword arguments"
- name: SYMBOL_KEYS
comment: "a keyword hash which only has `AssocNode` elements all with symbol keys, which means the elements can be treated as keyword arguments"
comment: Flags for keyword hash nodes.
- name: LoopFlags
values:

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

@ -62,6 +62,7 @@ static const char* const diagnostic_messages[PM_DIAGNOSTIC_ID_LEN] = {
[PM_ERR_ARGUMENT_FORMAL_GLOBAL] = "invalid formal argument; formal argument cannot be a global variable",
[PM_ERR_ARGUMENT_FORMAL_IVAR] = "invalid formal argument; formal argument cannot be an instance variable",
[PM_ERR_ARGUMENT_FORWARDING_UNBOUND] = "unexpected `...` in an non-parenthesized call",
[PM_ERR_ARGUMENT_IN] = "unexpected `in` keyword in arguments",
[PM_ERR_ARGUMENT_NO_FORWARDING_AMP] = "unexpected `&` when the parent method is not forwarding",
[PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES] = "unexpected `...` when the parent method is not forwarding",
[PM_ERR_ARGUMENT_NO_FORWARDING_STAR] = "unexpected `*` when the parent method is not forwarding",
@ -191,6 +192,7 @@ static const char* const diagnostic_messages[PM_DIAGNOSTIC_ID_LEN] = {
[PM_ERR_MODULE_TERM] = "expected an `end` to close the `module` statement",
[PM_ERR_MULTI_ASSIGN_MULTI_SPLATS] = "multiple splats in multiple assignment",
[PM_ERR_NOT_EXPRESSION] = "expected an expression after `not`",
[PM_ERR_NO_LOCAL_VARIABLE] = "%.*s: no such local variable",
[PM_ERR_NUMBER_LITERAL_UNDERSCORE] = "number literal ending with a `_`",
[PM_ERR_NUMBERED_PARAMETER_NOT_ALLOWED] = "numbered parameters are not allowed when an ordinary parameter is defined",
[PM_ERR_NUMBERED_PARAMETER_OUTER_SCOPE] = "numbered parameter is already used in outer scope",

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

@ -53,6 +53,7 @@ typedef enum {
PM_ERR_ARGUMENT_FORMAL_GLOBAL,
PM_ERR_ARGUMENT_FORMAL_IVAR,
PM_ERR_ARGUMENT_FORWARDING_UNBOUND,
PM_ERR_ARGUMENT_IN,
PM_ERR_ARGUMENT_NO_FORWARDING_AMP,
PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES,
PM_ERR_ARGUMENT_NO_FORWARDING_STAR,
@ -183,6 +184,7 @@ typedef enum {
PM_ERR_MODULE_TERM,
PM_ERR_MULTI_ASSIGN_MULTI_SPLATS,
PM_ERR_NOT_EXPRESSION,
PM_ERR_NO_LOCAL_VARIABLE,
PM_ERR_NUMBER_LITERAL_UNDERSCORE,
PM_ERR_NUMBERED_PARAMETER_NOT_ALLOWED,
PM_ERR_NUMBERED_PARAMETER_OUTER_SCOPE,

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

@ -17,12 +17,6 @@
#include <stdbool.h>
// TODO: remove this by renaming the original flag
/**
* Temporary alias for the PM_NODE_FLAG_STATIC_KEYS flag.
*/
#define PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS PM_KEYWORD_HASH_NODE_FLAGS_STATIC_KEYS
/**
* This enum provides various bits that represent different kinds of states that
* the lexer can track. This is used to determine which kind of token to return

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

@ -1340,6 +1340,11 @@ pm_assoc_node_create(pm_parser_t *parser, pm_node_t *key, const pm_token_t *oper
flags = key->flags & value->flags & PM_NODE_FLAG_STATIC_LITERAL;
}
// Hash string keys should be frozen
if (PM_NODE_TYPE_P(key, PM_STRING_NODE)) {
key->flags |= PM_STRING_FLAGS_FROZEN;
}
*node = (pm_assoc_node_t) {
{
.type = PM_ASSOC_NODE,
@ -11338,6 +11343,9 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for
}
parsed_bare_hash = true;
} else if (accept1(parser, PM_TOKEN_KEYWORD_IN)) {
// TODO: Could we solve this with binding powers instead?
pm_parser_err_current(parser, PM_ERR_ARGUMENT_IN);
}
parse_arguments_append(parser, arguments, argument);
@ -13349,8 +13357,15 @@ parse_pattern_primitive(pm_parser_t *parser, pm_diagnostic_id_t diag_id) {
// expression to determine if it's a variable or an expression.
switch (parser->current.type) {
case PM_TOKEN_IDENTIFIER: {
int depth = pm_parser_local_depth(parser, &parser->current);
if (depth == -1) {
depth = 0;
PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_NO_LOCAL_VARIABLE, (int) (parser->current.end - parser->current.start), parser->current.start);
}
pm_node_t *variable = (pm_node_t *) pm_local_variable_read_node_create(parser, &parser->current, (uint32_t) depth);
parser_lex(parser);
pm_node_t *variable = (pm_node_t *) pm_local_variable_read_node_create(parser, &parser->previous, 0);
return (pm_node_t *) pm_pinned_variable_node_create(parser, &operator, variable);
}
@ -17175,9 +17190,14 @@ parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool acc
static pm_node_t *
parse_program(pm_parser_t *parser) {
pm_parser_scope_push(parser, !parser->current_scope);
parser_lex(parser);
// If the current scope is NULL, then we want to push a new top level scope.
// The current scope could exist in the event that we are parsing an eval
// and the user has passed into scopes that already exist.
if (parser->current_scope == NULL) {
pm_parser_scope_push(parser, true);
}
parser_lex(parser);
pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_MAIN);
if (!statements) {
statements = pm_statements_node_create(parser);

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

@ -44,11 +44,11 @@ module Prism
<%- end -%>
class <%= node.name -%> < Node
<%- node.fields.each do |field| -%>
# attr_reader <%= field.name %>: <%= field.rbs_class %>
# <%= "private " if field.is_a?(Prism::FlagsField) %>attr_reader <%= field.name %>: <%= field.rbs_class %>
<%= "private " if field.is_a?(Prism::FlagsField) %>attr_reader :<%= field.name %>
<%- end -%>
# def initialize: (<%= (node.fields.map { |field| "#{field.name}: #{field.rbs_class}" } + ["location: Location"]).join(", ") %>) -> void
# def initialize: (<%= (node.fields.map { |field| "#{field.rbs_class} #{field.name}" } + ["Location location"]).join(", ") %>) -> void
def initialize(<%= (node.fields.map(&:name) + ["location"]).join(", ") %>)
<%- node.fields.each do |field| -%>
@<%= field.name %> = <%= field.name %>
@ -56,7 +56,7 @@ module Prism
@location = location
end
# def accept: (visitor: Visitor) -> void
# def accept: (Visitor visitor) -> void
def accept(visitor)
visitor.visit_<%= node.human %>(self)
end
@ -137,7 +137,7 @@ module Prism
# def deconstruct: () -> Array[nil | Node]
alias deconstruct child_nodes
# def deconstruct_keys: (keys: Array[Symbol]) -> Hash[Symbol, nil | Node | Array[Node] | String | Token | Array[Token] | Location]
# def deconstruct_keys: (Array[Symbol] keys) -> { <%= (node.fields.map { |field| "#{field.name}: #{field.rbs_class}" } + ["location: Location"]).join(", ") %> }
def deconstruct_keys(keys)
{ <%= (node.fields.map { |field| "#{field.name}: #{field.name}" } + ["location: location"]).join(", ") %> }
end
@ -170,7 +170,7 @@ module Prism
<%- end -%>
<%- end -%>
# def inspect(inspector: NodeInspector) -> String
# def inspect(NodeInspector inspector) -> String
def inspect(inspector = NodeInspector.new)
inspector << inspector.header(self)
<%- node.fields.each_with_index do |field, index| -%>

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

@ -1997,6 +1997,21 @@ module Prism
end
end
def test_command_call_in
source = <<~RUBY
foo 1 in a
a = foo 2 in b
RUBY
message1 = 'unexpected `in` keyword in arguments'
message2 = 'expected a newline or semicolon after the statement'
assert_errors expression(source), source, [
[message1, 9..10],
[message2, 8..8],
[message1, 24..25],
[message2, 23..23],
]
end
def test_constant_assignment_in_method
source = 'def foo();A=1;end'
assert_errors expression(source), source, [

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

@ -51,7 +51,7 @@ foo => __LINE__ .. __LINE__
foo => __ENCODING__ .. __ENCODING__
foo => -> { bar } .. -> { bar }
foo => ^bar
bar = 1; foo => ^bar
foo => ^@bar
foo => ^@@bar
foo => ^$bar

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

@ -673,7 +673,7 @@ module Prism
end
def test_PinnedVariableNode
assert_location(PinnedVariableNode, "foo in ^bar", 7...11, &:pattern)
assert_location(PinnedVariableNode, "bar = 1; foo in ^bar", 16...20, &:pattern)
end
def test_PostExecutionNode

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

@ -42,7 +42,9 @@ module Prism
assert_kind_of Prism::CallNode, Prism.parse("foo").value.statements.body[0]
assert_kind_of Prism::LocalVariableReadNode, Prism.parse("foo", scopes: [[:foo]]).value.statements.body[0]
assert_equal 2, Prism.parse("foo", scopes: [[:foo], []]).value.statements.body[0].depth
assert_equal 1, Prism.parse("foo", scopes: [[:foo], []]).value.statements.body[0].depth
assert_equal [:foo], Prism.parse("foo", scopes: [[:foo]]).value.locals
end
def test_literal_value_method

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

@ -79,7 +79,7 @@
│ ├── flags: ∅
│ ├── elements: (length: 1)
│ │ └── @ KeywordHashNode (location: (5,1)-(5,12))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (5,1)-(5,12))
│ │ ├── key:

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

@ -250,7 +250,7 @@
│ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1)
│ │ │ └── @ KeywordHashNode (location: (25,4)-(25,6))
│ │ │ ├── flags: static_keys
│ │ │ ├── flags: symbol_keys
│ │ │ └── elements: (length: 1)
│ │ │ └── @ AssocNode (location: (25,4)-(25,6))
│ │ │ ├── key:

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

@ -782,7 +782,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a"
│ │ └── @ KeywordHashNode (location: (60,8)-(60,32))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 2)
│ │ ├── @ AssocNode (location: (60,8)-(60,22))
│ │ │ ├── key:
@ -914,7 +914,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a"
│ │ └── @ KeywordHashNode (location: (64,8)-(64,15))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (64,8)-(64,15))
│ │ ├── key:
@ -983,7 +983,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (66,3)-(66,17))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (66,3)-(66,17))
│ │ ├── key:
@ -1173,7 +1173,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (74,3)-(74,20))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (74,3)-(74,20))
│ │ ├── key:
@ -1236,7 +1236,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "a"
│ │ └── @ KeywordHashNode (location: (82,0)-(82,5))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (82,0)-(82,5))
│ │ ├── key:
@ -1287,7 +1287,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (87,4)-(87,21))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 2)
│ │ ├── @ AssocNode (location: (87,4)-(87,11))
│ │ │ ├── key:
@ -1336,7 +1336,7 @@
│ │ ├── @ IntegerNode (location: (89,10)-(89,11))
│ │ │ └── flags: decimal
│ │ └── @ KeywordHashNode (location: (89,13)-(89,21))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (89,13)-(89,21))
│ │ ├── key:
@ -1527,7 +1527,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (103,4)-(103,11))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (103,4)-(103,11))
│ │ ├── key:
@ -1555,7 +1555,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (105,4)-(105,28))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (105,4)-(105,28))
│ │ ├── key:
@ -1612,7 +1612,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (107,4)-(107,24))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (107,4)-(107,24))
│ │ ├── key:

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

@ -2,7 +2,7 @@
├── locals: [:bar, :baz, :qux, :b, :a, :foo, :x]
└── statements:
@ StatementsNode (location: (1,0)-(202,19))
└── body: (length: 175)
└── body: (length: 176)
├── @ MatchRequiredNode (location: (1,0)-(1,10))
│ ├── value:
│ │ @ CallNode (location: (1,0)-(1,3))
@ -1235,26 +1235,34 @@
│ │ │ └── depth: 1
│ │ └── operator_loc: (52,18)-(52,20) = ".."
│ └── operator_loc: (52,4)-(52,6) = "=>"
├── @ MatchRequiredNode (location: (54,0)-(54,11))
├── @ LocalVariableWriteNode (location: (54,0)-(54,7))
│ ├── name: :bar
│ ├── depth: 0
│ ├── name_loc: (54,0)-(54,3) = "bar"
│ ├── value:
│ │ @ CallNode (location: (54,0)-(54,3))
│ │ @ IntegerNode (location: (54,6)-(54,7))
│ │ └── flags: decimal
│ └── operator_loc: (54,4)-(54,5) = "="
├── @ MatchRequiredNode (location: (54,9)-(54,20))
│ ├── value:
│ │ @ CallNode (location: (54,9)-(54,12))
│ │ ├── flags: variable_call
│ │ ├── receiver: ∅
│ │ ├── call_operator_loc: ∅
│ │ ├── name: :foo
│ │ ├── message_loc: (54,0)-(54,3) = "foo"
│ │ ├── message_loc: (54,9)-(54,12) = "foo"
│ │ ├── opening_loc: ∅
│ │ ├── arguments: ∅
│ │ ├── closing_loc: ∅
│ │ └── block: ∅
│ ├── pattern:
│ │ @ PinnedVariableNode (location: (54,7)-(54,11))
│ │ @ PinnedVariableNode (location: (54,16)-(54,20))
│ │ ├── variable:
│ │ │ @ LocalVariableReadNode (location: (54,8)-(54,11))
│ │ │ @ LocalVariableReadNode (location: (54,17)-(54,20))
│ │ │ ├── name: :bar
│ │ │ └── depth: 0
│ │ └── operator_loc: (54,7)-(54,8) = "^"
│ └── operator_loc: (54,4)-(54,6) = "=>"
│ │ └── operator_loc: (54,16)-(54,17) = "^"
│ └── operator_loc: (54,13)-(54,15) = "=>"
├── @ MatchRequiredNode (location: (55,0)-(55,12))
│ ├── value:
│ │ @ CallNode (location: (55,0)-(55,3))

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

@ -343,7 +343,7 @@
│ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1)
│ │ │ └── @ KeywordHashNode (location: (29,4)-(29,6))
│ │ │ ├── flags: static_keys
│ │ │ ├── flags: symbol_keys
│ │ │ └── elements: (length: 1)
│ │ │ └── @ AssocNode (location: (29,4)-(29,6))
│ │ │ ├── key:

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

@ -15,7 +15,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,2)-(1,5))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,2)-(1,5))
│ ├── key:

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

@ -66,7 +66,7 @@
│ │ ├── closing_loc: ∅
│ │ └── block: ∅
│ └── @ KeywordHashNode (location: (4,11)-(4,28))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (4,11)-(4,28))
│ ├── key:

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

@ -21,7 +21,7 @@
│ │ ├── closing_loc: ∅
│ │ └── unescaped: "bar"
│ └── @ KeywordHashNode (location: (1,10)-(1,18))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,10)-(1,18))
│ ├── key:

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

@ -21,7 +21,7 @@
│ │ ├── closing_loc: ∅
│ │ └── unescaped: "bar"
│ └── @ KeywordHashNode (location: (1,10)-(1,18))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,10)-(1,18))
│ ├── key:

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

@ -57,7 +57,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (3,2)-(3,8))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (3,2)-(3,8))
│ │ ├── key:
@ -85,7 +85,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (5,2)-(5,8))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (5,2)-(5,8))
│ ├── key:

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

@ -24,7 +24,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── unescaped: "b"
│ │ └── @ KeywordHashNode (location: (1,7)-(1,14))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,7)-(1,14))
│ │ ├── key:

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

@ -15,7 +15,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,2)-(1,5))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,2)-(1,5))
│ ├── key:

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

@ -15,7 +15,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,2)-(5,3))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,2)-(5,3))
│ ├── key:

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

@ -53,7 +53,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (2,2)-(2,6))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (2,2)-(2,6))
│ ├── key:

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

@ -15,7 +15,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (1,2)-(3,1))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,2)-(3,1))
│ │ ├── key:
@ -45,7 +45,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (5,2)-(6,1))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (5,2)-(6,1))
│ │ ├── key:
@ -75,7 +75,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (8,2)-(8,11))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (8,2)-(8,11))
│ ├── key:

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

@ -15,7 +15,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,5)-(1,12))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,5)-(1,12))
│ ├── key:

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

@ -12,7 +12,7 @@
│ ├── @ IntegerNode (location: (1,7)-(1,8))
│ │ └── flags: decimal
│ └── @ KeywordHashNode (location: (1,10)-(1,17))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,10)-(1,17))
│ ├── key:
@ -35,7 +35,7 @@
│ ├── @ IntegerNode (location: (3,7)-(3,8))
│ │ └── flags: decimal
│ └── @ KeywordHashNode (location: (3,10)-(3,26))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 2)
│ ├── @ AssocNode (location: (3,10)-(3,17))
│ │ ├── key:
@ -79,7 +79,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (5,9)-(5,14))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (5,9)-(5,14))
│ │ ├── key:
@ -113,7 +113,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (7,9)-(7,12))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (7,9)-(7,12))
│ │ ├── key:
@ -147,7 +147,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (9,9)-(9,12))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (9,9)-(9,12))
│ │ ├── key:

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

@ -13,7 +13,7 @@
│ │ ├── @ IntegerNode (location: (1,6)-(1,7))
│ │ │ └── flags: decimal
│ │ └── @ KeywordHashNode (location: (1,9)-(1,16))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,9)-(1,16))
│ │ ├── key:
@ -38,7 +38,7 @@
│ │ ├── @ IntegerNode (location: (3,6)-(3,7))
│ │ │ └── flags: decimal
│ │ └── @ KeywordHashNode (location: (3,9)-(3,25))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 2)
│ │ ├── @ AssocNode (location: (3,9)-(3,16))
│ │ │ ├── key:
@ -84,7 +84,7 @@
│ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1)
│ │ │ └── @ KeywordHashNode (location: (5,8)-(5,13))
│ │ │ ├── flags: static_keys
│ │ │ ├── flags: symbol_keys
│ │ │ └── elements: (length: 1)
│ │ │ └── @ AssocNode (location: (5,8)-(5,13))
│ │ │ ├── key:
@ -120,7 +120,7 @@
│ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1)
│ │ │ └── @ KeywordHashNode (location: (7,8)-(7,11))
│ │ │ ├── flags: static_keys
│ │ │ ├── flags: symbol_keys
│ │ │ └── elements: (length: 1)
│ │ │ └── @ AssocNode (location: (7,8)-(7,11))
│ │ │ ├── key:
@ -156,7 +156,7 @@
│ │ │ ├── flags: ∅
│ │ │ └── arguments: (length: 1)
│ │ │ └── @ KeywordHashNode (location: (9,8)-(9,11))
│ │ │ ├── flags: static_keys
│ │ │ ├── flags: symbol_keys
│ │ │ └── elements: (length: 1)
│ │ │ └── @ AssocNode (location: (9,8)-(9,11))
│ │ │ ├── key:

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

@ -9,7 +9,7 @@
│ │ ├── @ AssocNode (location: (1,2)-(1,21))
│ │ │ ├── key:
│ │ │ │ @ StringNode (location: (1,2)-(1,7))
│ │ │ │ ├── flags:
│ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: (1,2)-(1,3) = "\""
│ │ │ │ ├── content_loc: (1,3)-(1,6) = "foo"
│ │ │ │ ├── closing_loc: (1,6)-(1,7) = "\""
@ -39,7 +39,7 @@
│ │ └── @ AssocNode (location: (1,23)-(1,36))
│ │ ├── key:
│ │ │ @ StringNode (location: (1,23)-(1,28))
│ │ │ ├── flags:
│ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (1,23)-(1,24) = "\""
│ │ │ ├── content_loc: (1,24)-(1,27) = "bar"
│ │ │ ├── closing_loc: (1,27)-(1,28) = "\""
@ -59,7 +59,7 @@
│ │ ├── @ AssocNode (location: (4,2)-(4,14))
│ │ │ ├── key:
│ │ │ │ @ StringNode (location: (4,2)-(4,7))
│ │ │ │ ├── flags:
│ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: (4,2)-(4,3) = "\""
│ │ │ │ ├── content_loc: (4,3)-(4,6) = "foo"
│ │ │ │ ├── closing_loc: (4,6)-(4,7) = "\""
@ -75,7 +75,7 @@
│ │ └── @ AssocNode (location: (4,16)-(4,29))
│ │ ├── key:
│ │ │ @ StringNode (location: (4,16)-(4,21))
│ │ │ ├── flags:
│ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (4,16)-(4,17) = "\""
│ │ │ ├── content_loc: (4,17)-(4,20) = "bar"
│ │ │ ├── closing_loc: (4,20)-(4,21) = "\""
@ -184,7 +184,7 @@
│ │ ├── @ AssocNode (location: (10,2)-(10,21))
│ │ │ ├── key:
│ │ │ │ @ StringNode (location: (10,2)-(10,7))
│ │ │ │ ├── flags:
│ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: (10,2)-(10,3) = "\""
│ │ │ │ ├── content_loc: (10,3)-(10,6) = "foo"
│ │ │ │ ├── closing_loc: (10,6)-(10,7) = "\""
@ -231,7 +231,7 @@
│ │ ├── @ AssocNode (location: (13,2)-(13,14))
│ │ │ ├── key:
│ │ │ │ @ StringNode (location: (13,2)-(13,7))
│ │ │ │ ├── flags:
│ │ │ │ ├── flags: frozen
│ │ │ │ ├── opening_loc: (13,2)-(13,3) = "\""
│ │ │ │ ├── content_loc: (13,3)-(13,6) = "foo"
│ │ │ │ ├── closing_loc: (13,6)-(13,7) = "\""

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

@ -1249,7 +1249,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (63,8)-(63,16))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (63,8)-(63,16))
│ │ ├── key:
@ -1310,7 +1310,7 @@
│ │ └── @ AssocNode (location: (64,13)-(64,25))
│ │ ├── key:
│ │ │ @ StringNode (location: (64,13)-(64,18))
│ │ │ ├── flags:
│ │ │ ├── flags: frozen
│ │ │ ├── opening_loc: (64,13)-(64,14) = "\""
│ │ │ ├── content_loc: (64,14)-(64,17) = "baz"
│ │ │ ├── closing_loc: (64,17)-(64,18) = "\""
@ -1569,7 +1569,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (70,4)-(70,8))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (70,4)-(70,8))
│ │ ├── key:
@ -1615,7 +1615,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (71,6)-(71,10))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (71,6)-(71,10))
│ │ ├── key:

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

@ -25,7 +25,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── block: ∅
│ │ └── @ KeywordHashNode (location: (1,9)-(1,18))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,9)-(1,18))
│ │ ├── key:
@ -63,7 +63,7 @@
│ │ ├── closing_loc: ∅
│ │ └── block: ∅
│ └── @ KeywordHashNode (location: (3,9)-(3,18))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (3,9)-(3,18))
│ ├── key:

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

@ -35,7 +35,7 @@
│ │ ├── closing_loc: ∅
│ │ └── block: ∅
│ └── @ KeywordHashNode (location: (1,9)-(1,18))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,9)-(1,18))
│ ├── key:

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

@ -15,7 +15,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (1,4)-(1,13))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,4)-(1,13))
│ │ ├── key:
@ -43,7 +43,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (3,4)-(3,13))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (3,4)-(3,13))
│ │ ├── key:
@ -95,7 +95,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── block: ∅
│ │ └── @ KeywordHashNode (location: (5,14)-(5,21))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (5,14)-(5,21))
│ │ ├── key:
@ -124,7 +124,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (7,5)-(7,14))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (7,5)-(7,14))
│ │ ├── key:
@ -148,7 +148,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (9,6)-(9,16))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (9,6)-(9,16))
│ │ ├── key:
@ -172,7 +172,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (11,6)-(11,16))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (11,6)-(11,16))
│ ├── key:

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

@ -25,7 +25,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,4)-(1,13))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,4)-(1,13))
│ ├── key:

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

@ -15,7 +15,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (1,4)-(1,13))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,4)-(1,13))
│ │ ├── key:
@ -43,7 +43,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (3,4)-(3,13))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (3,4)-(3,13))
│ │ ├── key:
@ -95,7 +95,7 @@
│ │ │ ├── closing_loc: ∅
│ │ │ └── block: ∅
│ │ └── @ KeywordHashNode (location: (5,14)-(5,21))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (5,14)-(5,21))
│ │ ├── key:
@ -124,7 +124,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (7,5)-(7,14))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (7,5)-(7,14))
│ │ ├── key:
@ -148,7 +148,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (9,6)-(9,16))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (9,6)-(9,16))
│ │ ├── key:
@ -172,7 +172,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (11,6)-(11,16))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (11,6)-(11,16))
│ ├── key:

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

@ -15,7 +15,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (1,7)-(1,15))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,7)-(1,15))
│ │ ├── key:
@ -65,7 +65,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (5,2)-(5,26))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (5,2)-(5,26))
│ ├── key:

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

@ -15,7 +15,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,4)-(1,10))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 2)
│ ├── @ AssocNode (location: (1,4)-(1,6))
│ │ ├── key:

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

@ -93,7 +93,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (10,8)-(11,1))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (10,8)-(11,1))
│ │ ├── key:
@ -131,7 +131,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (13,8)-(14,1))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (13,8)-(14,1))
│ ├── key:

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

@ -15,7 +15,7 @@
│ ├── flags: ∅
│ └── arguments: (length: 1)
│ └── @ KeywordHashNode (location: (1,3)-(1,11))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,3)-(1,11))
│ ├── key:

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

@ -31,7 +31,7 @@
│ │ ├── closing_loc: ∅
│ │ └── unescaped: "hello"
│ └── @ KeywordHashNode (location: (1,17)-(1,21))
│ ├── flags: static_keys
│ ├── flags: symbol_keys
│ └── elements: (length: 1)
│ └── @ AssocNode (location: (1,17)-(1,21))
│ ├── key:

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

@ -23,7 +23,7 @@
│ │ ├── flags: ∅
│ │ └── arguments: (length: 1)
│ │ └── @ KeywordHashNode (location: (1,9)-(1,13))
│ │ ├── flags: static_keys
│ │ ├── flags: symbol_keys
│ │ └── elements: (length: 1)
│ │ └── @ AssocNode (location: (1,9)-(1,13))
│ │ ├── key: