Feature #14833 ยป ast_node_pp.patch
| ast.c | ||
|---|---|---|
|
}
|
||
|
static VALUE
|
||
|
rb_ast_node_inspect(VALUE self)
|
||
|
ast_node_inspect_head(VALUE self)
|
||
|
{
|
||
|
VALUE str;
|
||
|
VALUE cname;
|
||
| ... | ... | |
|
rb_str_append(str, cname);
|
||
|
rb_str_cat2(str, "(");
|
||
|
rb_str_catf(str, "%s(%d) %d:%d, %d:%d", node_type_to_str(data->node), nd_type(data->node), nd_first_lineno(data->node), nd_first_column(data->node), nd_last_lineno(data->node), nd_last_column(data->node));
|
||
|
return str;
|
||
|
}
|
||
|
static VALUE
|
||
|
rb_ast_node_inspect(VALUE self)
|
||
|
{
|
||
|
VALUE str;
|
||
|
str = ast_node_inspect_head(self);
|
||
|
rb_str_cat2(str, "): >");
|
||
|
return str;
|
||
|
}
|
||
|
static VALUE
|
||
|
ast_node_pretty_prrint_children(VALUE _, VALUE ary)
|
||
|
{
|
||
|
VALUE self, pp;
|
||
|
VALUE children;
|
||
|
VALUE child;
|
||
|
long i;
|
||
|
self = RARRAY_AREF(ary, 0);
|
||
|
pp = RARRAY_AREF(ary, 1);
|
||
|
children = rb_ast_node_children(self);
|
||
|
rb_funcall(pp, rb_intern("breakable"), 0, 0);
|
||
|
for (i = 0; i < RARRAY_LEN(children); i++) {
|
||
|
if (i != 0) rb_funcall(pp, rb_intern("comma_breakable"), 0);
|
||
|
child = RARRAY_AREF(children, i);
|
||
|
rb_funcall(pp, rb_intern("pp"), 1, child);
|
||
|
}
|
||
|
return Qnil;
|
||
|
}
|
||
|
static VALUE
|
||
|
rb_ast_node_pretty_print(VALUE self, VALUE pp)
|
||
|
{
|
||
|
VALUE str;
|
||
|
VALUE group_argv[1];
|
||
|
group_argv[0] = INT2NUM(2);
|
||
|
str = ast_node_inspect_head(self);
|
||
|
rb_funcall(pp, rb_intern("text"), 1, str);
|
||
|
rb_block_call(pp, rb_intern("group"), 1, group_argv, ast_node_pretty_prrint_children, rb_ary_new3(2, self, pp));
|
||
|
rb_funcall(pp, rb_intern("text"), 1, rb_str_new2("): >"));
|
||
|
return str;
|
||
|
}
|
||
|
void
|
||
|
Init_ast(void)
|
||
|
{
|
||
| ... | ... | |
|
rb_define_method(rb_cNode, "last_column", rb_ast_node_last_column, 0);
|
||
|
rb_define_method(rb_cNode, "children", rb_ast_node_children, 0);
|
||
|
rb_define_method(rb_cNode, "inspect", rb_ast_node_inspect, 0);
|
||
|
rb_define_method(rb_cNode, "pretty_print", rb_ast_node_pretty_print, 1);
|
||
|
}
|
||