[PRISM] Correctly parse non-base 10 integers in Prism
This commit passes an `end` to rb_int_parse_cstr which allows us to correctly parse non-base 10 integers which are enclosed in parenthesis. Prior to this commit, we were getting a putobject nil when compiling `(0o0)` for example.
This commit is contained in:
parent
a2994c300b
commit
196c24620e
@ -78,8 +78,8 @@ pm_iseq_new_with_opt(pm_scope_node_t *scope_node, pm_parser_t *parser, VALUE nam
|
|||||||
static VALUE
|
static VALUE
|
||||||
parse_integer(const pm_integer_node_t *node)
|
parse_integer(const pm_integer_node_t *node)
|
||||||
{
|
{
|
||||||
const char *start = (const char *) node->base.location.start;
|
char *start = (char *) node->base.location.start;
|
||||||
const char *end = (const char *) node->base.location.end;
|
char *end = (char *) node->base.location.end;
|
||||||
|
|
||||||
size_t length = end - start;
|
size_t length = end - start;
|
||||||
int base = -10;
|
int base = -10;
|
||||||
@ -101,7 +101,7 @@ parse_integer(const pm_integer_node_t *node)
|
|||||||
rb_bug("Unexpected integer base");
|
rb_bug("Unexpected integer base");
|
||||||
}
|
}
|
||||||
|
|
||||||
return rb_int_parse_cstr(start, length, NULL, NULL, base, RB_INT_PARSE_DEFAULT);
|
return rb_int_parse_cstr(start, length, &end, NULL, base, RB_INT_PARSE_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -34,6 +34,7 @@ module Prism
|
|||||||
assert_prism_eval("0b10")
|
assert_prism_eval("0b10")
|
||||||
assert_prism_eval("0o10")
|
assert_prism_eval("0o10")
|
||||||
assert_prism_eval("010")
|
assert_prism_eval("010")
|
||||||
|
assert_prism_eval("(0o00)")
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_NilNode
|
def test_NilNode
|
||||||
|
Loading…
x
Reference in New Issue
Block a user