Revision: 139 http://trac.macosforge.org/projects/ruby/changeset/139 Author: lsansonetti@apple.com Date: 2008-04-15 17:54:17 -0700 (Tue, 15 Apr 2008) Log Message: ----------- fixing some regressions Modified Paths: -------------- MacRuby/trunk/encoding.c MacRuby/trunk/file.c MacRuby/trunk/load.c MacRuby/trunk/parse.y MacRuby/trunk/re.c MacRuby/trunk/string.c Modified: MacRuby/trunk/encoding.c =================================================================== --- MacRuby/trunk/encoding.c 2008-04-15 08:50:03 UTC (rev 138) +++ MacRuby/trunk/encoding.c 2008-04-16 00:54:17 UTC (rev 139) @@ -589,6 +589,9 @@ int rb_enc_internal_get_index(VALUE obj) { +#if WITH_OBJC + return 0; +#else int i; i = ENCODING_GET_INLINED(obj); @@ -599,11 +602,13 @@ i = NUM2INT(iv); } return i; +#endif } void rb_enc_internal_set_index(VALUE obj, int idx) { +#if !WITH_OBJC if (idx < ENCODING_INLINE_MAX) { ENCODING_SET_INLINED(obj, idx); return; @@ -611,6 +616,7 @@ ENCODING_SET_INLINED(obj, ENCODING_INLINE_MAX); rb_ivar_set(obj, rb_id_encoding(), INT2NUM(idx)); return; +#endif } void @@ -642,7 +648,11 @@ rb_encoding* rb_enc_get(VALUE obj) { +#if WITH_OBJC + return rb_ascii8bit_encoding(); /* FIXME */ +#else return rb_enc_from_index(rb_enc_get_index(obj)); +#endif } rb_encoding* Modified: MacRuby/trunk/file.c =================================================================== --- MacRuby/trunk/file.c 2008-04-15 08:50:03 UTC (rev 138) +++ MacRuby/trunk/file.c 2008-04-16 00:54:17 UTC (rev 139) @@ -2750,6 +2750,7 @@ if (tainted) OBJ_TAINT(result); rb_str_set_len(result, p - buf); + RSTRING_SYNC(result); return result; } @@ -4203,7 +4204,8 @@ rb_str_cat2(newpath, "/"); rb_str_cat2(newpath, p0); - p0 = RSTRING_PTR(path = newpath); + path = newpath; + p0 = RSTRING_PTR(path); } for (;;) { #ifndef S_IWOTH @@ -4373,11 +4375,11 @@ } if (rb_load_path) { - long i; + long i, count; Check_Type(rb_load_path, T_ARRAY); tmp = rb_ary_new(); - for (i=0;i<RARRAY_LEN(rb_load_path);i++) { + for (i=0, count=RARRAY_LEN(rb_load_path);i < count;i++) { VALUE str = RARRAY_AT(rb_load_path, i); FilePathValue(str); if (RSTRING_LEN(str) > 0) { Modified: MacRuby/trunk/load.c =================================================================== --- MacRuby/trunk/load.c 2008-04-15 08:50:03 UTC (rev 138) +++ MacRuby/trunk/load.c 2008-04-16 00:54:17 UTC (rev 139) @@ -103,7 +103,7 @@ { VALUE v, features, p, load_path = 0; const char *f, *e; - long i, len, elen, n; + long i, count, len, elen, n; st_table *loading_tbl; st_data_t data; int type; @@ -120,9 +120,9 @@ type = 0; } features = get_loaded_features(); - for (i = 0; i < RARRAY_LEN(features); ++i) { + for (i = 0, count = RARRAY_LEN(features); i < count; ++i) { v = RARRAY_AT(features, i); - f = StringValuePtr(v); + f = StringValueCStr(v); if ((n = RSTRING_LEN(v)) < len) continue; if (strncmp(f, feature, len) != 0) { if (expanded) continue; Modified: MacRuby/trunk/parse.y =================================================================== --- MacRuby/trunk/parse.y 2008-04-15 08:50:03 UTC (rev 138) +++ MacRuby/trunk/parse.y 2008-04-16 00:54:17 UTC (rev 139) @@ -4945,6 +4945,13 @@ { VALUE str; +#if WITH_OBJC + /* Let's not create unnecessary bytestrings. */ + long slen = strlen(p); + if (slen < n) + n = slen; +#endif + str = rb_enc_str_new(p, n, enc); if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { @@ -5389,12 +5396,14 @@ static void dispose_string(VALUE str) { +#if WITH_OBJC /* TODO: should use another API? */ -#if !WITH_OBJC + CFRelease((CFTypeRef)str); +#else if (RBASIC(str)->flags & RSTRING_NOEMBED) xfree(RSTRING_PTR(str)); + rb_gc_force_recycle(str); #endif - rb_gc_force_recycle(str); } static int Modified: MacRuby/trunk/re.c =================================================================== --- MacRuby/trunk/re.c 2008-04-15 08:50:03 UTC (rev 138) +++ MacRuby/trunk/re.c 2008-04-16 00:54:17 UTC (rev 139) @@ -2037,6 +2037,7 @@ buf = rb_str_buf_new(0); + *fixed_enc = 0; if (rb_enc_asciicompat(enc)) *fixed_enc = 0; else { @@ -2286,7 +2287,7 @@ volatile VALUE save_str = str; if (reg_cache && RREGEXP(reg_cache)->len == RSTRING_LEN(str) && ENCODING_GET(reg_cache) == ENCODING_GET(str) - && memcmp(RREGEXP(reg_cache)->str, RSTRING_PTR(str), RSTRING_LEN(str)) == 0) + && memcmp(RREGEXP(reg_cache)->str, RSTRING_PTR(str), RSTRING_LEN(str)) == 0) return reg_cache; return reg_cache = rb_reg_new_str(save_str, 0); Modified: MacRuby/trunk/string.c =================================================================== --- MacRuby/trunk/string.c 2008-04-15 08:50:03 UTC (rev 138) +++ MacRuby/trunk/string.c 2008-04-16 00:54:17 UTC (rev 139) @@ -184,7 +184,11 @@ #define is_ascii_string(str) (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) #define is_broken_string(str) (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) -#define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str)) +#if WITH_OBJC +# define STR_ENC_GET(str) (rb_ascii8bit_encoding()) /* TODO */ +#else +# define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str)) +#endif static int single_byte_optimizable(VALUE str) @@ -395,6 +399,9 @@ int rb_enc_str_asciionly_p(VALUE str) { +#if WITH_OBJC + return Qtrue; +#else rb_encoding *enc = STR_ENC_GET(str); if (!rb_enc_asciicompat(enc)) @@ -402,6 +409,7 @@ else if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) return Qtrue; return Qfalse; +#endif } static inline void @@ -1437,17 +1445,8 @@ rb_str_subseq(VALUE str, long beg, long len) { #if WITH_OBJC - CFIndex buffer_len, buffer_used; - UInt8 *buffer; - - buffer_len = (sizeof(UInt8) * len) + 1; - buffer = (UInt8 *)alloca(buffer_len); - - CFStringGetBytes((CFStringRef)str, CFRangeMake(beg, len), - kCFStringEncodingUTF8, 0, false, buffer, buffer_len, &buffer_used); - assert(buffer_used == buffer_len - 1); - buffer[buffer_used] = '\0'; - return rb_str_new5(str, (const char *)buffer, len); + return (VALUE)CFStringCreateWithSubstring(NULL, (CFStringRef)str, + CFRangeMake(beg, len)); #else VALUE str2 = rb_str_new5(str, RSTRING_PTR(str)+beg, len); @@ -1671,6 +1670,12 @@ rb_str_buf_cat(VALUE str, const char *ptr, long len) { #if WITH_OBJC + if (ptr[len] != '\0') { + char *p = alloca(len + 1); + memcpy(p, ptr, len); + p[len] = '\0'; + ptr = p; + } CFStringAppendCString((CFMutableStringRef)str, ptr, kCFStringEncodingUTF8); /* FIXME ptr might be a bytestring */ #else @@ -4180,8 +4185,12 @@ rb_str_inspect(VALUE str) { #if WITH_OBJC - /* TODO */ - return rb_str_dup(str); + VALUE result = rb_str_new(NULL, 0); + rb_str_cat2(result, "\""); + rb_str_buf_append(result, str); + rb_str_cat2(result, "\""); + /* TODO needs to escape some characters */ + return result; #else rb_encoding *enc = STR_ENC_GET(str); char *p, *pend; @@ -5462,7 +5471,7 @@ static VALUE rb_str_split_m(int argc, VALUE *argv, VALUE str) { -#if WITH_OBJC +#if 0//WITH_OBJC rb_notimplement(); #else rb_encoding *enc; @@ -5484,7 +5493,11 @@ i = 1; } +#if WITH_OBJC + enc = rb_ascii8bit_encoding(); +#else enc = STR_ENC_GET(str); +#endif if (NIL_P(spat)) { if (!NIL_P(rb_fs)) { spat = rb_fs; @@ -5495,7 +5508,11 @@ else { fs_set: if (TYPE(spat) == T_STRING) { +#if WITH_OBJC + rb_encoding *enc2 = rb_ascii8bit_encoding(); +#else rb_encoding *enc2 = STR_ENC_GET(spat); +#endif if (rb_enc_mbminlen(enc2) == 1) { if (RSTRING_LEN(spat) == 1 && RSTRING_PTR(spat)[0] == ' '){ @@ -6200,7 +6217,7 @@ break; } if (i < n - 1) { - CFRange range = CFRangeMake(i, n); + CFRange range = CFRangeMake(i + 1, n - i - 1); CFStringDelete((CFMutableStringRef)str, range); n -= range.length; } @@ -6213,7 +6230,7 @@ break; } if (i > 0) { - CFRange range = CFRangeMake(i, n); + CFRange range = CFRangeMake(0, i); CFStringDelete((CFMutableStringRef)str, range); } } @@ -7236,6 +7253,18 @@ static VALUE sym_inspect(VALUE sym) { +#if WITH_OBJC + ID id = SYM2ID(sym); + VALUE str; + + sym = rb_id2str(id); + if (!rb_enc_symname_p(RSTRING_CPTR(sym), rb_ascii8bit_encoding())) { + sym = rb_str_inspect(sym); + } + str = rb_str_new(":", 1); + rb_str_buf_append(str, sym); + return str; +#else VALUE str, klass = Qundef; ID id = SYM2ID(sym); rb_encoding *enc; @@ -7246,7 +7275,7 @@ RSTRING_PTR(str)[0] = ':'; memcpy(RSTRING_PTR(str)+1, RSTRING_PTR(sym), RSTRING_LEN(sym)); if (RSTRING_LEN(sym) != strlen(RSTRING_PTR(sym)) || - !rb_enc_symname_p(RSTRING_PTR(sym), enc)) { + !rb_enc_symname_p(RSTRING_PTR(sym), enc)) { str = rb_str_inspect(str); strncpy(RSTRING_PTR(str), ":\"", 2); } @@ -7255,6 +7284,7 @@ rb_str_append(str, rb_inspect(klass)); } return str; +#endif }
participants (1)
-
source_changes@macosforge.org