kanayago 0.4.0 → 0.4.1
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 +11 -0
- data/README.md +1 -1
- data/ext/kanayago/kanayago.c +2 -3
- data/ext/kanayago/string_node.c +64 -23
- data/lib/kanayago/statement_node.rb +1 -1
- data/lib/kanayago/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d25dec3b7633f7b58a2fe0ad33b1e6f05ef7e47bf5898d7b468a9bd60634c462
|
|
4
|
+
data.tar.gz: becaefd024bdf3b3a196c8971fac45211e69e13e2396d672d383795c98ca9038
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3f7089b463e7a7a3024f6a249dec5902e8ca399826c996027f513b76e32ccb2f43c650f784c55354b2cb731c1cac00cd7c625a76e1c82b998e428872882ce0cd
|
|
7
|
+
data.tar.gz: bcaf717b512cff34f3b31e1cf08eaf23789a6c93469b55b0b466dacbd4227a8be372357b7f28926238fb8e1eab014b476f30b1bd32033222ed7f014c7793823f
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.1]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Fix segmentation fault when parsing dynamic symbols in complex hash structures
|
|
14
|
+
- Fix segmentation fault when parsing nested modules with outer constant references
|
|
15
|
+
- Fix `module_node_new` to use `RNODE_MODULE` instead of incorrect `RNODE_CLASS` macro
|
|
16
|
+
- Add NULL pointer checks in `dynamic_string_node_new`, `dynamic_symbol_node_new`, `dynamic_execute_string_node_new`, and `dynamic_regexp_node_new`
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Remove incorrect `@super` field access from `ModuleNode` (modules do not have superclasses)
|
|
20
|
+
|
|
10
21
|
## [0.4.0]
|
|
11
22
|
|
|
12
23
|
### Added
|
data/README.md
CHANGED
data/ext/kanayago/kanayago.c
CHANGED
|
@@ -193,9 +193,8 @@ module_node_new(const NODE *node)
|
|
|
193
193
|
{
|
|
194
194
|
VALUE obj = rb_class_new_instance(0, 0, rb_cModuleNode);
|
|
195
195
|
|
|
196
|
-
rb_ivar_set(obj, rb_intern("@cpath"), ast_to_node_instance(
|
|
197
|
-
rb_ivar_set(obj, rb_intern("@
|
|
198
|
-
rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_CLASS(node)->nd_body));
|
|
196
|
+
rb_ivar_set(obj, rb_intern("@cpath"), ast_to_node_instance(RNODE_MODULE(node)->nd_cpath));
|
|
197
|
+
rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_MODULE(node)->nd_body));
|
|
199
198
|
|
|
200
199
|
return obj;
|
|
201
200
|
}
|
data/ext/kanayago/string_node.c
CHANGED
|
@@ -19,12 +19,22 @@ dynamic_string_node_new(const NODE *node)
|
|
|
19
19
|
{
|
|
20
20
|
VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicStringNode);
|
|
21
21
|
rb_parser_string_t *str = RNODE_DSTR(node)->string;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
const NODE *nd_next = (const NODE *)RNODE_DSTR(node)->nd_next;
|
|
23
|
+
|
|
24
|
+
if (str) {
|
|
25
|
+
rb_encoding *enc = str->enc;
|
|
26
|
+
char *ptr = str->ptr;
|
|
27
|
+
long len = str->len;
|
|
28
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
|
|
29
|
+
} else {
|
|
30
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (nd_next && nd_next != (NODE *)-1) {
|
|
34
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
|
|
35
|
+
} else {
|
|
36
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
|
|
37
|
+
}
|
|
28
38
|
|
|
29
39
|
return obj;
|
|
30
40
|
}
|
|
@@ -34,12 +44,22 @@ dynamic_symbol_node_new(const NODE *node)
|
|
|
34
44
|
{
|
|
35
45
|
VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicSymbolNode);
|
|
36
46
|
rb_parser_string_t *str = RNODE_DSYM(node)->string;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
const NODE *nd_next = (const NODE *)RNODE_DSYM(node)->nd_next;
|
|
48
|
+
|
|
49
|
+
if (str) {
|
|
50
|
+
rb_encoding *enc = str->enc;
|
|
51
|
+
char *ptr = str->ptr;
|
|
52
|
+
long len = str->len;
|
|
53
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
|
|
54
|
+
} else {
|
|
55
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (nd_next && nd_next != (NODE *)-1) {
|
|
59
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
|
|
60
|
+
} else {
|
|
61
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
|
|
62
|
+
}
|
|
43
63
|
|
|
44
64
|
return obj;
|
|
45
65
|
}
|
|
@@ -77,12 +97,22 @@ dynamic_execute_string_node_new(const NODE *node)
|
|
|
77
97
|
{
|
|
78
98
|
VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicExecuteStringNode);
|
|
79
99
|
rb_parser_string_t *str = RNODE_DXSTR(node)->string;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
100
|
+
const NODE *nd_next = (const NODE *)RNODE_DXSTR(node)->nd_next;
|
|
101
|
+
|
|
102
|
+
if (str) {
|
|
103
|
+
rb_encoding *enc = str->enc;
|
|
104
|
+
char *ptr = str->ptr;
|
|
105
|
+
long len = str->len;
|
|
106
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
|
|
107
|
+
} else {
|
|
108
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (nd_next && nd_next != (NODE *)-1) {
|
|
112
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
|
|
113
|
+
} else {
|
|
114
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
|
|
115
|
+
}
|
|
86
116
|
|
|
87
117
|
return obj;
|
|
88
118
|
}
|
|
@@ -112,13 +142,24 @@ dynamic_regexp_node_new(const NODE *node)
|
|
|
112
142
|
{
|
|
113
143
|
VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicRegexpNode);
|
|
114
144
|
rb_parser_string_t *str = RNODE_DREGX(node)->string;
|
|
115
|
-
rb_encoding *enc = str->enc;
|
|
116
|
-
char *ptr = str->ptr;
|
|
117
|
-
long len = str->len;
|
|
118
145
|
long options = RNODE_DREGX(node)->as.nd_cflag;
|
|
146
|
+
const NODE *nd_next = (const NODE *)RNODE_DREGX(node)->nd_next;
|
|
147
|
+
|
|
148
|
+
if (str) {
|
|
149
|
+
rb_encoding *enc = str->enc;
|
|
150
|
+
char *ptr = str->ptr;
|
|
151
|
+
long len = str->len;
|
|
152
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
|
|
153
|
+
} else {
|
|
154
|
+
rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (nd_next && nd_next != (NODE *)-1) {
|
|
158
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
|
|
159
|
+
} else {
|
|
160
|
+
rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
|
|
161
|
+
}
|
|
119
162
|
|
|
120
|
-
rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
|
|
121
|
-
rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance((const NODE *)RNODE_DREGX(node)->nd_next));
|
|
122
163
|
rb_ivar_set(obj, rb_intern("@options"), LONG2FIX(options));
|
|
123
164
|
|
|
124
165
|
return obj;
|
data/lib/kanayago/version.rb
CHANGED