[前][次][番号順一覧][スレッド一覧]

ruby-changes:10642

From: shyouhei <ko1@a...>
Date: Tue, 10 Feb 2009 19:40:40 +0900 (JST)
Subject: [ruby-changes:10642] Ruby:r22199 (ruby_1_8_6): merge revision(s) 20214:

shyouhei	2009-02-10 19:40:28 +0900 (Tue, 10 Feb 2009)

  New Revision: 22199

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22199

  Log:
    merge revision(s) 20214:
    * eval.c (rb_feature_p): returns found feature name if loading.
      [ruby-core:19798]
    * eval.c (search_required): ditto.

  Modified files:
    branches/ruby_1_8_6/ChangeLog
    branches/ruby_1_8_6/eval.c
    branches/ruby_1_8_6/version.h

Index: ruby_1_8_6/ChangeLog
===================================================================
--- ruby_1_8_6/ChangeLog	(revision 22198)
+++ ruby_1_8_6/ChangeLog	(revision 22199)
@@ -1,3 +1,10 @@
+Tue Feb 10 19:13:08 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* eval.c (rb_feature_p): returns found feature name if loading.
+	  [ruby-core:19798]
+
+	* eval.c (search_required): ditto.
+
 Mon Feb  9 17:34:55 2009  NAKAMURA Usaku  <usa@r...>
 
 	* win32/win32.c (rb_w32_accept): secure fd before accept because if
Index: ruby_1_8_6/version.h
===================================================================
--- ruby_1_8_6/version.h	(revision 22198)
+++ ruby_1_8_6/version.h	(revision 22199)
@@ -1,15 +1,15 @@
 #define RUBY_VERSION "1.8.6"
-#define RUBY_RELEASE_DATE "2009-02-09"
+#define RUBY_RELEASE_DATE "2009-02-10"
 #define RUBY_VERSION_CODE 186
-#define RUBY_RELEASE_CODE 20090209
-#define RUBY_PATCHLEVEL 325
+#define RUBY_RELEASE_CODE 20090210
+#define RUBY_PATCHLEVEL 326
 
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 8
 #define RUBY_VERSION_TEENY 6
 #define RUBY_RELEASE_YEAR 2009
 #define RUBY_RELEASE_MONTH 2
-#define RUBY_RELEASE_DAY 9
+#define RUBY_RELEASE_DAY 10
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: ruby_1_8_6/eval.c
===================================================================
--- ruby_1_8_6/eval.c	(revision 22198)
+++ ruby_1_8_6/eval.c	(revision 22199)
@@ -7003,16 +7003,16 @@
     0
 };
 
-static int rb_feature_p _((const char *, const char *, int));
+static int rb_feature_p _((const char **, const char *, int));
 static int search_required _((VALUE, VALUE *, VALUE *));
 
 static int
-rb_feature_p(feature, ext, rb)
-    const char *feature, *ext;
+rb_feature_p(ftptr, ext, rb)
+    const char **ftptr, *ext;
     int rb;
 {
     VALUE v;
-    const char *f, *e;
+    const char *f, *e, *feature = *ftptr;
     long i, len, elen;
 
     if (ext) {
@@ -7030,18 +7030,21 @@
 	    continue;
 	if (!*(e = f + len)) {
 	    if (ext) continue;
+	    *ftptr = 0;
 	    return 'u';
 	}
 	if (*e != '.') continue;
 	if ((!rb || !ext) && (IS_SOEXT(e) || IS_DLEXT(e))) {
+	    *ftptr = 0;
 	    return 's';
 	}
 	if ((rb || !ext) && (strcmp(e, ".rb") == 0)) {
+	    *ftptr = 0;
 	    return 'r';
 	}
     }
     if (loading_tbl) {
-	if (st_lookup(loading_tbl, (st_data_t)feature, 0)) {
+	if (st_lookup(loading_tbl, (st_data_t)feature, (st_data_t *)ftptr)) {
 	    if (!ext) return 'u';
 	    return strcmp(ext, ".rb") ? 's' : 'r';
 	}
@@ -7053,7 +7056,7 @@
 	    MEMCPY(buf, feature, char, len);
 	    for (i = 0; (e = loadable_ext[i]) != 0; i++) {
 		strncpy(buf + len, e, DLEXT_MAXLEN + 1);
-		if (st_lookup(loading_tbl, (st_data_t)buf, 0)) {
+		if (st_lookup(loading_tbl, (st_data_t)buf, (st_data_t *)ftptr)) {
 		    return i ? 's' : 'r';
 		}
 	    }
@@ -7061,6 +7064,7 @@
     }
     return 0;
 }
+#define rb_feature_p(feature, ext, rb) rb_feature_p(&feature, ext, rb)
 
 int
 rb_provided(feature)
@@ -7169,7 +7173,7 @@
     VALUE fname, *featurep, *path;
 {
     VALUE tmp;
-    char *ext, *ftptr;
+    const char *ext, *ftptr;
     int type;
 
     *featurep = fname;
@@ -7177,12 +7181,18 @@
     ext = strrchr(ftptr = RSTRING_PTR(fname), '.');
     if (ext && !strchr(ext, '/')) {
 	if (strcmp(".rb", ext) == 0) {
-	    if (rb_feature_p(ftptr, ext, Qtrue)) return 'r';
+	    if (rb_feature_p(ftptr, ext, Qtrue)) {
+		if (ftptr) *path = rb_str_new2(ftptr);
+		return 'r';
+	    }
 	    if ((*path = rb_find_file(fname)) != 0) return 'r';
 	    return 0;
 	}
 	else if (IS_SOEXT(ext)) {
-	    if (rb_feature_p(ftptr, ext, Qfalse)) return 's';
+	    if (rb_feature_p(ftptr, ext, Qfalse)) {
+		if (ftptr) *path = rb_str_new2(ftptr);
+		return 's';
+	    }
 	    tmp = rb_str_new(RSTRING_PTR(fname), ext-RSTRING_PTR(fname));
 	    *featurep = tmp;
 #ifdef DLEXT2
@@ -7201,7 +7211,10 @@
 #endif
 	}
 	else if (IS_DLEXT(ext)) {
-	    if (rb_feature_p(ftptr, ext, Qfalse)) return 's';
+	    if (rb_feature_p(ftptr, ext, Qfalse)) {
+		if (ftptr) *path = rb_str_new2(ftptr);
+		return 's';
+	    }
 	    if ((*path = rb_find_file(fname)) != 0) return 's';
 	}
     }
@@ -7210,13 +7223,16 @@
     *featurep = tmp;
     switch (type) {
       case 0:
-	ftptr = RSTRING_PTR(tmp);
-	return rb_feature_p(ftptr, 0, Qfalse);
+	type = rb_feature_p(ftptr, 0, Qfalse);
+	if (type && ftptr) *path = rb_str_new2(ftptr);
+	return type;
 
       default:
 	ext = strrchr(ftptr = RSTRING(tmp)->ptr, '.');
-	if (rb_feature_p(ftptr, ext, !--type)) break;
-	*path = rb_find_file(tmp);
+	if (!rb_feature_p(ftptr, ext, !--type))
+	    *path = rb_find_file(tmp);
+	else if (ftptr)
+	    *path = rb_str_new2(ftptr);
     }
     return type ? 's' : 'r';
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]