diff options
author | yui-knk <spiketeika@gmail.com> | 2024-01-08 10:24:38 +0900 |
---|---|---|
committer | Yuichiro Kaneko <spiketeika@gmail.com> | 2024-01-08 11:57:30 +0900 |
commit | 9527093759e127a899c9bcb8dd9f9b6d0d6a0161 (patch) | |
tree | bbb9e2512a01944bb92acd04e8fa0dc6f2188212 /parse.y | |
parent | 11286ac479807d7e259cd8347cab2ab516e2565a (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.y | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -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 |