зеркало из https://github.com/github/ruby.git
[ruby/prism] Ensure deserialization works with errors+warnings>256
https://github.com/ruby/prism/commit/f540e830b5
This commit is contained in:
Родитель
35ff302893
Коммит
d583616f32
|
@ -451,6 +451,9 @@ parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
|
|||
case PM_ERROR_LEVEL_ARGUMENT:
|
||||
level = ID2SYM(rb_intern("argument"));
|
||||
break;
|
||||
case PM_ERROR_LEVEL_LOAD:
|
||||
level = ID2SYM(rb_intern("load"));
|
||||
break;
|
||||
default:
|
||||
rb_raise(rb_eRuntimeError, "Unknown level: %" PRIu8, error->level);
|
||||
}
|
||||
|
|
|
@ -131,8 +131,8 @@ module Prism
|
|||
comments = load_comments
|
||||
magic_comments = Array.new(load_varuint) { MagicComment.new(load_location_object, load_location_object) }
|
||||
data_loc = load_optional_location_object
|
||||
errors = Array.new(load_varuint) { ParseError.new(DIAGNOSTIC_TYPES[io.getbyte], load_embedded_string, load_location_object, load_error_level) }
|
||||
warnings = Array.new(load_varuint) { ParseWarning.new(DIAGNOSTIC_TYPES[io.getbyte], load_embedded_string, load_location_object, load_warning_level) }
|
||||
errors = Array.new(load_varuint) { ParseError.new(DIAGNOSTIC_TYPES[load_varuint], load_embedded_string, load_location_object, load_error_level) }
|
||||
warnings = Array.new(load_varuint) { ParseWarning.new(DIAGNOSTIC_TYPES[load_varuint], load_embedded_string, load_location_object, load_warning_level) }
|
||||
[comments, magic_comments, data_loc, errors, warnings]
|
||||
end
|
||||
|
||||
|
@ -296,9 +296,11 @@ module Prism
|
|||
|
||||
case level
|
||||
when 0
|
||||
:fatal
|
||||
:syntax
|
||||
when 1
|
||||
:argument
|
||||
when 2
|
||||
:load
|
||||
else
|
||||
raise "Unknown level: #{level}"
|
||||
end
|
||||
|
|
|
@ -220,7 +220,7 @@ pm_serialize_data_loc(const pm_parser_t *parser, pm_buffer_t *buffer) {
|
|||
static void
|
||||
pm_serialize_diagnostic(pm_parser_t *parser, pm_diagnostic_t *diagnostic, pm_buffer_t *buffer) {
|
||||
// serialize the type
|
||||
pm_buffer_append_byte(buffer, (uint8_t) diagnostic->diag_id);
|
||||
pm_buffer_append_varuint(buffer, (uint32_t) diagnostic->diag_id);
|
||||
|
||||
// serialize message
|
||||
size_t message_length = strlen(diagnostic->message);
|
||||
|
|
|
@ -88,5 +88,24 @@ module Prism
|
|||
|
||||
assert_kind_of IntegerNode, result.value.statements.body.first
|
||||
end
|
||||
|
||||
def test_command_line_x_implicit_fail
|
||||
result = Prism.parse(<<~RUBY)
|
||||
#!/bin/bash
|
||||
exit 1
|
||||
RUBY
|
||||
|
||||
assert_equal 1, result.errors.length
|
||||
assert_equal :load, result.errors.first.level
|
||||
end
|
||||
|
||||
def test_command_line_x_explicit_fail
|
||||
result = Prism.parse(<<~RUBY, command_line: "x")
|
||||
exit 1
|
||||
RUBY
|
||||
|
||||
assert_equal 1, result.errors.length
|
||||
assert_equal :load, result.errors.first.level
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче