From 7a42b03b0c1f7e8b8bd45f86eca723b0012b9118 Mon Sep 17 00:00:00 2001 From: yui-knk Date: Mon, 30 Oct 2017 13:36:20 +0000 Subject: Store lineno on RNode * node.c (A_NODE_HEADER): Print lineno. * node.h (nd_column, nd_set_column): Store column number with 16-bit. * node.h (nd_lineno, nd_set_lineno): Define getter/setter macros for lineno of RNode. * parse.y : Set first lineno of tokens. Thanks to takeshinoda for review. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60580 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- node.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'node.h') diff --git a/node.h b/node.h index eca966f361..04434cb48c 100644 --- a/node.h +++ b/node.h @@ -268,8 +268,13 @@ typedef struct RNode { #define nd_line(n) (int)(((SIGNED_VALUE)RNODE(n)->flags)>>NODE_LSHIFT) #define nd_set_line(n,l) \ RNODE(n)->flags=((RNODE(n)->flags&~((VALUE)(-1)<nd_reserved) -#define nd_set_column(n, v) (RNODE(n)->nd_reserved=v) +#define nd_column(n) (int)(RNODE(n)->nd_reserved & 0xffff) +#define nd_set_column(n, v) \ + RNODE(n)->nd_reserved = (RNODE(n)->nd_reserved & ~0xffff) | ((v) > 0xffff ? 0xffff : ((unsigned int)(v)) & 0xffff) + +#define nd_lineno(n) (int)((RNODE(n)->nd_reserved >> 16) & 0xffff) +#define nd_set_lineno(n, v) \ + RNODE(n)->nd_reserved = (RNODE(n)->nd_reserved & ~0xffff0000) | (((v) > 0xffff ? 0xffff : ((unsigned int)(v)) & 0xffff) << 16) #define nd_head u1.node #define nd_alen u2.argc -- cgit v1.2.3