зеркало из https://github.com/github/ruby.git
[PRISM] Use correct warning encoding
This commit is contained in:
Родитель
5bb656e4f0
Коммит
ba062a6231
31
error.c
31
error.c
|
@ -386,18 +386,28 @@ warn_vsprintf(rb_encoding *enc, const char *file, int line, const char *fmt, va_
|
|||
return rb_str_cat2(str, "\n");
|
||||
}
|
||||
|
||||
#define with_warn_vsprintf(file, line, fmt) \
|
||||
#define with_warn_vsprintf(enc, file, line, fmt) \
|
||||
VALUE str; \
|
||||
va_list args; \
|
||||
va_start(args, fmt); \
|
||||
str = warn_vsprintf(NULL, file, line, fmt, args); \
|
||||
str = warn_vsprintf(enc, file, line, fmt, args); \
|
||||
va_end(args);
|
||||
|
||||
void
|
||||
rb_compile_warn(const char *file, int line, const char *fmt, ...)
|
||||
{
|
||||
if (!NIL_P(ruby_verbose)) {
|
||||
with_warn_vsprintf(file, line, fmt) {
|
||||
with_warn_vsprintf(NULL, file, line, fmt) {
|
||||
rb_write_warning_str(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
rb_enc_compile_warn(rb_encoding *enc, const char *file, int line, const char *fmt, ...)
|
||||
{
|
||||
if (!NIL_P(ruby_verbose)) {
|
||||
with_warn_vsprintf(enc, file, line, fmt) {
|
||||
rb_write_warning_str(str);
|
||||
}
|
||||
}
|
||||
|
@ -408,7 +418,18 @@ void
|
|||
rb_compile_warning(const char *file, int line, const char *fmt, ...)
|
||||
{
|
||||
if (RTEST(ruby_verbose)) {
|
||||
with_warn_vsprintf(file, line, fmt) {
|
||||
with_warn_vsprintf(NULL, file, line, fmt) {
|
||||
rb_write_warning_str(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* rb_enc_compile_warning() reports only in verbose mode */
|
||||
void
|
||||
rb_enc_compile_warning(rb_encoding *enc, const char *file, int line, const char *fmt, ...)
|
||||
{
|
||||
if (RTEST(ruby_verbose)) {
|
||||
with_warn_vsprintf(enc, file, line, fmt) {
|
||||
rb_write_warning_str(str);
|
||||
}
|
||||
}
|
||||
|
@ -418,7 +439,7 @@ void
|
|||
rb_category_compile_warn(rb_warning_category_t category, const char *file, int line, const char *fmt, ...)
|
||||
{
|
||||
if (!NIL_P(ruby_verbose)) {
|
||||
with_warn_vsprintf(file, line, fmt) {
|
||||
with_warn_vsprintf(NULL, file, line, fmt) {
|
||||
rb_warn_category(str, rb_warning_category_to_name(category));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9280,6 +9280,9 @@ pm_parse_process_error(const pm_parse_result_t *result)
|
|||
return error;
|
||||
}
|
||||
|
||||
void rb_enc_compile_warning(rb_encoding *enc, const char *file, int line, const char *fmt, ...);
|
||||
void rb_enc_compile_warn(rb_encoding *enc, const char *file, int line, const char *fmt, ...);
|
||||
|
||||
/**
|
||||
* Parse the parse result and raise a Ruby error if there are any syntax errors.
|
||||
* It returns an error if one should be raised. It is assumed that the parse
|
||||
|
@ -9298,6 +9301,9 @@ pm_parse_process(pm_parse_result_t *result, pm_node_t *node)
|
|||
pm_scope_node_init(node, scope_node, NULL);
|
||||
scope_node->filepath_encoding = filepath_encoding;
|
||||
|
||||
scope_node->encoding = rb_enc_find(parser->encoding->name);
|
||||
if (!scope_node->encoding) rb_bug("Encoding not found %s!", parser->encoding->name);
|
||||
|
||||
// Emit all of the various warnings from the parse.
|
||||
const pm_diagnostic_t *warning;
|
||||
const char *warning_filepath = (const char *) pm_string_source(&parser->filepath);
|
||||
|
@ -9306,10 +9312,10 @@ pm_parse_process(pm_parse_result_t *result, pm_node_t *node)
|
|||
int line = pm_location_line_number(parser, &warning->location);
|
||||
|
||||
if (warning->level == PM_WARNING_LEVEL_VERBOSE) {
|
||||
rb_compile_warning(warning_filepath, line, "%s", warning->message);
|
||||
rb_enc_compile_warning(scope_node->encoding, warning_filepath, line, "%s", warning->message);
|
||||
}
|
||||
else {
|
||||
rb_compile_warn(warning_filepath, line, "%s", warning->message);
|
||||
rb_enc_compile_warn(scope_node->encoding, warning_filepath, line, "%s", warning->message);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9324,9 +9330,6 @@ pm_parse_process(pm_parse_result_t *result, pm_node_t *node)
|
|||
|
||||
// Now set up the constant pool and intern all of the various constants into
|
||||
// their corresponding IDs.
|
||||
scope_node->encoding = rb_enc_find(parser->encoding->name);
|
||||
if (!scope_node->encoding) rb_bug("Encoding not found %s!", parser->encoding->name);
|
||||
|
||||
scope_node->parser = parser;
|
||||
scope_node->constants = calloc(parser->constant_pool.size, sizeof(ID));
|
||||
|
||||
|
|
|
@ -8,5 +8,4 @@ exclude(:test_string, "unknown")
|
|||
exclude(:test_truncated_source_line, "unknown")
|
||||
exclude(:test_unexpected_eof, "unknown")
|
||||
exclude(:test_unexpected_token_after_numeric, "unknown")
|
||||
exclude(:test_unused_variable, "missing warning")
|
||||
exclude(:test_void_value_in_rhs, "unknown")
|
||||
|
|
Загрузка…
Ссылка в новой задаче