Skip to content

Commit 7f4db64

Browse files
committed
Emit already initialzed constant warnings in a single call
When decorating `Warning.warn`, it's much more convenient to get the whole warning in a single string.
1 parent cfec60d commit 7f4db64

1 file changed

Lines changed: 9 additions & 7 deletions

File tree

variable.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4002,15 +4002,17 @@ const_tbl_update(struct autoload_const *ac, int autoload_force)
40024002
else {
40034003
VALUE name = QUOTE_ID(id);
40044004
visibility = ce->flag;
4005-
if (klass == rb_cObject)
4006-
rb_warn("already initialized constant %"PRIsVALUE"", name);
4007-
else
4008-
rb_warn("already initialized constant %"PRIsVALUE"::%"PRIsVALUE"",
4009-
rb_class_name(klass), name);
4005+
4006+
VALUE previous = Qnil;
40104007
if (!NIL_P(ce->file) && ce->line) {
4011-
rb_compile_warn(RSTRING_PTR(ce->file), ce->line,
4012-
"previous definition of %"PRIsVALUE" was here", name);
4008+
previous = rb_sprintf("\n%"PRIsVALUE":%d: warning: previous definition of %"PRIsVALUE" was here", ce->file, ce->line, name);
40134009
}
4010+
4011+
if (klass == rb_cObject)
4012+
rb_warn("already initialized constant %"PRIsVALUE"%"PRIsVALUE"", name, previous);
4013+
else
4014+
rb_warn("already initialized constant %"PRIsVALUE"::%"PRIsVALUE"%"PRIsVALUE"",
4015+
rb_class_name(klass), name, previous);
40144016
}
40154017
rb_clear_constant_cache_for_id(id);
40164018
setup_const_entry(ce, klass, val, visibility);

0 commit comments

Comments
 (0)