Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Functions | Variables
node.c File Reference
#include "ruby/ruby.h"
#include "vm_core.h"
Include dependency graph for node.c:

Go to the source code of this file.

Data Structures

struct  add_option_arg
 

Macros

#define A(str)   rb_str_cat2(buf, (str))
 
#define AR(str)   rb_str_concat(buf, (str))
 
#define A_INDENT   add_indent(buf, indent)
 
#define D_INDENT   rb_str_cat2(indent, next_indent)
 
#define D_DEDENT   rb_str_resize(indent, RSTRING_LEN(indent) - 4)
 
#define A_ID(id)   add_id(buf, (id))
 
#define A_INT(val)   rb_str_catf(buf, "%d", (val))
 
#define A_LONG(val)   rb_str_catf(buf, "%ld", (val))
 
#define A_LIT(lit)   AR(rb_inspect(lit))
 
#define A_NODE_HEADER(node, term)   rb_str_catf(buf, "@ %s (line: %d)"term, ruby_node_name(nd_type(node)), nd_line(node))
 
#define A_FIELD_HEADER(len, name, term)   rb_str_catf(buf, "+- %.*s:"term, (len), (name))
 
#define D_FIELD_HEADER(len, name, term)   (A_INDENT, A_FIELD_HEADER(len, name, term))
 
#define D_NULL_NODE   (A_INDENT, A("(null node)\n"))
 
#define D_NODE_HEADER(node)   (A_INDENT, A_NODE_HEADER(node, "\n"))
 
#define COMPOUND_FIELD(len, name, block)
 
#define COMPOUND_FIELD1(name, ann, block)
 
#define FIELD_NAME_DESC(name, ann)   name " (" ann ")"
 
#define FIELD_NAME_LEN(name, ann)
 
#define SIMPLE_FIELD(len, name)
 
#define SIMPLE_FIELD1(name, ann)   SIMPLE_FIELD(FIELD_NAME_LEN(name, ann), FIELD_NAME_DESC(name, ann))
 
#define F_CUSTOM1(name, ann)   SIMPLE_FIELD1(#name, ann)
 
#define F_ID(name, ann)   SIMPLE_FIELD1(#name, ann) A_ID(node->name)
 
#define F_GENTRY(name, ann)   SIMPLE_FIELD1(#name, ann) A_ID((node->name)->id)
 
#define F_INT(name, ann)   SIMPLE_FIELD1(#name, ann) A_INT(node->name)
 
#define F_LONG(name, ann)   SIMPLE_FIELD1(#name, ann) A_LONG(node->name)
 
#define F_LIT(name, ann)   SIMPLE_FIELD1(#name, ann) A_LIT(node->name)
 
#define F_MSG(name, ann, desc)   SIMPLE_FIELD1(#name, ann) A(desc)
 
#define F_NODE(name, ann)   COMPOUND_FIELD1(#name, ann, dump_node(buf, indent, comment, node->name))
 
#define F_OPTION(name, ann)   COMPOUND_FIELD1(#name, ann, dump_option(buf, indent, node->name))
 
#define ANN(ann)
 
#define LAST_NODE   (next_indent = " ")
 
#define nd_compile_option   u3.value
 

Functions

static void add_indent (VALUE buf, VALUE indent)
 
static void add_id (VALUE buf, ID id)
 
static int add_option_i (VALUE key, VALUE val, VALUE args)
 
static void dump_option (VALUE buf, VALUE indent, VALUE opt)
 
static void dump_node (VALUE, VALUE, int, NODE *)
 
static void dump_array (VALUE buf, VALUE indent, int comment, NODE *node)
 
VALUE rb_parser_dump_tree (NODE *node, int comment)
 
void rb_gc_free_node (VALUE obj)
 
size_t rb_node_memsize (VALUE obj)
 
VALUE rb_gc_mark_node (NODE *obj)
 

Variables

static const char default_indent [] = "| "
 

Macro Definition Documentation

◆ A

#define A (   str)    rb_str_cat2(buf, (str))

Definition at line 15 of file node.c.

Referenced by add_id(), add_option_i(), and dump_node().

◆ A_FIELD_HEADER

#define A_FIELD_HEADER (   len,
  name,
  term 
)    rb_str_catf(buf, "+- %.*s:"term, (len), (name))

Definition at line 27 of file node.c.

◆ A_ID

#define A_ID (   id)    add_id(buf, (id))

Definition at line 21 of file node.c.

Referenced by dump_node().

◆ A_INDENT

#define A_INDENT   add_indent(buf, indent)

Definition at line 18 of file node.c.

Referenced by add_option_i(), and dump_node().

◆ A_INT

#define A_INT (   val)    rb_str_catf(buf, "%d", (val))

Definition at line 22 of file node.c.

Referenced by dump_node().

◆ A_LIT

#define A_LIT (   lit)    AR(rb_inspect(lit))

Definition at line 24 of file node.c.

Referenced by add_option_i(), and dump_option().

◆ A_LONG

#define A_LONG (   val)    rb_str_catf(buf, "%ld", (val))

Definition at line 23 of file node.c.

Referenced by dump_node().

◆ A_NODE_HEADER

#define A_NODE_HEADER (   node,
  term 
)    rb_str_catf(buf, "@ %s (line: %d)"term, ruby_node_name(nd_type(node)), nd_line(node))

Definition at line 25 of file node.c.

◆ ANN

#define ANN (   ann)
Value:
if (comment) { \
A_INDENT; A("| # " ann "\n"); \
}
#define A(str)
Definition: node.c:15

Definition at line 71 of file node.c.

Referenced by dump_node().

◆ AR

#define AR (   str)    rb_str_concat(buf, (str))

Definition at line 16 of file node.c.

Referenced by add_id(), add_indent(), and add_option_i().

◆ COMPOUND_FIELD

#define COMPOUND_FIELD (   len,
  name,
  block 
)
Value:
do { \
D_FIELD_HEADER((len), (name), "\n"); \
D_INDENT; \
block; \
D_DEDENT; \
} while (0)
register unsigned int len
Definition: zonetab.h:51
const char * name
Definition: nkf.c:208

Definition at line 34 of file node.c.

◆ COMPOUND_FIELD1

#define COMPOUND_FIELD1 (   name,
  ann,
  block 
)
Value:
block)
#define FIELD_NAME_DESC(name, ann)
Definition: node.c:47
const char * name
Definition: nkf.c:208
#define COMPOUND_FIELD(len, name, block)
Definition: node.c:34
#define FIELD_NAME_LEN(name, ann)
Definition: node.c:48

Definition at line 42 of file node.c.

◆ D_DEDENT

#define D_DEDENT   rb_str_resize(indent, RSTRING_LEN(indent) - 4)

Definition at line 20 of file node.c.

Referenced by dump_node().

◆ D_FIELD_HEADER

#define D_FIELD_HEADER (   len,
  name,
  term 
)    (A_INDENT, A_FIELD_HEADER(len, name, term))

Definition at line 29 of file node.c.

◆ D_INDENT

#define D_INDENT   rb_str_cat2(indent, next_indent)

Definition at line 19 of file node.c.

Referenced by dump_node().

◆ D_NODE_HEADER

#define D_NODE_HEADER (   node)    (A_INDENT, A_NODE_HEADER(node, "\n"))

Definition at line 32 of file node.c.

Referenced by dump_node().

◆ D_NULL_NODE

#define D_NULL_NODE   (A_INDENT, A("(null node)\n"))

Definition at line 31 of file node.c.

Referenced by dump_node().

◆ F_CUSTOM1

#define F_CUSTOM1 (   name,
  ann 
)    SIMPLE_FIELD1(#name, ann)

Definition at line 58 of file node.c.

Referenced by dump_node().

◆ F_GENTRY

#define F_GENTRY (   name,
  ann 
)    SIMPLE_FIELD1(#name, ann) A_ID((node->name)->id)

Definition at line 60 of file node.c.

Referenced by dump_node().

◆ F_ID

#define F_ID (   name,
  ann 
)    SIMPLE_FIELD1(#name, ann) A_ID(node->name)

Definition at line 59 of file node.c.

Referenced by dump_node().

◆ F_INT

#define F_INT (   name,
  ann 
)    SIMPLE_FIELD1(#name, ann) A_INT(node->name)

Definition at line 61 of file node.c.

Referenced by dump_node().

◆ F_LIT

#define F_LIT (   name,
  ann 
)    SIMPLE_FIELD1(#name, ann) A_LIT(node->name)

Definition at line 63 of file node.c.

Referenced by dump_node().

◆ F_LONG

#define F_LONG (   name,
  ann 
)    SIMPLE_FIELD1(#name, ann) A_LONG(node->name)

Definition at line 62 of file node.c.

Referenced by dump_array().

◆ F_MSG

#define F_MSG (   name,
  ann,
  desc 
)    SIMPLE_FIELD1(#name, ann) A(desc)

Definition at line 64 of file node.c.

Referenced by dump_node().

◆ F_NODE

#define F_NODE (   name,
  ann 
)    COMPOUND_FIELD1(#name, ann, dump_node(buf, indent, comment, node->name))

Definition at line 66 of file node.c.

Referenced by dump_array(), and dump_node().

◆ F_OPTION

#define F_OPTION (   name,
  ann 
)    COMPOUND_FIELD1(#name, ann, dump_option(buf, indent, node->name))

Definition at line 68 of file node.c.

Referenced by dump_node().

◆ FIELD_NAME_DESC

#define FIELD_NAME_DESC (   name,
  ann 
)    name " (" ann ")"

Definition at line 47 of file node.c.

◆ FIELD_NAME_LEN

#define FIELD_NAME_LEN (   name,
  ann 
)
Value:
(int)( \
comment ? \
rb_strlen_lit(name))
#define FIELD_NAME_DESC(name, ann)
Definition: node.c:47
#define rb_strlen_lit(str)
Definition: intern.h:867
const char * name
Definition: nkf.c:208

Definition at line 48 of file node.c.

◆ LAST_NODE

#define LAST_NODE   (next_indent = " ")

Definition at line 76 of file node.c.

Referenced by dump_array(), and dump_node().

◆ nd_compile_option

#define nd_compile_option   u3.value

Referenced by dump_node().

◆ SIMPLE_FIELD

#define SIMPLE_FIELD (   len,
  name 
)
Value:
for (D_FIELD_HEADER((len), (name), " "), field_flag = 1; \
field_flag; /* should be optimized away */ \
A("\n"), field_flag = 0)
#define D_FIELD_HEADER(len, name, term)
Definition: node.c:29
register unsigned int len
Definition: zonetab.h:51
const char * name
Definition: nkf.c:208

Definition at line 52 of file node.c.

◆ SIMPLE_FIELD1

#define SIMPLE_FIELD1 (   name,
  ann 
)    SIMPLE_FIELD(FIELD_NAME_LEN(name, ann), FIELD_NAME_DESC(name, ann))

Definition at line 57 of file node.c.

Function Documentation

◆ add_id()

static void add_id ( VALUE  buf,
ID  id 
)
static

Definition at line 85 of file node.c.

References A, AR, and rb_id2str.

◆ add_indent()

static void add_indent ( VALUE  buf,
VALUE  indent 
)
static

Definition at line 79 of file node.c.

References AR.

◆ add_option_i()

static int add_option_i ( VALUE  key,
VALUE  val,
VALUE  args 
)
static

Definition at line 107 of file node.c.

References A, A_INDENT, A_LIT, AR, add_option_arg::buf, add_option_arg::indent, rb_sym2str, and ST_CONTINUE.

Referenced by dump_option().

◆ dump_array()

static void dump_array ( VALUE  buf,
VALUE  indent,
int  comment,
NODE node 
)
static

Definition at line 141 of file node.c.

References default_indent, F_LONG, F_NODE, LAST_NODE, nd_alen, nd_head, nd_next, nd_type, and NODE_ARRAY.

Referenced by dump_node().

◆ dump_node()

static void dump_node ( VALUE  buf,
VALUE  indent,
int  comment,
NODE node 
)
static

Definition at line 156 of file node.c.

References A, A_ID, A_INDENT, A_INT, A_LONG, ANN, D_DEDENT, D_INDENT, D_NODE_HEADER, D_NULL_NODE, default_indent, dump_array(), F_CUSTOM1, F_GENTRY, F_ID, F_INT, F_LIT, F_MSG, F_NODE, F_OPTION, LAST_NODE, name, nd_1st, nd_2nd, nd_ainfo, nd_args, nd_beg, nd_body, nd_compile_option, nd_cond, nd_cpath, nd_defn, nd_else, nd_end, nd_ensr, nd_entry, nd_head, nd_iter, nd_lit, nd_mid, nd_next, nd_nth, nd_recv, nd_resq, nd_state, nd_stts, nd_super, nd_tbl, nd_type, nd_value, nd_vid, NODE_ALIAS, NODE_AND, NODE_ARGS, NODE_ARGSCAT, NODE_ARGSPUSH, NODE_ARRAY, NODE_ATTRASGN, NODE_BACK_REF, NODE_BEGIN, NODE_BLOCK, NODE_BLOCK_PASS, NODE_BREAK, NODE_CALL, NODE_CASE, NODE_CDECL, NODE_CLASS, NODE_COLON2, NODE_COLON3, NODE_CONST, NODE_CVAR, NODE_CVASGN, NODE_DASGN, NODE_DASGN_CURR, NODE_DEFINED, NODE_DEFN, NODE_DEFS, NODE_DOT2, NODE_DOT3, NODE_DREGX, NODE_DREGX_ONCE, NODE_DSTR, NODE_DSYM, NODE_DVAR, NODE_DXSTR, NODE_ENSURE, NODE_ERRINFO, NODE_EVSTR, NODE_FALSE, NODE_FCALL, NODE_FLIP2, NODE_FLIP3, NODE_FOR, NODE_GASGN, NODE_GVAR, NODE_HASH, NODE_IASGN, NODE_IF, NODE_ITER, NODE_IVAR, NODE_KW_ARG, NODE_LAMBDA, NODE_LASGN, NODE_LIT, NODE_LVAR, NODE_MASGN, NODE_MATCH, NODE_MATCH2, NODE_MATCH3, NODE_MODULE, NODE_NEXT, NODE_NIL, NODE_NTH_REF, NODE_OP_ASGN1, NODE_OP_ASGN2, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR, NODE_OPT_ARG, NODE_OPT_N, NODE_OR, NODE_POSTARG, NODE_POSTEXE, NODE_PRELUDE, NODE_QCALL, NODE_REDO, NODE_RESBODY, NODE_RESCUE, NODE_RETRY, NODE_RETURN, NODE_SCLASS, NODE_SCOPE, NODE_SELF, NODE_SPLAT, NODE_STR, NODE_SUPER, NODE_TRUE, NODE_UNDEF, NODE_UNTIL, NODE_VALIAS, NODE_VALUES, NODE_VCALL, NODE_WHEN, NODE_WHILE, NODE_XSTR, NODE_YIELD, NODE_ZARRAY, NODE_ZSUPER, rb_bug(), rb_str_catf(), ruby_node_name(), and size.

Referenced by dump_option(), and rb_parser_dump_tree().

◆ dump_option()

static void dump_option ( VALUE  buf,
VALUE  indent,
VALUE  opt 
)
static

◆ rb_gc_free_node()

void rb_gc_free_node ( VALUE  obj)

Definition at line 1005 of file node.c.

References nd_ainfo, nd_tbl, nd_type, NODE_ALLOCA, NODE_ARGS, NODE_SCOPE, RNODE, and xfree().

Referenced by obj_free().

◆ rb_gc_mark_node()

VALUE rb_gc_mark_node ( NODE obj)

◆ rb_node_memsize()

size_t rb_node_memsize ( VALUE  obj)

Definition at line 1025 of file node.c.

References nd_tbl, nd_type, NODE_ALLOCA, NODE_ARGS, NODE_SCOPE, RNODE, and size.

Referenced by obj_memsize_of().

◆ rb_parser_dump_tree()

VALUE rb_parser_dump_tree ( NODE node,
int  comment 
)

Definition at line 992 of file node.c.

References add_option_arg::buf, dump_node(), and rb_str_new_cstr().

Referenced by process_options().

Variable Documentation

◆ default_indent

const char default_indent[] = "| "
static

Definition at line 138 of file node.c.

Referenced by dump_array(), and dump_node().