Revision: 1159 http://trac.macosforge.org/projects/ruby/changeset/1159 Author: lsansonetti@apple.com Date: 2009-03-25 22:09:25 -0700 (Wed, 25 Mar 2009) Log Message: ----------- fix bugs discovered by rubyspec Modified Paths: -------------- MacRuby/branches/experimental/string.c Modified: MacRuby/branches/experimental/string.c =================================================================== --- MacRuby/branches/experimental/string.c 2009-03-26 03:21:33 UTC (rev 1158) +++ MacRuby/branches/experimental/string.c 2009-03-26 05:09:25 UTC (rev 1159) @@ -4923,28 +4923,38 @@ * :fred.inspect #=> ":fred" */ +static inline bool +sym_printable(const char *str, long len) +{ + // TODO multibyte symbols + long i; + for (i = 0; i < len; i++) { + if (!isprint(str[i])) { + return false; + } + } + return true; +} + static VALUE sym_inspect(VALUE sym, SEL sel) { - if (RSTRING_LEN(sym) == 0) { + const char *symstr = RSYMBOL(sym)->str; + + long len = strlen(symstr); + if (len == 0) { return rb_str_new2(":\"\""); } - CFCharacterSetRef letters = - CFCharacterSetGetPredefined(kCFCharacterSetLetter); - const bool should_be_quoted = - !CFCharacterSetIsCharacterMember(letters, - CFStringGetCharacterAtIndex((CFStringRef)sym, 0)); - VALUE str = rb_str_new2(":"); - - if (should_be_quoted) { + if (!rb_symname_p(symstr) || !sym_printable(symstr, len)) { rb_str_buf_cat2(str, "\""); - } - rb_str_buf_append(str, sym); - if (should_be_quoted) { + rb_str_buf_append(str, sym); rb_str_buf_cat2(str, "\""); } + else { + rb_str_buf_append(str, sym); + } return str; }
participants (1)
-
source_changes@macosforge.org