1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

refactor parser error

* error.c (err_vcatf): rename, and separate appending message from
  creating a string buffer.
* error.c (rb_syntax_error_append): merge rb_error_vsprintf and
  rb_compile_err_append.
* parse.y (parser_compile_error): use rb_syntax_error_append.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-04-19 08:42:50 +00:00
parent 51612505f7
commit 51c195948f
3 changed files with 32 additions and 26 deletions

View file

@ -1,3 +1,13 @@
Tue Apr 19 17:42:47 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* error.c (err_vcatf): rename, and separate appending message from
creating a string buffer.
* error.c (rb_syntax_error_append): merge rb_error_vsprintf and
rb_compile_err_append.
* parse.y (parser_compile_error): use rb_syntax_error_append.
Tue Apr 19 13:46:19 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* compile.c (append_compile_error, compile_bug): pass iseq and get

35
error.c
View file

@ -80,10 +80,9 @@ err_position_0(char *buf, long len, const char *file, int line)
}
static VALUE
compile_vsprintf(rb_encoding *enc, const char *pre, const char *file, int line, const char *fmt, va_list args)
err_vcatf(VALUE str, const char *pre, const char *file, int line,
const char *fmt, va_list args)
{
VALUE str = rb_enc_str_new(0, 0, enc);
if (file) {
rb_str_cat2(str, file);
if (line) rb_str_catf(str, ":%d", line);
@ -95,21 +94,25 @@ compile_vsprintf(rb_encoding *enc, const char *pre, const char *file, int line,
}
VALUE
rb_compile_err_append(VALUE buffer, VALUE mesg)
rb_syntax_error_append(VALUE exc, VALUE file, int line, int column,
rb_encoding *enc, const char *fmt, va_list args)
{
if (!buffer) {
const char *fn = NIL_P(file) ? NULL : RSTRING_PTR(file);
if (!exc) {
VALUE mesg = rb_enc_str_new(0, 0, enc);
err_vcatf(mesg, NULL, fn, line, fmt, args);
rb_str_cat2(mesg, "\n");
rb_write_error_str(mesg);
}
else if (NIL_P(buffer)) {
buffer = mesg;
else if (NIL_P(exc)) {
VALUE mesg = rb_enc_str_new(0, 0, enc);
exc = err_vcatf(mesg, NULL, fn, line, fmt, args);
}
else {
rb_str_cat2(buffer, "\n");
rb_str_append(buffer, mesg);
err_vcatf(exc, "\n", fn, line, fmt, args);
}
return buffer;
return exc;
}
void
@ -122,14 +125,6 @@ rb_compile_error(const char *file, int line, const char *fmt, ...)
{
}
VALUE
rb_error_vsprintf(VALUE file, int line, void *enc, const char *fmt, va_list args)
{
return compile_vsprintf(enc, NULL,
NIL_P(file) ? NULL : RSTRING_PTR(file), line,
fmt, args);
}
void
rb_compile_error_append(const char *fmt, ...)
{
@ -138,9 +133,9 @@ rb_compile_error_append(const char *fmt, ...)
static VALUE
warn_vsprintf(rb_encoding *enc, const char *file, int line, const char *fmt, va_list args)
{
VALUE str;
VALUE str = rb_enc_str_new(0, 0, enc);
str = compile_vsprintf(enc, "warning: ", file, line, fmt, args);
err_vcatf(str, "warning: ", file, line, fmt, args);
return rb_str_cat2(str, "\n");
}

13
parse.y
View file

@ -11074,21 +11074,22 @@ rb_parser_printf(struct parser_params *parser, const char *fmt, ...)
}
}
extern VALUE rb_error_vsprintf(VALUE, int, void *, const char *, va_list);
extern VALUE rb_compile_err_append(VALUE buffer, VALUE mesg);
extern VALUE rb_syntax_error_append(VALUE exc, VALUE file, int line, int column, rb_encoding *enc, const char *fmt, va_list args);
static void
parser_compile_error(struct parser_params *parser, const char *fmt, ...)
{
VALUE str;
va_list ap;
parser->error_p = 1;
va_start(ap, fmt);
str = rb_error_vsprintf(ruby_sourcefile_string, ruby_sourceline,
(void *)current_enc, fmt, ap);
parser->error_buffer =
rb_syntax_error_append(parser->error_buffer,
ruby_sourcefile_string,
ruby_sourceline,
rb_long2int(lex_p - lex_pbeg),
current_enc, fmt, ap);
va_end(ap);
parser->error_buffer = rb_compile_err_append(parser->error_buffer, str);
}
#endif