aboutsummaryrefslogtreecommitdiffstats
path: root/error.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-04-20 01:25:55 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-04-20 01:25:55 +0000
commitca7e4e033c334ea1b9a676413f759f0e9059fc37 (patch)
tree006f7d88aff9629cb1fae9cc244afec1fb0b1ec8 /error.c
parent0818b7d4ad638b5d30d7d4b6ddb86ab7c942744d (diff)
downloadruby-ca7e4e033c334ea1b9a676413f759f0e9059fc37.tar.gz
refactor syntax error
* compile.c (append_compile_error): use rb_syntax_error_append. * error.c (rb_syntax_error_append): append messages into a SyntaxError exception instance. * parse.y (yycompile0): make new SyntaxError instance in main mode, otherwize error_buffer should be a SyntaxError if error has occurred. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54650 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r--error.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/error.c b/error.c
index 6a8111085a..89858719c1 100644
--- a/error.c
+++ b/error.c
@@ -104,12 +104,18 @@ rb_syntax_error_append(VALUE exc, VALUE file, int line, int column,
rb_str_cat2(mesg, "\n");
rb_write_error_str(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 {
- err_vcatf(exc, "\n", fn, line, fmt, args);
+ VALUE mesg;
+ const char *pre = NULL;
+ if (NIL_P(exc)) {
+ mesg = rb_enc_str_new(0, 0, enc);
+ exc = rb_class_new_instance(1, &mesg, rb_eSyntaxError);
+ }
+ else {
+ mesg = rb_attr_get(exc, idMesg);
+ pre = "\n";
+ }
+ err_vcatf(mesg, pre, fn, line, fmt, args);
}
return exc;