kanayago 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a3eb2ad59c4bf7537be2abff7da6f0b93e79173d8fa6ae51dee86a8966ee83b
4
- data.tar.gz: c2c4608ccf7ef25054abd327702f6fbd1713c31769bb78062290d8248bce9b0f
3
+ metadata.gz: 5c6e26071a97395c4f35c029908d78bba8a927f75129aa361367dc9cf549c3ca
4
+ data.tar.gz: be48eae66a3bc69256ff3a9dba5afa842b8b8876f7be66eb72d79774fb94d878
5
5
  SHA512:
6
- metadata.gz: 16dd25fc0a69b15b85010abd4bb4784d2559cd7a5a0024bd4b60814fa2b376249d222a1c16cd16c049db31cbe855fb12eb5571e3af872e9d83d36a08e9fdd6f8
7
- data.tar.gz: 07b9d5a878182eedb53d637dd6f4a02d8b53fdd8b0f7a6786ce045d3269abc52843c9792efcd9f482d1f7ebf4e7fa7e051548b998f48f81703799b975bf85fd1
6
+ metadata.gz: 5073effb4706b23b912a61f79a3bb40d2565e59f4d9805c6ba6f3006c613d8029340d2e164e67f94eb0341cc7b14d340ca5a9f862ee8c4fb84a2b8a86f1622b9
7
+ data.tar.gz: 5731b6e8463b384cbd3dfe7bd3bf67835ea0a4a8f51ac0ee84259f8fd04d414fd5b2e1ea38e79f6f3dfab83787207c86757dfa5bce0180bfbf6fbac1102665ef
data/CHANGELOG.md ADDED
@@ -0,0 +1,261 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.4.0]
11
+
12
+ ### Added
13
+ - Add Ruby class definitions for previously C-only AST nodes:
14
+ - `ScopeNode` - Scope representation with args and body
15
+ - `ClassNode` - Class definition with cpath, super, and body
16
+ - `ModuleNode` - Module definition with cpath, super, and body
17
+ - `DefinitionNode` - Method definition with mid and defn
18
+ - `BeginNode` - Begin statement with body
19
+ - `SelfNode` - Self reference with state
20
+ - `ConstantNode` - Constant reference with vid
21
+ - `OperatorCallNode` - Operator method call with recv, mid, and args
22
+ - `CallNode` - Method call with recv, mid, and args
23
+ - `FunctionCallNode` - Function call with mid and args
24
+ - `VariableCallNode` - Variable call with mid
25
+ - `ArgumentsNode` - Arguments information with ainfo hash
26
+ - `BlockNode` - Block representation (inherits from Array)
27
+ - `ConstantDeclarationNode` - Constant declaration with vid, else, and value
28
+ - `Colon2Node` - Scoped constant resolution (::) with mid and head
29
+ - `Colon3Node` - Top-level constant resolution (::) with mid
30
+
31
+ ### Changed
32
+ - Use `rb_intern("@...")` instead of `symbol()` macro for instance variable access in C layer
33
+ - Remove redundant getter methods from C layer (scope_node.c and kanayago.c)
34
+ - Rely on Ruby's `attr_reader` for attribute access instead of C-defined methods
35
+
36
+ ### Fixed
37
+ - Fix SEGV in args_ainfo_tohash function
38
+
39
+ ## [0.3.0] - 2025-10-25
40
+
41
+ ### Fixed
42
+ - Fix gem install kanayago
43
+
44
+ ## [0.2.0] - 2025-10-25
45
+
46
+ ### Added
47
+ - Add sample for Kanayago usecase
48
+ - Support NODE_FOR_MASGN, NODE_MASGN, NODE_DASGN, NODE_ONCE, NODE_ERRINFO, NODE_POSTEXE, and NODE_ERROR
49
+ - Support NODE_ARGS_AUX, NODE_OPT_ARG, NODE_KW_ARG, NODE_POSTARG, NODE_ARGSCAT, and NODE_ARGSPUSH
50
+ - Support NODE_SPLAT and NODE_BLOCK_PASS
51
+ - Support NODE_YIELD and NODE_LAMBDA
52
+ - Support NODE_OP_ASGN1, NODE_OP_ASGN2, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR and NODE_OP_CDECL
53
+ - Support NODE_NTH_REF and NODE_BACK_REF
54
+ - Support NODE_DVAR
55
+ - Support NODE_DSYM
56
+ - Support NODE_BREAK and NODE_NEXT
57
+ - Support NODE_REDO
58
+ - Support NODE_DEFINED
59
+ - Support NODE_ITER, NODE_RETRY, NODE_RESCUE, NODE_RESBODY and NODE_ENSURE
60
+ - Support NODE_HASH, NODE_IN, NODE_ARYPTN, NODE_HSHPTN and NODE_FNDPTN
61
+ - Support NODE_MATCH, NODE_MATCH2 and NODE_MATCH3
62
+ - Support NODE_REGX and NODE_DREGX
63
+ - Support NODE_XSTR and NODE_DXSTR
64
+ - Support NODE_FLIP2 and NODE_FLIP3
65
+ - Support NODE_DOT2 and NODE_DOT3
66
+ - Support NODE_CASE, NODE_CASE2, NODE_CASE3 and NODE_WHEN
67
+ - Support NODE_QCALL, NODE_SUPER and NODE_ZSUPER
68
+ - Support NODE_DEFS, NODE_SCLASS and NODE_ATTRASGN
69
+ - Support NODE_COLON3
70
+ - Support NODE_VCALL
71
+ - Support NODE_CVASGN
72
+ - Support NODE_IASGN
73
+ - Support NODE_DSTR and NODE_EVSTR
74
+ - Support NODE_GASGN
75
+ - Support NODE_RETURN
76
+ - Support NODE_UNDEF
77
+ - Support NODE_VALIAS
78
+ - Support NODE_ALIAS
79
+ - Support NODE_FOR
80
+ - Support NODE_UNTIL
81
+ - Add NODE_WHILE test
82
+ - Support NODE_WHILE
83
+ - Support NODE_CVAR
84
+ - Introduce debug.gem
85
+ - Support NODE_MODULE
86
+ - Support NODE_SELF
87
+ - Support NODE_GVAR
88
+ - Support NODE_AND
89
+ - Support NODE_OR
90
+ - Support NODE_FALSE
91
+ - Support NODE_TRUE
92
+ - Support NODE_NIL
93
+ - Support NODE_ENCODING
94
+ - Add typeprof.conf.json
95
+ - Support NODE_ZLIST
96
+ - Introduce TypeProf for development
97
+ - Support __LINE__ literal node
98
+ - Support __FILE__ literal node
99
+ - Support Ruby 3.4
100
+ - Introduce Kanayago gem build and install CI
101
+
102
+ ### Changed
103
+ - Update RuboCop
104
+ - Split kanayago.patch file to more easier maintain multi Ruby Parser
105
+ - Update bin/setup
106
+ - Use Node class attr_reader to access Node values
107
+ - Split Literal Node code
108
+ - Split Kanayago::ScopeNode code
109
+ - Update README.md
110
+ - Update test CI
111
+ - Update kanayago.patch
112
+ - Improve import Ruby Parser file's
113
+ - Update RuboCop setting
114
+ - Migrate to Kanayago parsed AST hash to Instance
115
+ - Update kanayago.patch for Ruby head build
116
+ - Update CI flow
117
+ - Update Kanayago build flow
118
+ - Update Ruby Parser's file
119
+ - Update lrama
120
+ - Split file for Variable Node's
121
+ - Move Statement Node class definition
122
+ - Rename LeftAssignNode to LocalAssignmentNode
123
+
124
+ ### Fixed
125
+ - Fix RuboCop Lint error
126
+ - Fix NODE_IF attributes access
127
+ - Fix Kanayago::ListNode holds data
128
+ - Fix NODE_FOR loop
129
+ - Fix Ruby head build failure
130
+ - Add internal/namespace.h for Ruby head Parser dependency
131
+ - Fix RuboCop SEGV in Ruby head
132
+ - Apply auto correct
133
+ - Update json
134
+ - Update zlib
135
+ - Fix CI failures
136
+ - Add ext/kanayago/probes.h
137
+ - Fix Ruby 3.4 dependency
138
+ - Fix Ruby 3.4 build
139
+ - Fix file copy error handling
140
+ - Fix build gem
141
+ - Add dependency for Universal Parser
142
+ - Fix code lint
143
+
144
+ ### Removed
145
+ - Remove unneeded comment
146
+ - Remove Lrama that unneeded any more
147
+
148
+ ### CI
149
+ - Add fail-fast: false
150
+ - Suppress already initialized constant warning
151
+
152
+ ## [0.1.1] - 2024-09-06
153
+
154
+ ### Changed
155
+ - Bump up v0.1.1
156
+
157
+ ## [0.1.0] - 2024-09-06
158
+
159
+ ### Added
160
+ - Support NODE_UNLESS
161
+ - Add class description
162
+ - Add rubocop check in CI
163
+ - Add rubocop-on-rbs
164
+ - Add rubocop-rake
165
+ - Add rubocop and rubocop-minitest for development
166
+ - Add refine_tree_parse module function
167
+ - Support NODE_IVAR
168
+ - Add Referenced implementations link
169
+ - Support NODE_SYM
170
+ - Support method definition
171
+ - Add NODE_CONST test
172
+ - Support NODE_CDECL
173
+ - Support NODE_CONST
174
+ - Support NODE_IF
175
+ - Support NODE_LVAR
176
+ - Add gdb rake task
177
+ - Support NODE_FCALL
178
+ - Introduce literal_node_to_hash function for get literal node value
179
+ - Support NODE_LASGN
180
+ - Add NODE_STR parse test
181
+ - Add NODE_IMAGINARY parse test
182
+ - Add NODE_RATIONAL parse test
183
+ - Add NODE_FLOAT parse test
184
+ - Add parse NODE_INTEGER test
185
+ - Add GitHub Actions for test
186
+ - Add Ruby's Parser files
187
+ - Add run task for running test.rb
188
+ - Add test for NODE_INTEGER
189
+ - Support NODE_CALL
190
+ - Support NODE_STR
191
+ - Support NODE_IMAGINARY
192
+ - Support NODE_BLOCK
193
+ - Support NODE_RATIONAL
194
+ - Support NODE_FLOAT
195
+ - Support NODE_OPCALL and NODE_LIST
196
+ - Parse Ruby code and return Hash
197
+ - Build Mjollnir with Ruby Parser
198
+ - Build ruby-parser for Mjollnir
199
+ - Add ruby_parser:build task
200
+ - Add lex.c generation for ruby_parser:import task
201
+ - Add ruby_parser:clean task
202
+ - Add Mjollnir.parse method
203
+ - Import ruby parser
204
+ - Add lrama
205
+ - Add 金屋子 for README.md
206
+
207
+ ### Changed
208
+ - Rename parse to kanayago_parse
209
+ - Using test-queue
210
+ - Auto correct to Gemfile
211
+ - Auto correct Hash
212
+ - Fix required_ruby_version to > 3.3.0
213
+ - Rename to Kanayago
214
+ - Ignore refine_tree.gemspec in Metrics/BlockLength
215
+ - Format Rakefile
216
+ - Rename sig/refine_tree.rb to sig/refine_tree.rbs
217
+ - require rubocop-minitest and rubocop-rake
218
+ - Generate .rubocop.yml and .rubocop_todo.yml
219
+ - Move minitest to test group in Gemfile
220
+ - Change to key type from String to Symbol
221
+ - Fix require path for test
222
+ - Fix install gem name
223
+ - Rename to RefineTree
224
+ - Fix GitHub Actions
225
+ - Add PATH for GitHub Actions
226
+ - Add install check for GitHub Actions
227
+ - Add depend task for rake build and rake install
228
+ - Fix Mjollnir.parse sample in README.md
229
+ - Fix username in README.md
230
+ - Merge Ruby's Parser struct and enum definition for Mjollnir
231
+ - Fix Mjollnir gem summary and description
232
+ - Fix gem's description
233
+ - Fix README.md
234
+ - Fix Mjollnir gem build and install
235
+ - Apply RuboCop auto correct to Gemfile
236
+ - Apply RuboCop auto correct for test helper
237
+ - Apply RuboCop auto correct
238
+ - Fix Mjollnir build
239
+ - Update TODO's
240
+
241
+ ### Fixed
242
+ - Fix SEGV
243
+ - Fix NODE_BLOCK support
244
+ - Remove allowed_push_host
245
+ - Remove parse.c and parse.h
246
+ - Ignore parse.c and parse.h
247
+ - Fix gem name in GitHub Action
248
+
249
+ ### Removed
250
+ - Remove uneeded file
251
+ - Remove unnecessary include header
252
+ - Remove unnecessary code in Rakefile
253
+ - Remove ext/mjollnir/ruby-parser directory
254
+ - Remove uneeded headers
255
+ - Remove gem build for CI
256
+
257
+ ### Internal
258
+ - Suppress warning
259
+ - Add newline
260
+ - Some refactor for mjollnir.c
261
+ - Using rb_ruby_ast_data_get function
data/README.md CHANGED
@@ -31,7 +31,7 @@ Finally, build `Kanayago` gem and install it.
31
31
 
32
32
  ```console
33
33
  bundle exec rake build
34
- gem install pkg/kanayago-0.3.0.gem
34
+ gem install pkg/kanayago-0.4.0.gem
35
35
  ```
36
36
 
37
37
  ## Usage
@@ -33,84 +33,36 @@ operator_call_node_new(const NODE *node)
33
33
  {
34
34
  VALUE obj = rb_class_new_instance(0, 0, rb_cOperatorCallNode);
35
35
 
36
- rb_ivar_set(obj, symbol("recv"), ast_to_node_instance(RNODE_OPCALL(node)->nd_recv));
37
- rb_ivar_set(obj, symbol("mid"), ID2SYM(RNODE_OPCALL(node)->nd_mid));
38
- rb_ivar_set(obj, symbol("args"), ast_to_node_instance(RNODE_OPCALL(node)->nd_args));
36
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_OPCALL(node)->nd_recv));
37
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_OPCALL(node)->nd_mid));
38
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_OPCALL(node)->nd_args));
39
39
 
40
40
  return obj;
41
41
  }
42
42
 
43
- static VALUE
44
- operator_call_node_recv_get(VALUE self)
45
- {
46
- return rb_ivar_get(self, symbol("recv"));
47
- }
48
-
49
- static VALUE
50
- operator_call_node_mid_get(VALUE self)
51
- {
52
- return rb_ivar_get(self, symbol("mid"));
53
- }
54
-
55
- static VALUE
56
- operator_call_node_args_get(VALUE self)
57
- {
58
- return rb_ivar_get(self, symbol("args"));
59
- }
60
-
61
43
  static VALUE
62
44
  call_node_new(const NODE *node)
63
45
  {
64
46
  VALUE result = rb_class_new_instance(0, 0, rb_cCallNode);
65
47
 
66
- rb_ivar_set(result, symbol("recv"), ast_to_node_instance(RNODE_OPCALL(node)->nd_recv));
67
- rb_ivar_set(result, symbol("mid"), ID2SYM(RNODE_CALL(node)->nd_mid));
68
- rb_ivar_set(result, symbol("args"), ast_to_node_instance(RNODE_CALL(node)->nd_args));
48
+ rb_ivar_set(result, rb_intern("@recv"), ast_to_node_instance(RNODE_OPCALL(node)->nd_recv));
49
+ rb_ivar_set(result, rb_intern("@mid"), ID2SYM(RNODE_CALL(node)->nd_mid));
50
+ rb_ivar_set(result, rb_intern("@args"), ast_to_node_instance(RNODE_CALL(node)->nd_args));
69
51
 
70
52
  return result;
71
53
  }
72
54
 
73
- static VALUE
74
- call_node_recv_get(VALUE self)
75
- {
76
- return rb_ivar_get(self, symbol("recv"));
77
- }
78
-
79
- static VALUE
80
- call_node_mid_get(VALUE self)
81
- {
82
- return rb_ivar_get(self, symbol("mid"));
83
- }
84
-
85
- static VALUE
86
- call_node_args_get(VALUE self)
87
- {
88
- return rb_ivar_get(self, symbol("args"));
89
- }
90
-
91
55
  static VALUE
92
56
  function_call_node_new(const NODE *node)
93
57
  {
94
58
  VALUE obj = rb_class_new_instance(0, 0, rb_cFunctionCallNode);
95
59
 
96
- rb_ivar_set(obj, symbol("mid"), ID2SYM(RNODE_FCALL(node)->nd_mid));
97
- rb_ivar_set(obj, symbol("args"), ast_to_node_instance(RNODE_FCALL(node)->nd_args));
60
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_FCALL(node)->nd_mid));
61
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_FCALL(node)->nd_args));
98
62
 
99
63
  return obj;
100
64
  }
101
65
 
102
- static VALUE
103
- function_call_node_mid_get(VALUE self)
104
- {
105
- return rb_ivar_get(self, symbol("mid"));
106
- }
107
-
108
- static VALUE
109
- function_call_node_args_get(VALUE self)
110
- {
111
- return rb_ivar_get(self, symbol("args"));
112
- }
113
-
114
66
  static VALUE
115
67
  variable_call_node_new(const NODE *node)
116
68
  {
@@ -121,12 +73,6 @@ variable_call_node_new(const NODE *node)
121
73
  return obj;
122
74
  }
123
75
 
124
- static VALUE
125
- variable_call_node_mid_get(VALUE self)
126
- {
127
- return rb_ivar_get(self, rb_intern("@mid"));
128
- }
129
-
130
76
  static VALUE
131
77
  list_node_new(const NODE *node)
132
78
  {
@@ -151,24 +97,12 @@ definition_node_new(const NODE *node)
151
97
  {
152
98
  VALUE obj = rb_class_new_instance(0, 0, rb_cDefinitionNode);
153
99
 
154
- rb_ivar_set(obj, symbol("mid"), ID2SYM(RNODE_DEFN(node)->nd_mid));
155
- rb_ivar_set(obj, symbol("defn"), ast_to_node_instance(RNODE_DEFN(node)->nd_defn));
100
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_DEFN(node)->nd_mid));
101
+ rb_ivar_set(obj, rb_intern("@defn"), ast_to_node_instance(RNODE_DEFN(node)->nd_defn));
156
102
 
157
103
  return obj;
158
104
  }
159
105
 
160
- static VALUE
161
- definition_node_mid_get(VALUE self)
162
- {
163
- return rb_ivar_get(self, symbol("mid"));
164
- }
165
-
166
- static VALUE
167
- definition_node_defn_get(VALUE self)
168
- {
169
- return rb_ivar_get(self, symbol("defn"));
170
- }
171
-
172
106
  static VALUE
173
107
  block_node_new(const NODE *node)
174
108
  {
@@ -188,47 +122,23 @@ constant_node_new(const NODE *node)
188
122
  {
189
123
  VALUE obj = rb_class_new_instance(0, 0, rb_cConstantNode);
190
124
 
191
- rb_ivar_set(obj, symbol("vid"), ID2SYM(RNODE_CONST(node)->nd_vid));
125
+ rb_ivar_set(obj, rb_intern("@vid"), ID2SYM(RNODE_CONST(node)->nd_vid));
192
126
 
193
127
  return obj;
194
128
  }
195
129
 
196
- static VALUE
197
- constant_node_vid_get(VALUE self)
198
- {
199
- return rb_ivar_get(self, symbol("vid"));
200
- }
201
-
202
130
  static VALUE
203
131
  constant_declaration_node_new(const NODE *node)
204
132
  {
205
133
  VALUE obj = rb_class_new_instance(0, 0, rb_cConstantDeclarationNode);
206
134
 
207
- rb_ivar_set(obj, symbol("vid"), ID2SYM(RNODE_CDECL(node)->nd_vid));
208
- rb_ivar_set(obj, symbol("else"), ast_to_node_instance(RNODE_CDECL(node)->nd_else));
209
- rb_ivar_set(obj, symbol("value"), ast_to_node_instance(RNODE_CDECL(node)->nd_value));
135
+ rb_ivar_set(obj, rb_intern("@vid"), ID2SYM(RNODE_CDECL(node)->nd_vid));
136
+ rb_ivar_set(obj, rb_intern("@else"), ast_to_node_instance(RNODE_CDECL(node)->nd_else));
137
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_CDECL(node)->nd_value));
210
138
 
211
139
  return obj;
212
140
  }
213
141
 
214
- static VALUE
215
- constant_declaration_node_vid_get(VALUE self)
216
- {
217
- return rb_ivar_get(self, symbol("vid"));
218
- }
219
-
220
- static VALUE
221
- constant_declaration_node_else_get(VALUE self)
222
- {
223
- return rb_ivar_get(self, symbol("else"));
224
- }
225
-
226
- static VALUE
227
- constant_declaration_node_value_get(VALUE self)
228
- {
229
- return rb_ivar_get(self, symbol("value"));
230
- }
231
-
232
142
  static VALUE
233
143
  node_literal_to_hash(const NODE *node)
234
144
  {
@@ -271,31 +181,13 @@ class_node_new(const NODE *node)
271
181
  {
272
182
  VALUE obj = rb_class_new_instance(0, 0, rb_cClassNode);
273
183
 
274
- rb_ivar_set(obj, symbol("cpath"), ast_to_node_instance(RNODE_CLASS(node)->nd_cpath));
275
- rb_ivar_set(obj, symbol("super"), ast_to_node_instance(RNODE_CLASS(node)->nd_super));
276
- rb_ivar_set(obj, symbol("body"), ast_to_node_instance(RNODE_CLASS(node)->nd_body));
184
+ rb_ivar_set(obj, rb_intern("@cpath"), ast_to_node_instance(RNODE_CLASS(node)->nd_cpath));
185
+ rb_ivar_set(obj, rb_intern("@super"), ast_to_node_instance(RNODE_CLASS(node)->nd_super));
186
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_CLASS(node)->nd_body));
277
187
 
278
188
  return obj;
279
189
  }
280
190
 
281
- static VALUE
282
- class_node_cpath_get(VALUE self)
283
- {
284
- return rb_ivar_get(self, symbol("cpath"));
285
- }
286
-
287
- static VALUE
288
- class_node_super_get(VALUE self)
289
- {
290
- return rb_ivar_get(self, symbol("super"));
291
- }
292
-
293
- static VALUE
294
- class_node_body_get(VALUE self)
295
- {
296
- return rb_ivar_get(self, symbol("body"));
297
- }
298
-
299
191
  static VALUE
300
192
  module_node_new(const NODE *node)
301
193
  {
@@ -313,24 +205,12 @@ colon2_node_new(const NODE *node)
313
205
  {
314
206
  VALUE obj = rb_class_new_instance(0, 0, rb_cColon2Node);
315
207
 
316
- rb_ivar_set(obj, symbol("mid"), ID2SYM(RNODE_COLON2(node)->nd_mid));
317
- rb_ivar_set(obj, symbol("head"), ast_to_node_instance(RNODE_COLON2(node)->nd_head));
208
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_COLON2(node)->nd_mid));
209
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_COLON2(node)->nd_head));
318
210
 
319
211
  return obj;
320
212
  }
321
213
 
322
- static VALUE
323
- colon2_node_mid_get(VALUE self)
324
- {
325
- return rb_ivar_get(self, symbol("mid"));
326
- }
327
-
328
- static VALUE
329
- colon2_node_head_get(VALUE self)
330
- {
331
- return rb_ivar_get(self, symbol("head"));
332
- }
333
-
334
214
  static VALUE
335
215
  colon3_node_new(const NODE *node)
336
216
  {
@@ -341,28 +221,16 @@ colon3_node_new(const NODE *node)
341
221
  return obj;
342
222
  }
343
223
 
344
- static VALUE
345
- colon3_node_mid_get(VALUE self)
346
- {
347
- return rb_ivar_get(self, rb_intern("@mid"));
348
- }
349
-
350
224
  static VALUE
351
225
  begin_node_new(const NODE *node)
352
226
  {
353
227
  VALUE obj = rb_class_new_instance(0, 0, rb_cBeginNode);
354
228
 
355
- rb_ivar_set(obj, symbol("body"), ast_to_node_instance(RNODE_BEGIN(node)->nd_body));
229
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_BEGIN(node)->nd_body));
356
230
 
357
231
  return obj;
358
232
  }
359
233
 
360
- static VALUE
361
- begin_node_body_get(VALUE self)
362
- {
363
- return rb_ivar_get(self, symbol("body"));
364
- }
365
-
366
234
  static VALUE
367
235
  args_ainfo_to_hash(const struct rb_args_info ainfo)
368
236
  {
@@ -373,9 +241,11 @@ args_ainfo_to_hash(const struct rb_args_info ainfo)
373
241
  rb_hash_aset(result, symbol("pre_init"), ast_to_node_instance(ainfo.pre_init));
374
242
  rb_hash_aset(result, symbol("post_args_num"), INT2NUM(ainfo.post_args_num));
375
243
  rb_hash_aset(result, symbol("post_init"), ast_to_node_instance(ainfo.post_init));
376
- rb_hash_aset(result, symbol("first_post_arg"), Qnil);
377
- rb_hash_aset(result, symbol("rest_arg"), Qnil);
378
- rb_hash_aset(result, symbol("block_arg"), Qnil);
244
+
245
+ rb_hash_aset(result, symbol("first_post_arg"), ainfo.first_post_arg ? ID2SYM(ainfo.first_post_arg) : Qnil);
246
+ rb_hash_aset(result, symbol("rest_arg"), ainfo.rest_arg ? ID2SYM(ainfo.rest_arg) : Qnil);
247
+ rb_hash_aset(result, symbol("block_arg"), ainfo.block_arg ? ID2SYM(ainfo.block_arg) : Qnil);
248
+
379
249
  rb_hash_aset(result, symbol("opt_args"), ast_to_node_instance((const NODE *)(ainfo.opt_args)));
380
250
  rb_hash_aset(result, symbol("kw_args"), ast_to_node_instance((const NODE *)(ainfo.kw_args)));
381
251
  rb_hash_aset(result, symbol("kw_rest_arg"), ast_to_node_instance(ainfo.kw_rest_arg));
@@ -389,17 +259,11 @@ arguments_node_new(const NODE *node)
389
259
  VALUE obj = rb_class_new_instance(0, 0, rb_cArgumentsNode);
390
260
  VALUE ainfo_hash = args_ainfo_to_hash(RNODE_ARGS(node)->nd_ainfo);
391
261
 
392
- rb_ivar_set(obj, symbol("ainfo"), ainfo_hash);
262
+ rb_ivar_set(obj, rb_intern("@ainfo"), ainfo_hash);
393
263
 
394
264
  return obj;
395
265
  }
396
266
 
397
- static VALUE
398
- arguments_node_ainfo_get(VALUE self)
399
- {
400
- return rb_ivar_get(self, symbol("ainfo"));
401
- }
402
-
403
267
  static VALUE
404
268
  self_node_new(const NODE *node)
405
269
  {
@@ -419,6 +283,10 @@ ast_to_node_instance(const NODE *node)
419
283
  return Qnil;
420
284
  }
421
285
 
286
+ if (node == (NODE *)-1) {
287
+ return Qnil;
288
+ }
289
+
422
290
  type = nd_type(node);
423
291
 
424
292
  switch (type) {
@@ -674,38 +542,22 @@ Init_kanayago(void)
674
542
  Init_StringNode(rb_mKanayago);
675
543
 
676
544
  rb_cConstantNode = rb_define_class_under(rb_mKanayago, "ConstantNode", rb_cObject);
677
- rb_define_method(rb_cConstantNode, "vid", constant_node_vid_get, 0);
678
545
 
679
546
  rb_cConstantDeclarationNode = rb_define_class_under(rb_mKanayago, "ConstantDeclarationNode", rb_cObject);
680
- rb_define_method(rb_cConstantDeclarationNode, "vid", constant_declaration_node_vid_get, 0);
681
- rb_define_method(rb_cConstantDeclarationNode, "else", constant_declaration_node_else_get, 0);
682
- rb_define_method(rb_cConstantDeclarationNode, "value", constant_declaration_node_value_get, 0);
683
547
 
684
548
  rb_cDefinitionNode = rb_define_class_under(rb_mKanayago, "DefinitionNode", rb_cObject);
685
- rb_define_method(rb_cDefinitionNode, "mid", definition_node_mid_get, 0);
686
- rb_define_method(rb_cDefinitionNode, "defn", definition_node_defn_get, 0);
687
549
 
688
550
  rb_cOperatorCallNode = rb_define_class_under(rb_mKanayago, "OperatorCallNode", rb_cObject);
689
- rb_define_method(rb_cOperatorCallNode, "recv", operator_call_node_recv_get, 0);
690
- rb_define_method(rb_cOperatorCallNode, "mid", operator_call_node_mid_get, 0);
691
- rb_define_method(rb_cOperatorCallNode, "args", operator_call_node_args_get, 0);
692
551
 
693
552
  rb_cListNode = rb_define_class_under(rb_mKanayago, "ListNode", rb_cObject);
694
553
 
695
554
  rb_cArgumentsNode = rb_define_class_under(rb_mKanayago, "ArgumentsNode", rb_cObject);
696
- rb_define_method(rb_cArgumentsNode, "ainfo", arguments_node_ainfo_get, 0);
697
555
 
698
556
  rb_cCallNode = rb_define_class_under(rb_mKanayago, "CallNode", rb_cObject);
699
- rb_define_method(rb_cCallNode, "recv", call_node_recv_get, 0);
700
- rb_define_method(rb_cCallNode, "mid", call_node_mid_get, 0);
701
- rb_define_method(rb_cCallNode, "args", call_node_args_get, 0);
702
557
 
703
558
  rb_cFunctionCallNode = rb_define_class_under(rb_mKanayago, "FunctionCallNode", rb_cObject);
704
- rb_define_method(rb_cFunctionCallNode, "mid", function_call_node_mid_get, 0);
705
- rb_define_method(rb_cFunctionCallNode, "args", function_call_node_args_get, 0);
706
559
 
707
560
  rb_cVariableCallNode = rb_define_class_under(rb_mKanayago, "VariableCallNode", rb_cObject);
708
- rb_define_method(rb_cVariableCallNode, "mid", variable_call_node_mid_get, 0);
709
561
 
710
562
  // For Statement Node(e.g. Kanayago::IfStatementNode)
711
563
  Init_StatementNode(rb_mKanayago);
@@ -713,21 +565,14 @@ Init_kanayago(void)
713
565
  rb_cBlockNode = rb_define_class_under(rb_mKanayago, "BlockNode", rb_cArray);
714
566
 
715
567
  rb_cBeginNode = rb_define_class_under(rb_mKanayago, "BeginNode", rb_cObject);
716
- rb_define_method(rb_cBeginNode, "body", begin_node_body_get, 0);
717
568
 
718
569
  rb_cClassNode = rb_define_class_under(rb_mKanayago, "ClassNode", rb_cObject);
719
- rb_define_method(rb_cClassNode, "cpath", class_node_cpath_get, 0);
720
- rb_define_method(rb_cClassNode, "super", class_node_super_get, 0);
721
- rb_define_method(rb_cClassNode, "body", class_node_body_get, 0);
722
570
 
723
571
  rb_cModuleNode = rb_define_class_under(rb_mKanayago, "ModuleNode", rb_cObject);
724
572
 
725
573
  rb_cColon2Node = rb_define_class_under(rb_mKanayago, "Colon2Node", rb_cObject);
726
- rb_define_method(rb_cColon2Node, "mid", colon2_node_mid_get, 0);
727
- rb_define_method(rb_cColon2Node, "head", colon2_node_head_get, 0);
728
574
 
729
575
  rb_cColon3Node = rb_define_class_under(rb_mKanayago, "Colon3Node", rb_cObject);
730
- rb_define_method(rb_cColon3Node, "mid", colon3_node_mid_get, 0);
731
576
 
732
577
  // For Variable Node(e.g. Kanayago::LocalVariableNode)
733
578
  Init_VariableNode(rb_mKanayago);
@@ -7,28 +7,14 @@ scope_node_new(const NODE *node)
7
7
  {
8
8
  VALUE result = rb_class_new_instance(0, 0, rb_cScopeNode);
9
9
 
10
- rb_ivar_set(result, symbol("args"), ast_to_node_instance((const NODE *)(RNODE_SCOPE(node)->nd_args)));
11
- rb_ivar_set(result, symbol("body"), ast_to_node_instance(RNODE_SCOPE(node)->nd_body));
10
+ rb_ivar_set(result, rb_intern("@args"), ast_to_node_instance((const NODE *)(RNODE_SCOPE(node)->nd_args)));
11
+ rb_ivar_set(result, rb_intern("@body"), ast_to_node_instance(RNODE_SCOPE(node)->nd_body));
12
12
 
13
13
  return result;
14
14
  }
15
15
 
16
- static VALUE
17
- scope_node_args_get(VALUE self)
18
- {
19
- return rb_ivar_get(self, symbol("args"));
20
- }
21
-
22
- static VALUE
23
- scope_node_body_get(VALUE self)
24
- {
25
- return rb_ivar_get(self, symbol("body"));
26
- }
27
-
28
16
  void
29
17
  Init_ScopeNode(VALUE module)
30
18
  {
31
19
  rb_cScopeNode = rb_define_class_under(module, "ScopeNode", rb_cObject);
32
- rb_define_method(rb_cScopeNode, "args", scope_node_args_get, 0);
33
- rb_define_method(rb_cScopeNode, "body", scope_node_body_get, 0);
34
20
  }
@@ -21,8 +21,9 @@ VALUE
21
21
  dynamic_variable_node_new(const NODE *node)
22
22
  {
23
23
  VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicVariableNode);
24
+ ID vid = RNODE_DVAR(node)->nd_vid;
24
25
 
25
- rb_ivar_set(obj, rb_intern("@vid"), ID2SYM(RNODE_DVAR(node)->nd_vid));
26
+ rb_ivar_set(obj, rb_intern("@vid"), vid ? ID2SYM(vid) : Qnil);
26
27
 
27
28
  return obj;
28
29
  }
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class OperatorCallNode
5
+ attr_reader :recv, :mid, :args
6
+ end
7
+
8
+ class CallNode
9
+ attr_reader :recv, :mid, :args
10
+ end
11
+
12
+ class FunctionCallNode
13
+ attr_reader :mid, :args
14
+ end
15
+
16
+ class VariableCallNode
17
+ attr_reader :mid
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class ConstantDeclarationNode
5
+ attr_reader :vid, :else, :value
6
+ end
7
+
8
+ class Colon2Node
9
+ attr_reader :mid, :head
10
+ end
11
+
12
+ class Colon3Node
13
+ attr_reader :mid
14
+ end
15
+ end
@@ -84,4 +84,8 @@ module Kanayago
84
84
  class BackRefNode
85
85
  attr_reader :nth
86
86
  end
87
+
88
+ class SelfNode
89
+ attr_reader :state
90
+ end
87
91
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanayago
4
+ class ScopeNode
5
+ attr_reader :args, :body
6
+ end
7
+
8
+ class BlockNode # rubocop:disable Lint/EmptyClass
9
+ end
10
+
11
+ class ArgumentsNode
12
+ attr_reader :ainfo
13
+ end
14
+ end
@@ -61,10 +61,22 @@ module Kanayago
61
61
  attr_reader :id, :value
62
62
  end
63
63
 
64
+ class DefinitionNode
65
+ attr_reader :mid, :defn
66
+ end
67
+
64
68
  class SingletonDefinitionNode
65
69
  attr_reader :recv, :mid, :defn
66
70
  end
67
71
 
72
+ class ClassNode
73
+ attr_reader :cpath, :super, :body
74
+ end
75
+
76
+ class ModuleNode
77
+ attr_reader :cpath, :super, :body
78
+ end
79
+
68
80
  class SingletonClassNode
69
81
  attr_reader :recv, :body
70
82
  end
@@ -122,6 +134,10 @@ module Kanayago
122
134
  attr_reader :body, :iter
123
135
  end
124
136
 
137
+ class BeginNode
138
+ attr_reader :body
139
+ end
140
+
125
141
  class EnsureNode
126
142
  attr_reader :head, :ensr
127
143
  end
@@ -20,4 +20,8 @@ module Kanayago
20
20
  class GlobalVariableNode
21
21
  attr_reader :vid
22
22
  end
23
+
24
+ class ConstantNode
25
+ attr_reader :vid
26
+ end
23
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanayago
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
data/lib/kanayago.rb CHANGED
@@ -8,26 +8,13 @@ require_relative 'kanayago/string_node'
8
8
  require_relative 'kanayago/statement_node'
9
9
  require_relative 'kanayago/variable_node'
10
10
  require_relative 'kanayago/pattern_node'
11
+ require_relative 'kanayago/call_node'
12
+ require_relative 'kanayago/scope_node'
13
+ require_relative 'kanayago/constant_node'
11
14
 
12
15
  # Parse Ruby code with Ruby's Parser(Universal Parser)
13
16
  module Kanayago
14
17
  def self.parse(source)
15
18
  kanayago_parse(source)
16
19
  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
33
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanayago
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - S-H-GAMELINKS
@@ -20,6 +20,7 @@ files:
20
20
  - ".rubocop.yml"
21
21
  - ".rubocop_todo.yml"
22
22
  - ".ruby-version"
23
+ - CHANGELOG.md
23
24
  - LICENSE.txt
24
25
  - README.md
25
26
  - Rakefile
@@ -39,8 +40,11 @@ files:
39
40
  - ext/kanayago/variable_node.c
40
41
  - ext/kanayago/variable_node.h
41
42
  - lib/kanayago.rb
43
+ - lib/kanayago/call_node.rb
44
+ - lib/kanayago/constant_node.rb
42
45
  - lib/kanayago/literal_node.rb
43
46
  - lib/kanayago/pattern_node.rb
47
+ - lib/kanayago/scope_node.rb
44
48
  - lib/kanayago/statement_node.rb
45
49
  - lib/kanayago/string_node.rb
46
50
  - lib/kanayago/variable_node.rb