summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2024-01-08 10:24:38 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2024-01-08 11:57:30 +0900
commit9527093759e127a899c9bcb8dd9f9b6d0d6a0161 (patch)
treebbb9e2512a01944bb92acd04e8fa0dc6f2188212 /parse.y
parent11286ac479807d7e259cd8347cab2ab516e2565a (diff)
Fix numeric node print by `-y` option
These nodes are not NOTE_LIT, so need to treat separately.
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y20
1 files changed, 19 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 8d67adf7a5..fc50dbd491 100644
--- a/parse.y
+++ b/parse.y
@@ -2139,7 +2139,25 @@ rb_str_to_parser_encoding_string(rb_parser_t *p, VALUE str)
} tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL tOP_ASGN
%printer {
#ifndef RIPPER
- rb_parser_printf(p, "%+"PRIsVALUE, RNODE_LIT($$)->nd_lit);
+ switch (nd_type(RNODE($$))) {
+ case NODE_INTEGER:
+ rb_parser_printf(p, "%+"PRIsVALUE, rb_node_integer_literal_val(RNODE_INTEGER($$)));
+ break;
+ case NODE_FLOAT:
+ rb_parser_printf(p, "%+"PRIsVALUE, rb_node_float_literal_val(RNODE_FLOAT($$)));
+ break;
+ case NODE_RATIONAL:
+ rb_parser_printf(p, "%+"PRIsVALUE, rb_node_rational_literal_val(RNODE_RATIONAL($$)));
+ break;
+ case NODE_IMAGINARY:
+ rb_parser_printf(p, "%+"PRIsVALUE, rb_node_imaginary_literal_val(RNODE_IMAGINARY($$)));
+ break;
+ case NODE_LIT:
+ rb_parser_printf(p, "%+"PRIsVALUE, RNODE_LIT($$)->nd_lit);
+ break;
+ default:
+ break;
+ }
#else
rb_parser_printf(p, "%+"PRIsVALUE, get_value($$));
#endif