aboutsummaryrefslogtreecommitdiffstats
path: root/node.h
diff options
context:
space:
mode:
authoryui-knk <yui-knk@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-30 13:36:20 +0000
committeryui-knk <yui-knk@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-30 13:36:20 +0000
commit38196df82eeb4a057b148784d217e3bb94f090b0 (patch)
treea74c8b3c8ae24f5b67fd6a045e2d661689fc1946 /node.h
parentf4b102b0833a624466e561d42f964aafb0f80dfc (diff)
downloadruby-38196df82eeb4a057b148784d217e3bb94f090b0.tar.gz
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
Diffstat (limited to 'node.h')
-rw-r--r--node.h9
1 files changed, 7 insertions, 2 deletions
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)<<NODE_LSHIFT))|((VALUE)((l)&NODE_LMASK)<<NODE_LSHIFT))
-#define nd_column(n) (int)(RNODE(n)->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