kanayago 0.1.1 → 0.2.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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -0
  3. data/.ruby-version +1 -0
  4. data/README.md +20 -29
  5. data/Rakefile +43 -96
  6. data/ext/kanayago/extconf.rb +6 -0
  7. data/ext/kanayago/id.h +12 -5
  8. data/ext/kanayago/id_table.h +15 -0
  9. data/ext/kanayago/include/ruby/st.h +199 -0
  10. data/ext/kanayago/internal/array.h +3 -0
  11. data/ext/kanayago/internal/basic_operators.h +1 -0
  12. data/ext/kanayago/internal/bignum.h +1 -0
  13. data/ext/kanayago/internal/bits.h +82 -0
  14. data/ext/kanayago/internal/encoding.h +4 -1
  15. data/ext/kanayago/internal/error.h +33 -0
  16. data/ext/kanayago/internal/fixnum.h +1 -0
  17. data/ext/kanayago/internal/gc.h +47 -11
  18. data/ext/kanayago/internal/hash.h +3 -0
  19. data/ext/kanayago/internal/imemo.h +93 -32
  20. data/ext/kanayago/internal/io.h +30 -7
  21. data/ext/kanayago/internal/namespace.h +81 -0
  22. data/ext/kanayago/internal/numeric.h +1 -0
  23. data/ext/kanayago/internal/parse.h +17 -3
  24. data/ext/kanayago/internal/re.h +7 -2
  25. data/ext/kanayago/internal/sanitizers.h +88 -39
  26. data/ext/kanayago/internal/set_table.h +70 -0
  27. data/ext/kanayago/internal/string.h +33 -16
  28. data/ext/kanayago/internal/symbol.h +4 -3
  29. data/ext/kanayago/internal/thread.h +42 -9
  30. data/ext/kanayago/internal/variable.h +13 -11
  31. data/ext/kanayago/internal/vm.h +4 -5
  32. data/ext/kanayago/internal.h +0 -3
  33. data/ext/kanayago/kanayago.c +554 -235
  34. data/ext/kanayago/kanayago.h +5 -0
  35. data/ext/kanayago/literal_node.c +343 -0
  36. data/ext/kanayago/literal_node.h +30 -0
  37. data/ext/kanayago/method.h +18 -2
  38. data/ext/kanayago/node.c +7 -1
  39. data/ext/kanayago/node.h +14 -3
  40. data/ext/kanayago/parse.c +7602 -7156
  41. data/ext/kanayago/parse.h +39 -39
  42. data/ext/kanayago/parser_st.c +2 -1
  43. data/ext/kanayago/pattern_node.c +78 -0
  44. data/ext/kanayago/pattern_node.h +13 -0
  45. data/ext/kanayago/ruby_atomic.h +43 -0
  46. data/ext/kanayago/ruby_parser.c +7 -35
  47. data/ext/kanayago/rubyparser.h +83 -80
  48. data/ext/kanayago/scope_node.c +34 -0
  49. data/ext/kanayago/scope_node.h +8 -0
  50. data/ext/kanayago/shape.h +321 -111
  51. data/ext/kanayago/st.c +905 -21
  52. data/ext/kanayago/statement_node.c +795 -0
  53. data/ext/kanayago/statement_node.h +66 -0
  54. data/ext/kanayago/string_node.c +192 -0
  55. data/ext/kanayago/string_node.h +19 -0
  56. data/ext/kanayago/symbol.h +2 -9
  57. data/ext/kanayago/thread_pthread.h +10 -3
  58. data/ext/kanayago/universal_parser.c +1 -20
  59. data/ext/kanayago/variable_node.c +72 -0
  60. data/ext/kanayago/variable_node.h +12 -0
  61. data/ext/kanayago/vm_core.h +205 -71
  62. data/lib/kanayago/literal_node.rb +87 -0
  63. data/lib/kanayago/pattern_node.rb +19 -0
  64. data/lib/kanayago/statement_node.rb +222 -0
  65. data/lib/kanayago/string_node.rb +43 -0
  66. data/lib/kanayago/variable_node.rb +23 -0
  67. data/lib/kanayago/version.rb +1 -1
  68. data/lib/kanayago.rb +22 -0
  69. data/patch/3.4/copy_target.rb +78 -0
  70. data/patch/3.4/kanayago.patch +162 -0
  71. data/patch/head/copy_target.rb +84 -0
  72. data/patch/head/kanayago.patch +162 -0
  73. data/sample/minitest_generator.rb +266 -0
  74. data/sample/test_generator.rb +272 -0
  75. data/typeprof.conf.json +9 -0
  76. metadata +32 -4
  77. data/ext/kanayago/parse.tmp.y +0 -16145
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class IntegerNode
5
+ attr_reader :val, :minus, :base
6
+ end
7
+
8
+ class FloatNode
9
+ attr_reader :val, :minus
10
+ end
11
+
12
+ class RationalNode
13
+ attr_reader :val, :minus, :base, :seen_point
14
+ end
15
+
16
+ class ImaginaryNode
17
+ attr_reader :val, :minus, :base, :seen_point, :type
18
+ end
19
+
20
+ class StringNode
21
+ attr_reader :ptr, :len, :enc, :coderange
22
+ end
23
+
24
+ class SymbolNode
25
+ attr_reader :ptr, :len, :enc, :coderange
26
+ end
27
+
28
+ class ListNode
29
+ attr_reader :len, :val
30
+ end
31
+
32
+ class ZeroListNode
33
+ attr_reader :len, :val
34
+ end
35
+
36
+ class FileNode
37
+ attr_reader :ptr, :len, :enc, :coderange
38
+ end
39
+
40
+ class LineNode
41
+ attr_reader :lineno
42
+ end
43
+
44
+ class EncodingNode
45
+ attr_reader :val
46
+ end
47
+
48
+ class NilNode
49
+ attr_reader :val
50
+ end
51
+
52
+ class TrueNode
53
+ attr_reader :val
54
+ end
55
+
56
+ class FalseNode
57
+ attr_reader :val
58
+ end
59
+
60
+ class RangeNode
61
+ attr_reader :beg, :end
62
+ end
63
+
64
+ class ExclusiveRangeNode
65
+ attr_reader :beg, :end
66
+ end
67
+
68
+ class FlipFlopNode
69
+ attr_reader :beg, :end
70
+ end
71
+
72
+ class ExclusiveFlipFlopNode
73
+ attr_reader :beg, :end
74
+ end
75
+
76
+ class HashNode
77
+ attr_reader :head, :brace
78
+ end
79
+
80
+ class NthRefNode
81
+ attr_reader :nth
82
+ end
83
+
84
+ class BackRefNode
85
+ attr_reader :nth
86
+ end
87
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class InNode
5
+ attr_reader :head, :body, :next
6
+ end
7
+
8
+ class ArrayPatternNode
9
+ attr_reader :pconst, :pre_args, :rest_arg, :post_args
10
+ end
11
+
12
+ class HashPatternNode
13
+ attr_reader :pconst, :pkwargs, :pkwrestarg
14
+ end
15
+
16
+ class FindPatternNode
17
+ attr_reader :pconst, :pre_rest_arg, :args, :post_rest_arg
18
+ end
19
+ end
@@ -0,0 +1,222 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class IfStatementNode
5
+ attr_reader :cond, :body, :else
6
+ end
7
+
8
+ class UnlessStatementNode
9
+ attr_reader :cond, :body, :else
10
+ end
11
+
12
+ class OrNode
13
+ attr_reader :first, :second
14
+ end
15
+
16
+ class AndNode
17
+ attr_reader :first, :second
18
+ end
19
+
20
+ class WhileNode
21
+ attr_reader :state, :cond, :body
22
+ end
23
+
24
+ class UntilNode
25
+ attr_reader :state, :cond, :body
26
+ end
27
+
28
+ class ForNode
29
+ attr_reader :iter, :body
30
+ end
31
+
32
+ class AliasNode
33
+ attr_reader :first, :second
34
+ end
35
+
36
+ class ValiasNode
37
+ attr_reader :alias, :original
38
+ end
39
+
40
+ class UndefNode
41
+ attr_reader :undefs
42
+ end
43
+
44
+ class ReturnNode
45
+ attr_reader :statements
46
+ end
47
+
48
+ class GlobalAssignmentNode
49
+ attr_reader :id, :value
50
+ end
51
+
52
+ class ClassVariableAssignmentNode
53
+ attr_reader :id, :value
54
+ end
55
+
56
+ class InstanceAssignmentNode
57
+ attr_reader :id, :value
58
+ end
59
+
60
+ class LocalAssignmentNode
61
+ attr_reader :id, :value
62
+ end
63
+
64
+ class SingletonDefinitionNode
65
+ attr_reader :recv, :mid, :defn
66
+ end
67
+
68
+ class SingletonClassNode
69
+ attr_reader :recv, :body
70
+ end
71
+
72
+ class AttributeAssignmentNode
73
+ attr_reader :recv, :mid, :args
74
+ end
75
+
76
+ class SafeCallNode
77
+ attr_reader :recv, :mid, :args
78
+ end
79
+
80
+ class SuperNode
81
+ attr_reader :args
82
+ end
83
+
84
+ class ZeroSuperNode # rubocop:disable Lint/EmptyClass
85
+ end
86
+
87
+ class CaseNode
88
+ attr_reader :head, :body
89
+ end
90
+
91
+ class Case2Node
92
+ attr_reader :body
93
+ end
94
+
95
+ class Case3Node
96
+ attr_reader :head, :body
97
+ end
98
+
99
+ class WhenNode
100
+ attr_reader :head, :body, :next
101
+ end
102
+
103
+ class RetryNode # rubocop:disable Lint/EmptyClass
104
+ end
105
+
106
+ class RedoNode # rubocop:disable Lint/EmptyClass
107
+ end
108
+
109
+ class BreakNode
110
+ attr_reader :statements
111
+ end
112
+
113
+ class NextNode
114
+ attr_reader :statements
115
+ end
116
+
117
+ class DefinedNode
118
+ attr_reader :head
119
+ end
120
+
121
+ class IterNode
122
+ attr_reader :body, :iter
123
+ end
124
+
125
+ class EnsureNode
126
+ attr_reader :head, :ensr
127
+ end
128
+
129
+ class RescueNode
130
+ attr_reader :head, :resq, :else
131
+ end
132
+
133
+ class RescueBodyNode
134
+ attr_reader :args, :exc_var, :body, :next
135
+ end
136
+
137
+ class OperatorAssignment1Node
138
+ attr_reader :recv, :mid, :index, :rvalue
139
+ end
140
+
141
+ class OperatorAssignment2Node
142
+ attr_reader :recv, :value, :vid, :mid
143
+ end
144
+
145
+ class OperatorAssignmentAndNode
146
+ attr_reader :head, :value
147
+ end
148
+
149
+ class OperatorAssignmentOrNode
150
+ attr_reader :head, :value
151
+ end
152
+
153
+ class OperatorConstantDeclarationNode
154
+ attr_reader :head, :value, :aid, :shareability
155
+ end
156
+
157
+ class YieldNode
158
+ attr_reader :head
159
+ end
160
+
161
+ class LambdaNode
162
+ attr_reader :body
163
+ end
164
+
165
+ class SplatNode
166
+ attr_reader :head
167
+ end
168
+
169
+ class BlockPassNode
170
+ attr_reader :head, :body, :forwarding
171
+ end
172
+
173
+ class ArgsAuxNode
174
+ attr_reader :pid, :plen, :next
175
+ end
176
+
177
+ class OptArgNode
178
+ attr_reader :body, :next
179
+ end
180
+
181
+ class KwArgNode
182
+ attr_reader :body, :next
183
+ end
184
+
185
+ class PostArgNode
186
+ attr_reader :first, :second
187
+ end
188
+
189
+ class ArgsCatNode
190
+ attr_reader :head, :body
191
+ end
192
+
193
+ class ArgsPushNode
194
+ attr_reader :head, :body
195
+ end
196
+
197
+ class ForMasgnNode
198
+ attr_reader :var
199
+ end
200
+
201
+ class MasgnNode
202
+ attr_reader :head, :value, :args
203
+ end
204
+
205
+ class DasgnNode
206
+ attr_reader :vid, :value
207
+ end
208
+
209
+ class OnceNode
210
+ attr_reader :body
211
+ end
212
+
213
+ class ErrinfoNode # rubocop:disable Lint/EmptyClass
214
+ end
215
+
216
+ class PostexeNode
217
+ attr_reader :body
218
+ end
219
+
220
+ class ErrorNode # rubocop:disable Lint/EmptyClass
221
+ end
222
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class DynamicStringNode
5
+ attr_reader :string, :next_nodes
6
+ end
7
+
8
+ class DynamicSymbolNode
9
+ attr_reader :string, :next_nodes
10
+ end
11
+
12
+ class EmbeddedExpressionStringNode
13
+ attr_reader :body
14
+ end
15
+
16
+ class ExecuteStringNode
17
+ attr_reader :ptr, :len, :enc, :coderange
18
+ end
19
+
20
+ class DynamicExecuteStringNode
21
+ attr_reader :string, :next_nodes
22
+ end
23
+
24
+ class RegexpNode
25
+ attr_reader :ptr, :len, :enc, :coderange, :options
26
+ end
27
+
28
+ class DynamicRegexpNode
29
+ attr_reader :string, :next_nodes, :options
30
+ end
31
+
32
+ class MatchNode
33
+ attr_reader :ptr, :len, :enc, :coderange, :options
34
+ end
35
+
36
+ class Match2Node
37
+ attr_reader :recv, :value, :args
38
+ end
39
+
40
+ class Match3Node
41
+ attr_reader :recv, :value
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class LocalVariableNode
5
+ attr_reader :vid
6
+ end
7
+
8
+ class DynamicVariableNode
9
+ attr_reader :vid
10
+ end
11
+
12
+ class InstanceVariableNode
13
+ attr_reader :vid
14
+ end
15
+
16
+ class ClassVariableNode
17
+ attr_reader :vid
18
+ end
19
+
20
+ class GlobalVariableNode
21
+ attr_reader :vid
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanayago
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/kanayago.rb CHANGED
@@ -3,9 +3,31 @@
3
3
  require_relative 'kanayago/version'
4
4
  require_relative 'kanayago/kanayago'
5
5
 
6
+ require_relative 'kanayago/literal_node'
7
+ require_relative 'kanayago/string_node'
8
+ require_relative 'kanayago/statement_node'
9
+ require_relative 'kanayago/variable_node'
10
+ require_relative 'kanayago/pattern_node'
11
+
6
12
  # Parse Ruby code with Ruby's Parser(Universal Parser)
7
13
  module Kanayago
8
14
  def self.parse(source)
9
15
  kanayago_parse(source)
10
16
  end
17
+
18
+ class SelfNode
19
+ attr_reader :state
20
+ end
21
+
22
+ class ModuleNode
23
+ attr_reader :cpath, :body
24
+ end
25
+
26
+ class VariableCallNode
27
+ attr_reader :mid
28
+ end
29
+
30
+ class Colon3Node
31
+ attr_reader :mid
32
+ end
11
33
  end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ RUBY_PARSER_COPY_TARGETS = %w[
4
+ ccan/check_type/check_type.h
5
+ ccan/container_of/container_of.h
6
+ ccan/list/list.h
7
+ ccan/str/str.h
8
+ constant.h
9
+ id.h
10
+ id_table.h
11
+ internal/array.h
12
+ internal/basic_operators.h
13
+ internal/bignum.h
14
+ internal/bits.h
15
+ internal/compile.h
16
+ internal/compilers.h
17
+ internal/complex.h
18
+ internal/encoding.h
19
+ internal/error.h
20
+ internal/fixnum.h
21
+ internal/gc.h
22
+ internal/hash.h
23
+ internal/imemo.h
24
+ internal/io.h
25
+ internal/numeric.h
26
+ internal/parse.h
27
+ internal/rational.h
28
+ internal/re.h
29
+ internal/ruby_parser.h
30
+ internal/sanitizers.h
31
+ internal/serial.h
32
+ internal/static_assert.h
33
+ internal/string.h
34
+ internal/symbol.h
35
+ internal/thread.h
36
+ internal/variable.h
37
+ internal/warnings.h
38
+ internal/vm.h
39
+ internal.h
40
+ lex.c
41
+ method.h
42
+ node.c
43
+ node.h
44
+ node_name.inc
45
+ parse.c
46
+ parse.h
47
+ parser_bits.h
48
+ parser_node.h
49
+ parser_st.c
50
+ parser_st.h
51
+ parser_value.h
52
+ ruby_assert.h
53
+ ruby_atomic.h
54
+ ruby_parser.c
55
+ rubyparser.h
56
+ shape.h
57
+ st.c
58
+ symbol.h
59
+ thread_pthread.h
60
+ universal_parser.c
61
+ vm_core.h
62
+ vm_opts.h
63
+ ].freeze
64
+
65
+ MAKE_DIRECTORIES = [
66
+ 'ccan',
67
+ 'ccan/check_type',
68
+ 'ccan/container',
69
+ 'ccan/container_of',
70
+ 'ccan/list',
71
+ 'ccan/str',
72
+ 'internal'
73
+ ].freeze
74
+
75
+ DELETE_DIRECTORIES = %w[
76
+ ccan
77
+ internal
78
+ ].freeze
@@ -0,0 +1,162 @@
1
+ diff --git a/ext/kanayago/internal/ruby_parser.h b/ext/kanayago/internal/ruby_parser.h
2
+ index 8e306d1..d420a02 100644
3
+ --- a/ext/kanayago/internal/ruby_parser.h
4
+ +++ b/ext/kanayago/internal/ruby_parser.h
5
+ @@ -15,6 +15,29 @@ struct lex_pointer_string {
6
+ long ptr;
7
+ };
8
+
9
+ +// Add Ruby's Parser struct and enum for Kanayago
10
+ +enum lex_type {
11
+ + lex_type_str,
12
+ + lex_type_io,
13
+ + lex_type_array,
14
+ + lex_type_generic,
15
+ +};
16
+ +
17
+ +struct ruby_parser {
18
+ + rb_parser_t *parser_params;
19
+ + enum lex_type type;
20
+ + union {
21
+ + struct lex_pointer_string lex_str;
22
+ + struct {
23
+ + VALUE file;
24
+ + } lex_io;
25
+ + struct {
26
+ + VALUE ary;
27
+ + } lex_array;
28
+ + } data;
29
+ +};
30
+ +// End for Kanayago
31
+ +
32
+ RUBY_SYMBOL_EXPORT_BEGIN
33
+ #ifdef UNIVERSAL_PARSER
34
+ const rb_parser_config_t *rb_ruby_parser_config(void);
35
+ diff --git a/ext/kanayago/ruby_parser.c b/ext/kanayago/ruby_parser.c
36
+ index 267f619..841db65 100644
37
+ --- a/ext/kanayago/ruby_parser.c
38
+ +++ b/ext/kanayago/ruby_parser.c
39
+ @@ -314,6 +314,44 @@ enc_mbc_to_codepoint(const char *p, const char *e, parser_encoding *enc)
40
+
41
+ extern VALUE rb_eArgError;
42
+
43
+ +// Add for Kanayago
44
+ +static void *
45
+ +xmalloc_mul_add(size_t x, size_t y, size_t z)
46
+ +{
47
+ + return rb_xmalloc_mul_add(x, y, z);
48
+ +}
49
+ +
50
+ +static VALUE
51
+ +suppress_tracing(VALUE (*func)(VALUE), VALUE arg)
52
+ +{
53
+ + return func(arg);
54
+ +}
55
+ +
56
+ +static ID
57
+ +make_temporary_id(size_t n)
58
+ +{
59
+ + return rb_make_temporary_id(n);
60
+ +}
61
+ +
62
+ +static int
63
+ +stderr_tty_p(void)
64
+ +{
65
+ + return rb_stderr_tty_p();
66
+ +}
67
+ +
68
+ +static VALUE
69
+ +reg_compile(VALUE str, int options, const char *sourcefile, int sourceline)
70
+ +{
71
+ + return rb_reg_compile(str, options, sourcefile, sourceline);
72
+ +}
73
+ +
74
+ +static VALUE
75
+ +reg_check_preprocess(VALUE val)
76
+ +{
77
+ + return rb_reg_check_preprocess(val);
78
+ +}
79
+ +// End of Add for Kanayago
80
+ +
81
+ static const rb_parser_config_t rb_global_parser_config = {
82
+ .malloc = ruby_xmalloc,
83
+ .calloc = ruby_xcalloc,
84
+ @@ -325,9 +363,9 @@ static const rb_parser_config_t rb_global_parser_config = {
85
+ .zalloc = zalloc,
86
+ .rb_memmove = memmove2,
87
+ .nonempty_memcpy = nonempty_memcpy,
88
+ - .xmalloc_mul_add = rb_xmalloc_mul_add,
89
+ + .xmalloc_mul_add = xmalloc_mul_add, // use xmalloc_mul_add for Kanayago
90
+
91
+ - .compile_callback = rb_suppress_tracing,
92
+ + .compile_callback = suppress_tracing, // use suppress_tracing for Kanayago
93
+ .reg_named_capture_assign = reg_named_capture_assign,
94
+
95
+ .attr_get = rb_attr_get,
96
+ @@ -335,7 +373,7 @@ static const rb_parser_config_t rb_global_parser_config = {
97
+ .ary_new_from_args = rb_ary_new_from_args,
98
+ .ary_unshift = rb_ary_unshift,
99
+
100
+ - .make_temporary_id = rb_make_temporary_id,
101
+ + .make_temporary_id = make_temporary_id, // use make_temporary_id for Kanayago
102
+ .is_local_id = is_local_id2,
103
+ .is_attrset_id = is_attrset_id2,
104
+ .is_global_name_punct = is_global_name_punct,
105
+ @@ -365,7 +403,7 @@ static const rb_parser_config_t rb_global_parser_config = {
106
+
107
+ .int2num = rb_int2num_inline,
108
+
109
+ - .stderr_tty_p = rb_stderr_tty_p,
110
+ + .stderr_tty_p = stderr_tty_p, //use stderr_tty_p for Kanayago
111
+ .write_error_str = rb_write_error_str,
112
+ .io_write = rb_io_write,
113
+ .io_flush = rb_io_flush,
114
+ @@ -412,8 +450,8 @@ static const rb_parser_config_t rb_global_parser_config = {
115
+ .gc_guard = gc_guard,
116
+ .gc_mark = rb_gc_mark,
117
+
118
+ - .reg_compile = rb_reg_compile,
119
+ - .reg_check_preprocess = rb_reg_check_preprocess,
120
+ + .reg_compile = reg_compile, // use reg_compile for Kanayago
121
+ + .reg_check_preprocess = reg_check_preprocess, // use reg_check_preprocess for Kanayago
122
+ .memcicmp = rb_memcicmp,
123
+
124
+ .compile_warn = rb_compile_warn,
125
+ @@ -443,27 +481,6 @@ static const rb_parser_config_t rb_global_parser_config = {
126
+ };
127
+ #endif
128
+
129
+ -enum lex_type {
130
+ - lex_type_str,
131
+ - lex_type_io,
132
+ - lex_type_array,
133
+ - lex_type_generic,
134
+ -};
135
+ -
136
+ -struct ruby_parser {
137
+ - rb_parser_t *parser_params;
138
+ - enum lex_type type;
139
+ - union {
140
+ - struct lex_pointer_string lex_str;
141
+ - struct {
142
+ - VALUE file;
143
+ - } lex_io;
144
+ - struct {
145
+ - VALUE ary;
146
+ - } lex_array;
147
+ - } data;
148
+ -};
149
+ -
150
+ static void
151
+ parser_mark(void *ptr)
152
+ {
153
+ @@ -501,7 +518,8 @@ parser_memsize(const void *ptr)
154
+ return rb_ruby_parser_memsize(parser->parser_params);
155
+ }
156
+
157
+ -static const rb_data_type_t ruby_parser_data_type = {
158
+ +// Not static const for Kanayago
159
+ +const rb_data_type_t ruby_parser_data_type = {
160
+ "parser",
161
+ {
162
+ parser_mark,