Class: Ikra::AST::Visitor

Inherits:
Object show all
Defined in:
lib/ast/visitor.rb

Instance Method Summary collapse

Instance Method Details

#visit_array_node(node) ⇒ Object



227
228
229
230
231
232
233
# File 'lib/ast/visitor.rb', line 227

def visit_array_node(node)
    visit_node(node)

    for value in node.values
        value.accept(self)
    end
end

#visit_begin_node(node) ⇒ Object



360
361
362
363
364
365
366
# File 'lib/ast/visitor.rb', line 360

def visit_begin_node(node)
    visit_node(node)

    node.body_stmts.each do |stmt|
        stmt.accept(self)
    end
end

#visit_block_def_node(node) ⇒ Object



257
258
259
260
# File 'lib/ast/visitor.rb', line 257

def visit_block_def_node(node)
    visit_node(node)
    node.body.accept(self)
end

#visit_bool_node(node) ⇒ Object



288
289
290
# File 'lib/ast/visitor.rb', line 288

def visit_bool_node(node)
    visit_node(node)
end

#visit_break_node(node) ⇒ Object



340
341
342
# File 'lib/ast/visitor.rb', line 340

def visit_break_node(node)
    visit_node(node)
end

#visit_class_def_node(node) ⇒ Object



210
211
212
213
214
215
216
217
218
219
220
# File 'lib/ast/visitor.rb', line 210

def visit_class_def_node(node)
    visit_node(node)

    node.instance_variables.each do |iv|
        iv.accept(self)
    end

    node.instance_methods.each do |im|
        im.accept(self)
    end
end

#visit_const_node(node) ⇒ Object



262
263
264
# File 'lib/ast/visitor.rb', line 262

def visit_const_node(node)
    visit_node(node)
end

#visit_float_node(node) ⇒ Object



283
284
285
286
# File 'lib/ast/visitor.rb', line 283

def visit_float_node(node)
    visit_node(node)

end

#visit_for_node(node) ⇒ Object



304
305
306
307
308
309
310
# File 'lib/ast/visitor.rb', line 304

def visit_for_node(node)
    visit_node(node)

    node.range_from.accept(self)
    node.range_to.accept(self)
    node.body_stmts.accept(self)
end

#visit_hash_node(node) ⇒ Object



239
240
241
242
243
244
245
246
# File 'lib/ast/visitor.rb', line 239

def visit_hash_node(node)
    visit_node(node)

    node.hash.each do |key, value|
        key.accept(self)
        value.accept(self)
    end
end

#visit_if_node(node) ⇒ Object



344
345
346
347
348
349
350
# File 'lib/ast/visitor.rb', line 344

def visit_if_node(node)
    visit_node(node)

    node.condition.accept(self)
    node.true_body_stmts.accept(self)
    node.false_body_stmts.accept(self)
end

#visit_int_node(node) ⇒ Object



279
280
281
# File 'lib/ast/visitor.rb', line 279

def visit_int_node(node)
    visit_node(node)
end

#visit_ivar_read_node(node) ⇒ Object



275
276
277
# File 'lib/ast/visitor.rb', line 275

def visit_ivar_read_node(node)
    visit_node(node)
end

#visit_lvar_read_node(node) ⇒ Object



266
267
268
# File 'lib/ast/visitor.rb', line 266

def visit_lvar_read_node(node)
    visit_node(node)
end

#visit_lvar_write_node(node) ⇒ Object



270
271
272
273
# File 'lib/ast/visitor.rb', line 270

def visit_lvar_write_node(node)
    visit_node(node)
    node.value.accept(self)
end

#visit_meth_def_node(node) ⇒ Object



252
253
254
255
# File 'lib/ast/visitor.rb', line 252

def visit_meth_def_node(node)
    visit_node(node)
    node.body.accept(self)
end

#visit_nil_node(node) ⇒ Object



292
293
294
# File 'lib/ast/visitor.rb', line 292

def visit_nil_node(node)
    visit_node(node)
end

#visit_node(node) ⇒ Object



194
195
196
# File 'lib/ast/visitor.rb', line 194

def visit_node(node)

end

#visit_program_node(node) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
# File 'lib/ast/visitor.rb', line 198

def visit_program_node(node)
    visit_node(node)

    node.classes.each do |c|
        c.accept(self)
    end

    node.blocks.each do |b|
        b.accept(self)
    end
end

#visit_return_node(node) ⇒ Object



381
382
383
384
# File 'lib/ast/visitor.rb', line 381

def visit_return_node(node)
    visit_node(node)
    node.value.accept(self)
end

#visit_root_node(node) ⇒ Object



222
223
224
225
# File 'lib/ast/visitor.rb', line 222

def visit_root_node(node)
    visit_node(node)
    node.single_child.accept(self)
end

#visit_send_node(node) ⇒ Object



368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/ast/visitor.rb', line 368

def visit_send_node(node)
    visit_node(node)

    # Receiver might be nil for self sends
    if node.receiver != nil
        node.receiver.accept(self)
    end
    
    node.arguments.each do |arg|
        arg.accept(self)
    end
end

#visit_source_code_expr_node(node) ⇒ Object



235
236
237
# File 'lib/ast/visitor.rb', line 235

def visit_source_code_expr_node(node)
    visit_node(node)
end

#visit_string_node(node) ⇒ Object



300
301
302
# File 'lib/ast/visitor.rb', line 300

def visit_string_node(node)
    visit_node(node)
end

#visit_symbol_node(node) ⇒ Object



296
297
298
# File 'lib/ast/visitor.rb', line 296

def visit_symbol_node(node)
    visit_node(node)
end

#visit_ternary_node(node) ⇒ Object



352
353
354
355
356
357
358
# File 'lib/ast/visitor.rb', line 352

def visit_ternary_node(node)
    visit_node(node)

    node.condition.accept(self)
    node.true_val.accept(self)
    node.false_val.accept(self)
end

#visit_until_node(node) ⇒ Object



326
327
328
329
330
331
# File 'lib/ast/visitor.rb', line 326

def visit_until_node(node)
    visit_node(node)

    node.condition.accept(self)
    node.body_stmts.accept(self)
end

#visit_until_post_node(node) ⇒ Object



333
334
335
336
337
338
# File 'lib/ast/visitor.rb', line 333

def visit_until_post_node(node)
    visit_node(node)

    node.condition.accept(self)
    node.body_stmts.accept(self)
end

#visit_var_def_node(node) ⇒ Object



248
249
250
# File 'lib/ast/visitor.rb', line 248

def visit_var_def_node(node)
    visit_node(node)
end

#visit_while_node(node) ⇒ Object



312
313
314
315
316
317
# File 'lib/ast/visitor.rb', line 312

def visit_while_node(node)
    visit_node(node)

    node.condition.accept(self)
    node.body_stmts.accept(self)
end

#visit_while_post_node(node) ⇒ Object



319
320
321
322
323
324
# File 'lib/ast/visitor.rb', line 319

def visit_while_post_node(node)
    visit_node(node)

    node.condition.accept(self)
    node.body_stmts.accept(self)
end