зеркало из https://github.com/github/ruby.git
Introduce `rb_code_location_t`
`rb_code_location_t` has two integers, lineno and column, which point to one location on a code. Now `rb_code_location_t` is used instead of `VALUE nd_location`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
9533da6f1f
Коммит
0ee24acb5a
5
node.c
5
node.c
|
@ -1058,11 +1058,12 @@ void
|
|||
rb_node_init(NODE *n, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
|
||||
{
|
||||
n->flags = T_NODE;
|
||||
n->nd_location = 0;
|
||||
nd_set_type(n, type);
|
||||
n->u1.value = a0;
|
||||
n->u2.value = a1;
|
||||
n->u3.value = a2;
|
||||
nd_set_type(n, type);
|
||||
n->nd_first_loc.lineno = 0;
|
||||
n->nd_first_loc.column = 0;
|
||||
}
|
||||
|
||||
typedef struct node_buffer_elem_struct {
|
||||
|
|
17
node.h
17
node.h
|
@ -222,9 +222,13 @@ enum node_type {
|
|||
#define NODE_LAST NODE_LAST
|
||||
};
|
||||
|
||||
typedef struct rb_code_location_struct {
|
||||
int lineno;
|
||||
int column;
|
||||
} rb_code_location_t;
|
||||
|
||||
typedef struct RNode {
|
||||
VALUE flags;
|
||||
VALUE nd_location; /* lineno and column */
|
||||
union {
|
||||
struct RNode *node;
|
||||
ID id;
|
||||
|
@ -247,6 +251,7 @@ typedef struct RNode {
|
|||
long cnt;
|
||||
VALUE value;
|
||||
} u3;
|
||||
rb_code_location_t nd_first_loc;
|
||||
} NODE;
|
||||
|
||||
#define RNODE(obj) (R_CAST(RNode)(obj))
|
||||
|
@ -270,13 +275,11 @@ typedef struct RNode {
|
|||
#define nd_line(n) (int)(((SIGNED_VALUE)(n)->flags)>>NODE_LSHIFT)
|
||||
#define nd_set_line(n,l) \
|
||||
(n)->flags=(((n)->flags&~((VALUE)(-1)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
|
||||
#define nd_column(n) (int)((n)->nd_location & 0xffff)
|
||||
#define nd_set_column(n, v) \
|
||||
(n)->nd_location = ((n)->nd_location & ~0xffff) | ((v) > 0xffff ? 0xffff : ((unsigned int)(v)) & 0xffff)
|
||||
|
||||
#define nd_lineno(n) (int)(((n)->nd_location >> 16) & 0xffff)
|
||||
#define nd_set_lineno(n, v) \
|
||||
(n)->nd_location = ((n)->nd_location & ~0xffff0000) | (((v) > 0xffff ? 0xffff : ((unsigned int)(v)) & 0xffff) << 16)
|
||||
#define nd_column(n) ((int)((n)->nd_first_loc.column))
|
||||
#define nd_set_column(n, v) ((n)->nd_first_loc.column = (v))
|
||||
#define nd_lineno(n) ((int)((n)->nd_first_loc.lineno))
|
||||
#define nd_set_lineno(n, v) ((n)->nd_first_loc.lineno = (v))
|
||||
|
||||
#define nd_head u1.node
|
||||
#define nd_alen u2.argc
|
||||
|
|
Загрузка…
Ссылка в новой задаче