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

ruby-changes:36615

From: nobu <ko1@a...>
Date: Wed, 3 Dec 2014 14:51:44 +0900 (JST)
Subject: [ruby-changes:36615] nobu:r48696 (trunk): dmyenc.c: try to load encdb

nobu	2014-12-03 14:51:28 +0900 (Wed, 03 Dec 2014)

  New Revision: 48696

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

  Log:
    dmyenc.c: try to load encdb
    
    * load.c (ruby_require_internal): separate from rb_require_safe,
      not to raise exceptions.
    * ruby.c (process_options): remove unnatural encoding search.

  Modified files:
    trunk/ChangeLog
    trunk/dmyenc.c
    trunk/load.c
    trunk/ruby.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 48695)
+++ ChangeLog	(revision 48696)
@@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Wed Dec  3 14:51:26 2014  Nobuyoshi Nakada  <nobu@r...>
+
+	* load.c (ruby_require_internal): separate from rb_require_safe,
+	  not to raise exceptions.
+
+	* ruby.c (process_options): remove unnatural encoding search.
+
 Wed Dec  3 14:34:07 2014  Nobuyoshi Nakada  <nobu@r...>
 
 	* string.c (setup_fake_str): fake string does not share another
Index: dmyenc.c
===================================================================
--- dmyenc.c	(revision 48695)
+++ dmyenc.c	(revision 48696)
@@ -1,4 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/dmyenc.c#L1
+#define require(name) ruby_require_internal(name, (unsigned int)sizeof(name)-1)
+int ruby_require_internal(const char *, int);
+
 void
 Init_enc(void)
 {
+    if (require("enc/encdb.so") == 0) {
+	require("enc/trans/transdb.so");
+    }
 }
Index: load.c
===================================================================
--- load.c	(revision 48695)
+++ load.c	(revision 48696)
@@ -940,10 +940,10 @@ load_ext(VALUE path) https://github.com/ruby/ruby/blob/trunk/load.c#L940
     return (VALUE)dln_load(RSTRING_PTR(path));
 }
 
-VALUE
-rb_require_safe(VALUE fname, int safe)
+static int
+rb_require_internal(VALUE fname, int safe)
 {
-    volatile VALUE result = Qnil;
+    volatile int result = -2;
     rb_thread_t *th = GET_THREAD();
     volatile VALUE errinfo = th->errinfo;
     int state;
@@ -985,11 +985,11 @@ rb_require_safe(VALUE fname, int safe) https://github.com/ruby/ruby/blob/trunk/load.c#L985
 	}
 	if (found) {
 	    if (!path || !(ftptr = load_lock(RSTRING_PTR(path)))) {
-		result = Qfalse;
+		result = -1;
 	    }
 	    else if (!*ftptr) {
 		rb_provide_feature(path);
-		result = Qtrue;
+		result = 0;
 	    }
 	    else {
 		switch (found) {
@@ -1004,7 +1004,7 @@ rb_require_safe(VALUE fname, int safe) https://github.com/ruby/ruby/blob/trunk/load.c#L1004
 		    break;
 		}
 		rb_provide_feature(path);
-		result = Qtrue;
+		result = 0;
 	    }
 	}
     }
@@ -1013,11 +1013,7 @@ rb_require_safe(VALUE fname, int safe) https://github.com/ruby/ruby/blob/trunk/load.c#L1013
 
     rb_set_safe_level_force(saved.safe);
     if (state) {
-	JUMP_TAG(state);
-    }
-
-    if (NIL_P(result)) {
-	load_failed(fname);
+	return state;
     }
 
     th->errinfo = errinfo;
@@ -1031,6 +1027,29 @@ rb_require_safe(VALUE fname, int safe) https://github.com/ruby/ruby/blob/trunk/load.c#L1027
     return result;
 }
 
+int
+ruby_require_internal(const char *fname, unsigned int len)
+{
+    struct RString fake;
+    VALUE str = rb_setup_fake_str(&fake, fname, len, 0);
+    return rb_require_internal(str, 0);
+}
+
+VALUE
+rb_require_safe(VALUE fname, int safe)
+{
+    int result = rb_require_internal(fname, safe);
+
+    if (result > 0) {
+	JUMP_TAG(result);
+    }
+    if (result < -1) {
+	load_failed(fname);
+    }
+
+    return result ? Qfalse : Qtrue;
+}
+
 VALUE
 rb_require(const char *fname)
 {
Index: ruby.c
===================================================================
--- ruby.c	(revision 48695)
+++ ruby.c	(revision 48696)
@@ -1368,7 +1368,6 @@ process_options(int argc, char **argv, s https://github.com/ruby/ruby/blob/trunk/ruby.c#L1368
     ruby_gc_set_params(opt->safe_level);
     ruby_init_loadpath_safe(opt->safe_level);
     Init_enc();
-    rb_enc_find_index("encdb");
     lenc = rb_locale_encoding();
     rb_enc_associate(rb_progname, lenc);
     rb_obj_freeze(rb_progname);

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

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