diff options
-rw-r--r-- | spec/ruby/optional/capi/string_spec.rb | 8 | ||||
-rw-r--r-- | sprintf.c | 26 |
2 files changed, 13 insertions, 21 deletions
diff --git a/spec/ruby/optional/capi/string_spec.rb b/spec/ruby/optional/capi/string_spec.rb index 0558fc9f7d..3a47fa9762 100644 --- a/spec/ruby/optional/capi/string_spec.rb +++ b/spec/ruby/optional/capi/string_spec.rb @@ -1040,9 +1040,11 @@ end @s.rb_sprintf3(true.class).should == s end - it "formats a TrueClass VALUE as 'true' if sign specified in format" do - s = 'Result: true.' - @s.rb_sprintf4(true.class).should == s + ruby_bug "#19167", ""..."3.2" do + it "formats a TrueClass VALUE as 'true' if sign specified in format" do + s = 'Result: TrueClass.' + @s.rb_sprintf4(true.class).should == s + end end it "truncates a string to a supplied precision if that is shorter than the string" do @@ -1106,26 +1106,16 @@ ruby__sfvextra(rb_printf_buffer *fp, size_t valsize, void *valp, long *sz, int s rb_raise(rb_eRuntimeError, "rb_vsprintf reentered"); } if (sign == '+') { - if (RB_TYPE_P(value, T_CLASS)) { # define LITERAL(str) (*sz = rb_strlen_lit(str), str) - - if (value == rb_cNilClass) { - return LITERAL("nil"); - } - else if (value == rb_cInteger) { - return LITERAL("Integer"); - } - else if (value == rb_cSymbol) { - return LITERAL("Symbol"); - } - else if (value == rb_cTrueClass) { - return LITERAL("true"); - } - else if (value == rb_cFalseClass) { - return LITERAL("false"); - } -# undef LITERAL + /* optimize special const cases */ + switch (value) { +# define LITERAL_CASE(x) case Q##x: return LITERAL(#x) + LITERAL_CASE(nil); + LITERAL_CASE(true); + LITERAL_CASE(false); +# undef LITERAL_CASE } +# undef LITERAL value = rb_inspect(value); } else if (SYMBOL_P(value)) { |