prism 0.28.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +41 -1
- data/CONTRIBUTING.md +0 -4
- data/README.md +1 -0
- data/config.yml +95 -26
- data/docs/fuzzing.md +1 -1
- data/docs/ripper_translation.md +22 -0
- data/ext/prism/api_node.c +70 -52
- data/ext/prism/extconf.rb +27 -23
- data/ext/prism/extension.c +107 -372
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +170 -102
- data/include/prism/diagnostic.h +18 -3
- data/include/prism/node.h +0 -21
- data/include/prism/parser.h +23 -25
- data/include/prism/regexp.h +17 -8
- data/include/prism/static_literals.h +3 -2
- data/include/prism/util/pm_char.h +1 -2
- data/include/prism/util/pm_constant_pool.h +0 -8
- data/include/prism/util/pm_integer.h +16 -9
- data/include/prism/util/pm_string.h +0 -8
- data/include/prism/version.h +2 -2
- data/include/prism.h +0 -11
- data/lib/prism/compiler.rb +3 -0
- data/lib/prism/desugar_compiler.rb +4 -4
- data/lib/prism/dispatcher.rb +14 -0
- data/lib/prism/dot_visitor.rb +54 -35
- data/lib/prism/dsl.rb +23 -18
- data/lib/prism/ffi.rb +25 -4
- data/lib/prism/inspect_visitor.rb +26 -24
- data/lib/prism/mutation_compiler.rb +6 -1
- data/lib/prism/node.rb +314 -389
- data/lib/prism/node_ext.rb +175 -17
- data/lib/prism/parse_result/comments.rb +1 -8
- data/lib/prism/parse_result/newlines.rb +102 -12
- data/lib/prism/parse_result.rb +17 -0
- data/lib/prism/reflection.rb +11 -9
- data/lib/prism/serialize.rb +91 -68
- data/lib/prism/translation/parser/compiler.rb +288 -138
- data/lib/prism/translation/parser.rb +7 -2
- data/lib/prism/translation/ripper.rb +24 -22
- data/lib/prism/translation/ruby_parser.rb +32 -14
- data/lib/prism/visitor.rb +3 -0
- data/lib/prism.rb +0 -4
- data/prism.gemspec +2 -4
- data/rbi/prism/node.rbi +114 -57
- data/rbi/prism/node_ext.rbi +5 -0
- data/rbi/prism/parse_result.rbi +1 -1
- data/rbi/prism/visitor.rbi +3 -0
- data/rbi/prism.rbi +6 -0
- data/sig/prism/dsl.rbs +13 -10
- data/sig/prism/lex_compat.rbs +10 -0
- data/sig/prism/mutation_compiler.rbs +1 -0
- data/sig/prism/node.rbs +72 -48
- data/sig/prism/node_ext.rbs +4 -0
- data/sig/prism/visitor.rbs +1 -0
- data/sig/prism.rbs +21 -0
- data/src/diagnostic.c +56 -27
- data/src/node.c +432 -1690
- data/src/prettyprint.c +97 -54
- data/src/prism.c +1286 -1196
- data/src/regexp.c +133 -68
- data/src/serialize.c +22 -17
- data/src/static_literals.c +63 -84
- data/src/token_type.c +4 -4
- data/src/util/pm_constant_pool.c +0 -8
- data/src/util/pm_integer.c +39 -11
- data/src/util/pm_string.c +0 -12
- data/src/util/pm_strpbrk.c +32 -6
- metadata +3 -5
- data/include/prism/util/pm_string_list.h +0 -44
- data/lib/prism/debug.rb +0 -249
- data/src/util/pm_string_list.c +0 -28
data/include/prism/node.h
CHANGED
@@ -56,27 +56,6 @@ void pm_node_list_free(pm_node_list_t *list);
|
|
56
56
|
*/
|
57
57
|
PRISM_EXPORTED_FUNCTION void pm_node_destroy(pm_parser_t *parser, struct pm_node *node);
|
58
58
|
|
59
|
-
/**
|
60
|
-
* This struct stores the information gathered by the pm_node_memsize function.
|
61
|
-
* It contains both the memory footprint and additionally metadata about the
|
62
|
-
* shape of the tree.
|
63
|
-
*/
|
64
|
-
typedef struct {
|
65
|
-
/** The total memory footprint of the node and all of its children. */
|
66
|
-
size_t memsize;
|
67
|
-
|
68
|
-
/** The number of children the node has. */
|
69
|
-
size_t node_count;
|
70
|
-
} pm_memsize_t;
|
71
|
-
|
72
|
-
/**
|
73
|
-
* Calculates the memory footprint of a given node.
|
74
|
-
*
|
75
|
-
* @param node The node to calculate the memory footprint of.
|
76
|
-
* @param memsize The memory footprint of the node and all of its children.
|
77
|
-
*/
|
78
|
-
PRISM_EXPORTED_FUNCTION void pm_node_memsize(pm_node_t *node, pm_memsize_t *memsize);
|
79
|
-
|
80
59
|
/**
|
81
60
|
* Returns a string representation of the given node type.
|
82
61
|
*
|
data/include/prism/parser.h
CHANGED
@@ -546,6 +546,17 @@ typedef struct pm_locals {
|
|
546
546
|
pm_local_t *locals;
|
547
547
|
} pm_locals_t;
|
548
548
|
|
549
|
+
/** The flags about scope parameters that can be set. */
|
550
|
+
typedef uint8_t pm_scope_parameters_t;
|
551
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_NONE = 0x0;
|
552
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_FORWARDING_POSITIONALS = 0x1;
|
553
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_FORWARDING_KEYWORDS = 0x2;
|
554
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_FORWARDING_BLOCK = 0x4;
|
555
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_FORWARDING_ALL = 0x8;
|
556
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_IMPLICIT_DISALLOWED = 0x10;
|
557
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_NUMBERED_INNER = 0x20;
|
558
|
+
static const pm_scope_parameters_t PM_SCOPE_PARAMETERS_NUMBERED_FOUND = 0x40;
|
559
|
+
|
549
560
|
/**
|
550
561
|
* This struct represents a node in a linked list of scopes. Some scopes can see
|
551
562
|
* into their parent scopes, while others cannot.
|
@@ -557,10 +568,19 @@ typedef struct pm_scope {
|
|
557
568
|
/** The IDs of the locals in the given scope. */
|
558
569
|
pm_locals_t locals;
|
559
570
|
|
571
|
+
/**
|
572
|
+
* This is a list of the implicit parameters contained within the block.
|
573
|
+
* These will be processed after the block is parsed to determine the kind
|
574
|
+
* of parameters node that should be used and to check if any errors need to
|
575
|
+
* be added.
|
576
|
+
*/
|
577
|
+
pm_node_list_t implicit_parameters;
|
578
|
+
|
560
579
|
/**
|
561
580
|
* This is a bitfield that indicates the parameters that are being used in
|
562
|
-
* this scope. It is a combination of the
|
563
|
-
* are three different kinds of parameters that can be used in a
|
581
|
+
* this scope. It is a combination of the PM_SCOPE_PARAMETERS_* constants.
|
582
|
+
* There are three different kinds of parameters that can be used in a
|
583
|
+
* scope:
|
564
584
|
*
|
565
585
|
* - Ordinary parameters (e.g., def foo(bar); end)
|
566
586
|
* - Numbered parameters (e.g., def foo; _1; end)
|
@@ -575,15 +595,7 @@ typedef struct pm_scope {
|
|
575
595
|
* - def foo(&); end
|
576
596
|
* - def foo(...); end
|
577
597
|
*/
|
578
|
-
|
579
|
-
|
580
|
-
/**
|
581
|
-
* An integer indicating the number of numbered parameters on this scope.
|
582
|
-
* This is necessary to determine if child blocks are allowed to use
|
583
|
-
* numbered parameters, and to pass information to consumers of the AST
|
584
|
-
* about how many numbered parameters exist.
|
585
|
-
*/
|
586
|
-
int8_t numbered_parameters;
|
598
|
+
pm_scope_parameters_t parameters;
|
587
599
|
|
588
600
|
/**
|
589
601
|
* The current state of constant shareability for this scope. This is
|
@@ -598,20 +610,6 @@ typedef struct pm_scope {
|
|
598
610
|
bool closed;
|
599
611
|
} pm_scope_t;
|
600
612
|
|
601
|
-
static const uint8_t PM_SCOPE_PARAMETERS_NONE = 0x0;
|
602
|
-
static const uint8_t PM_SCOPE_PARAMETERS_ORDINARY = 0x1;
|
603
|
-
static const uint8_t PM_SCOPE_PARAMETERS_NUMBERED = 0x2;
|
604
|
-
static const uint8_t PM_SCOPE_PARAMETERS_IT = 0x4;
|
605
|
-
static const uint8_t PM_SCOPE_PARAMETERS_TYPE_MASK = 0x7;
|
606
|
-
|
607
|
-
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_POSITIONALS = 0x8;
|
608
|
-
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_KEYWORDS = 0x10;
|
609
|
-
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_BLOCK = 0x20;
|
610
|
-
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_ALL = 0x40;
|
611
|
-
|
612
|
-
static const int8_t PM_SCOPE_NUMBERED_PARAMETERS_DISALLOWED = -1;
|
613
|
-
static const int8_t PM_SCOPE_NUMBERED_PARAMETERS_NONE = 0;
|
614
|
-
|
615
613
|
/**
|
616
614
|
* A struct that represents a stack of boolean values.
|
617
615
|
*/
|
data/include/prism/regexp.h
CHANGED
@@ -10,7 +10,6 @@
|
|
10
10
|
#include "prism/parser.h"
|
11
11
|
#include "prism/encoding.h"
|
12
12
|
#include "prism/util/pm_memchr.h"
|
13
|
-
#include "prism/util/pm_string_list.h"
|
14
13
|
#include "prism/util/pm_string.h"
|
15
14
|
|
16
15
|
#include <stdbool.h>
|
@@ -18,16 +17,26 @@
|
|
18
17
|
#include <string.h>
|
19
18
|
|
20
19
|
/**
|
21
|
-
*
|
22
|
-
|
20
|
+
* This callback is called when a named capture group is found.
|
21
|
+
*/
|
22
|
+
typedef void (*pm_regexp_name_callback_t)(const pm_string_t *name, void *data);
|
23
|
+
|
24
|
+
/**
|
25
|
+
* This callback is called when a parse error is found.
|
26
|
+
*/
|
27
|
+
typedef void (*pm_regexp_error_callback_t)(const uint8_t *start, const uint8_t *end, const char *message, void *data);
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Parse a regular expression.
|
23
31
|
*
|
32
|
+
* @param parser The parser that is currently being used.
|
24
33
|
* @param source The source code to parse.
|
25
34
|
* @param size The size of the source code.
|
26
|
-
* @param
|
27
|
-
* @param
|
28
|
-
* @param
|
29
|
-
* @
|
35
|
+
* @param name_callback The optional callback to call when a named capture group is found.
|
36
|
+
* @param name_data The optional data to pass to the name callback.
|
37
|
+
* @param error_callback The callback to call when a parse error is found.
|
38
|
+
* @param error_data The data to pass to the error callback.
|
30
39
|
*/
|
31
|
-
PRISM_EXPORTED_FUNCTION
|
40
|
+
PRISM_EXPORTED_FUNCTION void pm_regexp_parse(pm_parser_t *parser, const uint8_t *source, size_t size, pm_regexp_name_callback_t name_callback, void *name_data, pm_regexp_error_callback_t error_callback, void *error_data);
|
32
41
|
|
33
42
|
#endif
|
@@ -95,9 +95,10 @@ typedef struct {
|
|
95
95
|
* @param start_line The line number that the parser starts on.
|
96
96
|
* @param literals The set of static literals to add the node to.
|
97
97
|
* @param node The node to add to the set.
|
98
|
+
* @param replace Whether to replace the previous node if one already exists.
|
98
99
|
* @return A pointer to the node that is being overwritten, if there is one.
|
99
100
|
*/
|
100
|
-
pm_node_t * pm_static_literals_add(const pm_newline_list_t *newline_list, int32_t start_line, pm_static_literals_t *literals, pm_node_t *node);
|
101
|
+
pm_node_t * pm_static_literals_add(const pm_newline_list_t *newline_list, int32_t start_line, pm_static_literals_t *literals, pm_node_t *node, bool replace);
|
101
102
|
|
102
103
|
/**
|
103
104
|
* Free the internal memory associated with the given static literals set.
|
@@ -115,6 +116,6 @@ void pm_static_literals_free(pm_static_literals_t *literals);
|
|
115
116
|
* @param encoding_name The name of the encoding of the source being parsed.
|
116
117
|
* @param node The node to create a string representation of.
|
117
118
|
*/
|
118
|
-
|
119
|
+
void pm_static_literal_inspect(pm_buffer_t *buffer, const pm_newline_list_t *newline_list, int32_t start_line, const char *encoding_name, const pm_node_t *node);
|
119
120
|
|
120
121
|
#endif
|
@@ -34,8 +34,7 @@ size_t pm_strspn_whitespace(const uint8_t *string, ptrdiff_t length);
|
|
34
34
|
* @return The number of characters at the start of the string that are
|
35
35
|
* whitespace.
|
36
36
|
*/
|
37
|
-
size_t
|
38
|
-
pm_strspn_whitespace_newlines(const uint8_t *string, ptrdiff_t length, pm_newline_list_t *newline_list);
|
37
|
+
size_t pm_strspn_whitespace_newlines(const uint8_t *string, ptrdiff_t length, pm_newline_list_t *newline_list);
|
39
38
|
|
40
39
|
/**
|
41
40
|
* Returns the number of characters at the start of the string that are inline
|
@@ -87,14 +87,6 @@ void pm_constant_id_list_insert(pm_constant_id_list_t *list, size_t index, pm_co
|
|
87
87
|
*/
|
88
88
|
bool pm_constant_id_list_includes(pm_constant_id_list_t *list, pm_constant_id_t id);
|
89
89
|
|
90
|
-
/**
|
91
|
-
* Get the memory size of a list of constant ids.
|
92
|
-
*
|
93
|
-
* @param list The list to get the memory size of.
|
94
|
-
* @return The memory size of the list.
|
95
|
-
*/
|
96
|
-
size_t pm_constant_id_list_memsize(pm_constant_id_list_t *list);
|
97
|
-
|
98
90
|
/**
|
99
91
|
* Free the memory associated with a list of constant ids.
|
100
92
|
*
|
@@ -48,6 +48,9 @@ typedef struct {
|
|
48
48
|
* from the string itself.
|
49
49
|
*/
|
50
50
|
typedef enum {
|
51
|
+
/** The default decimal base, with no prefix. Leading 0s will be ignored. */
|
52
|
+
PM_INTEGER_BASE_DEFAULT,
|
53
|
+
|
51
54
|
/** The binary base, indicated by a 0b or 0B prefix. */
|
52
55
|
PM_INTEGER_BASE_BINARY,
|
53
56
|
|
@@ -79,15 +82,7 @@ typedef enum {
|
|
79
82
|
* @param start The start of the string.
|
80
83
|
* @param end The end of the string.
|
81
84
|
*/
|
82
|
-
|
83
|
-
|
84
|
-
/**
|
85
|
-
* Return the memory size of the integer.
|
86
|
-
*
|
87
|
-
* @param integer The integer to get the memory size of.
|
88
|
-
* @return The size of the memory associated with the integer.
|
89
|
-
*/
|
90
|
-
size_t pm_integer_memsize(const pm_integer_t *integer);
|
85
|
+
void pm_integer_parse(pm_integer_t *integer, pm_integer_base_t base, const uint8_t *start, const uint8_t *end);
|
91
86
|
|
92
87
|
/**
|
93
88
|
* Compare two integers. This function returns -1 if the left integer is less
|
@@ -100,6 +95,18 @@ size_t pm_integer_memsize(const pm_integer_t *integer);
|
|
100
95
|
*/
|
101
96
|
int pm_integer_compare(const pm_integer_t *left, const pm_integer_t *right);
|
102
97
|
|
98
|
+
/**
|
99
|
+
* Reduce a ratio of integers to its simplest form.
|
100
|
+
*
|
101
|
+
* If either the numerator or denominator do not fit into a 32-bit integer, then
|
102
|
+
* this function is a no-op. In the future, we may consider reducing even the
|
103
|
+
* larger numbers, but for now we're going to keep it simple.
|
104
|
+
*
|
105
|
+
* @param numerator The numerator of the ratio.
|
106
|
+
* @param denominator The denominator of the ratio.
|
107
|
+
*/
|
108
|
+
void pm_integers_reduce(pm_integer_t *numerator, pm_integer_t *denominator);
|
109
|
+
|
103
110
|
/**
|
104
111
|
* Convert an integer to a decimal string.
|
105
112
|
*
|
@@ -120,14 +120,6 @@ PRISM_EXPORTED_FUNCTION bool pm_string_mapped_init(pm_string_t *string, const ch
|
|
120
120
|
*/
|
121
121
|
PRISM_EXPORTED_FUNCTION bool pm_string_file_init(pm_string_t *string, const char *filepath);
|
122
122
|
|
123
|
-
/**
|
124
|
-
* Returns the memory size associated with the string.
|
125
|
-
*
|
126
|
-
* @param string The string to get the memory size of.
|
127
|
-
* @return The size of the memory associated with the string.
|
128
|
-
*/
|
129
|
-
size_t pm_string_memsize(const pm_string_t *string);
|
130
|
-
|
131
123
|
/**
|
132
124
|
* Ensure the string is owned. If it is not, then reinitialize it as owned and
|
133
125
|
* copy over the previous source.
|
data/include/prism/version.h
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
/**
|
15
15
|
* The minor version of the Prism library as an int.
|
16
16
|
*/
|
17
|
-
#define PRISM_VERSION_MINOR
|
17
|
+
#define PRISM_VERSION_MINOR 30
|
18
18
|
|
19
19
|
/**
|
20
20
|
* The patch version of the Prism library as an int.
|
@@ -24,6 +24,6 @@
|
|
24
24
|
/**
|
25
25
|
* The version of the Prism library as a constant string.
|
26
26
|
*/
|
27
|
-
#define PRISM_VERSION "0.
|
27
|
+
#define PRISM_VERSION "0.30.0"
|
28
28
|
|
29
29
|
#endif
|
data/include/prism.h
CHANGED
@@ -219,17 +219,6 @@ PRISM_EXPORTED_FUNCTION const char * pm_token_type_name(pm_token_type_t token_ty
|
|
219
219
|
*/
|
220
220
|
const char * pm_token_type_human(pm_token_type_t token_type);
|
221
221
|
|
222
|
-
/**
|
223
|
-
* Format the errors on the parser into the given buffer.
|
224
|
-
*
|
225
|
-
* @param parser The parser to format the errors for.
|
226
|
-
* @param error_list The list of errors to format.
|
227
|
-
* @param buffer The buffer to format the errors into.
|
228
|
-
* @param colorize Whether or not to colorize the errors with ANSI escape sequences.
|
229
|
-
* @param inline_messages Whether or not to inline the messages with the source.
|
230
|
-
*/
|
231
|
-
PRISM_EXPORTED_FUNCTION void pm_parser_errors_format(const pm_parser_t *parser, const pm_list_t *error_list, pm_buffer_t *buffer, bool colorize, bool inline_messages);
|
232
|
-
|
233
222
|
// We optionally support dumping to JSON. For systems that don't want or need
|
234
223
|
// this functionality, it can be turned off with the PRISM_EXCLUDE_JSON define.
|
235
224
|
#ifndef PRISM_EXCLUDE_JSON
|
data/lib/prism/compiler.rb
CHANGED
@@ -301,6 +301,9 @@ module Prism
|
|
301
301
|
# Compile a InterpolatedXStringNode node
|
302
302
|
alias visit_interpolated_x_string_node visit_child_nodes
|
303
303
|
|
304
|
+
# Compile a ItLocalVariableReadNode node
|
305
|
+
alias visit_it_local_variable_read_node visit_child_nodes
|
306
|
+
|
304
307
|
# Compile a ItParametersNode node
|
305
308
|
alias visit_it_parameters_node visit_child_nodes
|
306
309
|
|
@@ -73,7 +73,7 @@ module Prism
|
|
73
73
|
|
74
74
|
# Desugar `x += y` to `x = x + y`
|
75
75
|
def compile
|
76
|
-
|
76
|
+
binary_operator_loc = node.binary_operator_loc.chop
|
77
77
|
|
78
78
|
write_class.new(
|
79
79
|
source,
|
@@ -84,15 +84,15 @@ module Prism
|
|
84
84
|
0,
|
85
85
|
read_class.new(source, *arguments, node.name_loc),
|
86
86
|
nil,
|
87
|
-
|
88
|
-
|
87
|
+
binary_operator_loc.slice.to_sym,
|
88
|
+
binary_operator_loc,
|
89
89
|
nil,
|
90
90
|
ArgumentsNode.new(source, 0, [node.value], node.value.location),
|
91
91
|
nil,
|
92
92
|
nil,
|
93
93
|
node.location
|
94
94
|
),
|
95
|
-
node.
|
95
|
+
node.binary_operator_loc.copy(start_offset: node.binary_operator_loc.end_offset - 1, length: 1),
|
96
96
|
node.location
|
97
97
|
)
|
98
98
|
end
|
data/lib/prism/dispatcher.rb
CHANGED
@@ -762,6 +762,14 @@ module Prism
|
|
762
762
|
listeners[:on_interpolated_x_string_node_leave]&.each { |listener| listener.on_interpolated_x_string_node_leave(node) }
|
763
763
|
end
|
764
764
|
|
765
|
+
# Dispatch enter and leave events for ItLocalVariableReadNode nodes and continue
|
766
|
+
# walking the tree.
|
767
|
+
def visit_it_local_variable_read_node(node)
|
768
|
+
listeners[:on_it_local_variable_read_node_enter]&.each { |listener| listener.on_it_local_variable_read_node_enter(node) }
|
769
|
+
super
|
770
|
+
listeners[:on_it_local_variable_read_node_leave]&.each { |listener| listener.on_it_local_variable_read_node_leave(node) }
|
771
|
+
end
|
772
|
+
|
765
773
|
# Dispatch enter and leave events for ItParametersNode nodes and continue
|
766
774
|
# walking the tree.
|
767
775
|
def visit_it_parameters_node(node)
|
@@ -1795,6 +1803,12 @@ module Prism
|
|
1795
1803
|
listeners[:on_interpolated_x_string_node_leave]&.each { |listener| listener.on_interpolated_x_string_node_leave(node) }
|
1796
1804
|
end
|
1797
1805
|
|
1806
|
+
# Dispatch enter and leave events for ItLocalVariableReadNode nodes.
|
1807
|
+
def visit_it_local_variable_read_node(node)
|
1808
|
+
listeners[:on_it_local_variable_read_node_enter]&.each { |listener| listener.on_it_local_variable_read_node_enter(node) }
|
1809
|
+
listeners[:on_it_local_variable_read_node_leave]&.each { |listener| listener.on_it_local_variable_read_node_leave(node) }
|
1810
|
+
end
|
1811
|
+
|
1798
1812
|
# Dispatch enter and leave events for ItParametersNode nodes.
|
1799
1813
|
def visit_it_parameters_node(node)
|
1800
1814
|
listeners[:on_it_parameters_node_enter]&.each { |listener| listener.on_it_parameters_node_enter(node) }
|
data/lib/prism/dot_visitor.rb
CHANGED
@@ -765,11 +765,11 @@ module Prism
|
|
765
765
|
# write_name
|
766
766
|
table.field("write_name", node.write_name.inspect)
|
767
767
|
|
768
|
-
#
|
769
|
-
table.field("
|
768
|
+
# binary_operator
|
769
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
770
770
|
|
771
|
-
#
|
772
|
-
table.field("
|
771
|
+
# binary_operator_loc
|
772
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
773
773
|
|
774
774
|
# value
|
775
775
|
table.field("value", port: true)
|
@@ -1060,15 +1060,15 @@ module Prism
|
|
1060
1060
|
# name_loc
|
1061
1061
|
table.field("name_loc", location_inspect(node.name_loc))
|
1062
1062
|
|
1063
|
-
#
|
1064
|
-
table.field("
|
1063
|
+
# binary_operator_loc
|
1064
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
1065
1065
|
|
1066
1066
|
# value
|
1067
1067
|
table.field("value", port: true)
|
1068
1068
|
digraph.edge("#{id}:value -> #{node_id(node.value)};")
|
1069
1069
|
|
1070
|
-
#
|
1071
|
-
table.field("
|
1070
|
+
# binary_operator
|
1071
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
1072
1072
|
|
1073
1073
|
digraph.nodes << <<~DOT
|
1074
1074
|
#{id} [
|
@@ -1205,15 +1205,15 @@ module Prism
|
|
1205
1205
|
# name_loc
|
1206
1206
|
table.field("name_loc", location_inspect(node.name_loc))
|
1207
1207
|
|
1208
|
-
#
|
1209
|
-
table.field("
|
1208
|
+
# binary_operator_loc
|
1209
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
1210
1210
|
|
1211
1211
|
# value
|
1212
1212
|
table.field("value", port: true)
|
1213
1213
|
digraph.edge("#{id}:value -> #{node_id(node.value)};")
|
1214
1214
|
|
1215
|
-
#
|
1216
|
-
table.field("
|
1215
|
+
# binary_operator
|
1216
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
1217
1217
|
|
1218
1218
|
digraph.nodes << <<~DOT
|
1219
1219
|
#{id} [
|
@@ -1314,15 +1314,15 @@ module Prism
|
|
1314
1314
|
table.field("target", port: true)
|
1315
1315
|
digraph.edge("#{id}:target -> #{node_id(node.target)};")
|
1316
1316
|
|
1317
|
-
#
|
1318
|
-
table.field("
|
1317
|
+
# binary_operator_loc
|
1318
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
1319
1319
|
|
1320
1320
|
# value
|
1321
1321
|
table.field("value", port: true)
|
1322
1322
|
digraph.edge("#{id}:value -> #{node_id(node.value)};")
|
1323
1323
|
|
1324
|
-
#
|
1325
|
-
table.field("
|
1324
|
+
# binary_operator
|
1325
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
1326
1326
|
|
1327
1327
|
digraph.nodes << <<~DOT
|
1328
1328
|
#{id} [
|
@@ -1916,15 +1916,15 @@ module Prism
|
|
1916
1916
|
# name_loc
|
1917
1917
|
table.field("name_loc", location_inspect(node.name_loc))
|
1918
1918
|
|
1919
|
-
#
|
1920
|
-
table.field("
|
1919
|
+
# binary_operator_loc
|
1920
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
1921
1921
|
|
1922
1922
|
# value
|
1923
1923
|
table.field("value", port: true)
|
1924
1924
|
digraph.edge("#{id}:value -> #{node_id(node.value)};")
|
1925
1925
|
|
1926
|
-
#
|
1927
|
-
table.field("
|
1926
|
+
# binary_operator
|
1927
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
1928
1928
|
|
1929
1929
|
digraph.nodes << <<~DOT
|
1930
1930
|
#{id} [
|
@@ -2322,11 +2322,11 @@ module Prism
|
|
2322
2322
|
digraph.edge("#{id}:block -> #{node_id(block)};")
|
2323
2323
|
end
|
2324
2324
|
|
2325
|
-
#
|
2326
|
-
table.field("
|
2325
|
+
# binary_operator
|
2326
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
2327
2327
|
|
2328
|
-
#
|
2329
|
-
table.field("
|
2328
|
+
# binary_operator_loc
|
2329
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
2330
2330
|
|
2331
2331
|
# value
|
2332
2332
|
table.field("value", port: true)
|
@@ -2471,15 +2471,15 @@ module Prism
|
|
2471
2471
|
# name_loc
|
2472
2472
|
table.field("name_loc", location_inspect(node.name_loc))
|
2473
2473
|
|
2474
|
-
#
|
2475
|
-
table.field("
|
2474
|
+
# binary_operator_loc
|
2475
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
2476
2476
|
|
2477
2477
|
# value
|
2478
2478
|
table.field("value", port: true)
|
2479
2479
|
digraph.edge("#{id}:value -> #{node_id(node.value)};")
|
2480
2480
|
|
2481
|
-
#
|
2482
|
-
table.field("
|
2481
|
+
# binary_operator
|
2482
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
2483
2483
|
|
2484
2484
|
digraph.nodes << <<~DOT
|
2485
2485
|
#{id} [
|
@@ -2780,6 +2780,20 @@ module Prism
|
|
2780
2780
|
super
|
2781
2781
|
end
|
2782
2782
|
|
2783
|
+
# Visit a ItLocalVariableReadNode node.
|
2784
|
+
def visit_it_local_variable_read_node(node)
|
2785
|
+
table = Table.new("ItLocalVariableReadNode")
|
2786
|
+
id = node_id(node)
|
2787
|
+
|
2788
|
+
digraph.nodes << <<~DOT
|
2789
|
+
#{id} [
|
2790
|
+
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
2791
|
+
];
|
2792
|
+
DOT
|
2793
|
+
|
2794
|
+
super
|
2795
|
+
end
|
2796
|
+
|
2783
2797
|
# Visit a ItParametersNode node.
|
2784
2798
|
def visit_it_parameters_node(node)
|
2785
2799
|
table = Table.new("ItParametersNode")
|
@@ -2928,8 +2942,8 @@ module Prism
|
|
2928
2942
|
# name_loc
|
2929
2943
|
table.field("name_loc", location_inspect(node.name_loc))
|
2930
2944
|
|
2931
|
-
#
|
2932
|
-
table.field("
|
2945
|
+
# binary_operator_loc
|
2946
|
+
table.field("binary_operator_loc", location_inspect(node.binary_operator_loc))
|
2933
2947
|
|
2934
2948
|
# value
|
2935
2949
|
table.field("value", port: true)
|
@@ -2938,8 +2952,8 @@ module Prism
|
|
2938
2952
|
# name
|
2939
2953
|
table.field("name", node.name.inspect)
|
2940
2954
|
|
2941
|
-
#
|
2942
|
-
table.field("
|
2955
|
+
# binary_operator
|
2956
|
+
table.field("binary_operator", node.binary_operator.inspect)
|
2943
2957
|
|
2944
2958
|
# depth
|
2945
2959
|
table.field("depth", node.depth.inspect)
|
@@ -3779,9 +3793,14 @@ module Prism
|
|
3779
3793
|
table = Table.new("RationalNode")
|
3780
3794
|
id = node_id(node)
|
3781
3795
|
|
3782
|
-
#
|
3783
|
-
table.field("
|
3784
|
-
|
3796
|
+
# flags
|
3797
|
+
table.field("flags", integer_base_flags_inspect(node))
|
3798
|
+
|
3799
|
+
# numerator
|
3800
|
+
table.field("numerator", node.numerator.inspect)
|
3801
|
+
|
3802
|
+
# denominator
|
3803
|
+
table.field("denominator", node.denominator.inspect)
|
3785
3804
|
|
3786
3805
|
digraph.nodes << <<~DOT
|
3787
3806
|
#{id} [
|
data/lib/prism/dsl.rb
CHANGED
@@ -143,8 +143,8 @@ module Prism
|
|
143
143
|
end
|
144
144
|
|
145
145
|
# Create a new CallOperatorWriteNode node
|
146
|
-
def CallOperatorWriteNode(flags, receiver, call_operator_loc, message_loc, read_name, write_name,
|
147
|
-
CallOperatorWriteNode.new(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name,
|
146
|
+
def CallOperatorWriteNode(flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value, source = nil, location = Location())
|
147
|
+
CallOperatorWriteNode.new(source, flags, receiver, call_operator_loc, message_loc, read_name, write_name, binary_operator, binary_operator_loc, value, location)
|
148
148
|
end
|
149
149
|
|
150
150
|
# Create a new CallOrWriteNode node
|
@@ -183,8 +183,8 @@ module Prism
|
|
183
183
|
end
|
184
184
|
|
185
185
|
# Create a new ClassVariableOperatorWriteNode node
|
186
|
-
def ClassVariableOperatorWriteNode(name, name_loc,
|
187
|
-
ClassVariableOperatorWriteNode.new(source, name, name_loc,
|
186
|
+
def ClassVariableOperatorWriteNode(name, name_loc, binary_operator_loc, value, binary_operator, source = nil, location = Location())
|
187
|
+
ClassVariableOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
|
188
188
|
end
|
189
189
|
|
190
190
|
# Create a new ClassVariableOrWriteNode node
|
@@ -213,8 +213,8 @@ module Prism
|
|
213
213
|
end
|
214
214
|
|
215
215
|
# Create a new ConstantOperatorWriteNode node
|
216
|
-
def ConstantOperatorWriteNode(name, name_loc,
|
217
|
-
ConstantOperatorWriteNode.new(source, name, name_loc,
|
216
|
+
def ConstantOperatorWriteNode(name, name_loc, binary_operator_loc, value, binary_operator, source = nil, location = Location())
|
217
|
+
ConstantOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
|
218
218
|
end
|
219
219
|
|
220
220
|
# Create a new ConstantOrWriteNode node
|
@@ -233,8 +233,8 @@ module Prism
|
|
233
233
|
end
|
234
234
|
|
235
235
|
# Create a new ConstantPathOperatorWriteNode node
|
236
|
-
def ConstantPathOperatorWriteNode(target,
|
237
|
-
ConstantPathOperatorWriteNode.new(source, target,
|
236
|
+
def ConstantPathOperatorWriteNode(target, binary_operator_loc, value, binary_operator, source = nil, location = Location())
|
237
|
+
ConstantPathOperatorWriteNode.new(source, target, binary_operator_loc, value, binary_operator, location)
|
238
238
|
end
|
239
239
|
|
240
240
|
# Create a new ConstantPathOrWriteNode node
|
@@ -343,8 +343,8 @@ module Prism
|
|
343
343
|
end
|
344
344
|
|
345
345
|
# Create a new GlobalVariableOperatorWriteNode node
|
346
|
-
def GlobalVariableOperatorWriteNode(name, name_loc,
|
347
|
-
GlobalVariableOperatorWriteNode.new(source, name, name_loc,
|
346
|
+
def GlobalVariableOperatorWriteNode(name, name_loc, binary_operator_loc, value, binary_operator, source = nil, location = Location())
|
347
|
+
GlobalVariableOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
|
348
348
|
end
|
349
349
|
|
350
350
|
# Create a new GlobalVariableOrWriteNode node
|
@@ -408,8 +408,8 @@ module Prism
|
|
408
408
|
end
|
409
409
|
|
410
410
|
# Create a new IndexOperatorWriteNode node
|
411
|
-
def IndexOperatorWriteNode(flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block,
|
412
|
-
IndexOperatorWriteNode.new(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block,
|
411
|
+
def IndexOperatorWriteNode(flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value, source = nil, location = Location())
|
412
|
+
IndexOperatorWriteNode.new(source, flags, receiver, call_operator_loc, opening_loc, arguments, closing_loc, block, binary_operator, binary_operator_loc, value, location)
|
413
413
|
end
|
414
414
|
|
415
415
|
# Create a new IndexOrWriteNode node
|
@@ -428,8 +428,8 @@ module Prism
|
|
428
428
|
end
|
429
429
|
|
430
430
|
# Create a new InstanceVariableOperatorWriteNode node
|
431
|
-
def InstanceVariableOperatorWriteNode(name, name_loc,
|
432
|
-
InstanceVariableOperatorWriteNode.new(source, name, name_loc,
|
431
|
+
def InstanceVariableOperatorWriteNode(name, name_loc, binary_operator_loc, value, binary_operator, source = nil, location = Location())
|
432
|
+
InstanceVariableOperatorWriteNode.new(source, name, name_loc, binary_operator_loc, value, binary_operator, location)
|
433
433
|
end
|
434
434
|
|
435
435
|
# Create a new InstanceVariableOrWriteNode node
|
@@ -482,6 +482,11 @@ module Prism
|
|
482
482
|
InterpolatedXStringNode.new(source, opening_loc, parts, closing_loc, location)
|
483
483
|
end
|
484
484
|
|
485
|
+
# Create a new ItLocalVariableReadNode node
|
486
|
+
def ItLocalVariableReadNode(source = nil, location = Location())
|
487
|
+
ItLocalVariableReadNode.new(source, location)
|
488
|
+
end
|
489
|
+
|
485
490
|
# Create a new ItParametersNode node
|
486
491
|
def ItParametersNode(source = nil, location = Location())
|
487
492
|
ItParametersNode.new(source, location)
|
@@ -508,8 +513,8 @@ module Prism
|
|
508
513
|
end
|
509
514
|
|
510
515
|
# Create a new LocalVariableOperatorWriteNode node
|
511
|
-
def LocalVariableOperatorWriteNode(name_loc,
|
512
|
-
LocalVariableOperatorWriteNode.new(source, name_loc,
|
516
|
+
def LocalVariableOperatorWriteNode(name_loc, binary_operator_loc, value, name, binary_operator, depth, source = nil, location = Location())
|
517
|
+
LocalVariableOperatorWriteNode.new(source, name_loc, binary_operator_loc, value, name, binary_operator, depth, location)
|
513
518
|
end
|
514
519
|
|
515
520
|
# Create a new LocalVariableOrWriteNode node
|
@@ -653,8 +658,8 @@ module Prism
|
|
653
658
|
end
|
654
659
|
|
655
660
|
# Create a new RationalNode node
|
656
|
-
def RationalNode(
|
657
|
-
RationalNode.new(source,
|
661
|
+
def RationalNode(flags, numerator, denominator, source = nil, location = Location())
|
662
|
+
RationalNode.new(source, flags, numerator, denominator, location)
|
658
663
|
end
|
659
664
|
|
660
665
|
# Create a new RedoNode node
|