[macruby-changes] [139] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Apr 15 17:54:19 PDT 2008
Revision: 139
http://trac.macosforge.org/projects/ruby/changeset/139
Author: lsansonetti at 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
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080415/5120cafe/attachment-0001.html
More information about the macruby-changes
mailing list