mirror of
https://github.com/ruby/ruby.git
synced 2025-09-16 09:04:05 +02:00
merge revision(s) 58503: [Backport #13523]
node.h: sign-extend * node.h (nd_line): should sign-extend. shifting `VALUE` extends with zero bits if `sizeof(VALUE)` equals to `sizeof(int)`. the zero bits are truncated if `sizeof(VALUE)` is bigger enough. [ruby-core:80920] [Bug #13523] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fd2fca8395
commit
16acdaefd3
3 changed files with 15 additions and 5 deletions
2
node.h
2
node.h
|
@ -277,7 +277,7 @@ typedef struct RNode {
|
|||
|
||||
#define NODE_LSHIFT (NODE_TYPESHIFT+7)
|
||||
#define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1)
|
||||
#define nd_line(n) (int)(RNODE(n)->flags>>NODE_LSHIFT)
|
||||
#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))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue