ruby-changes:2908
From: ko1@a...
Date: 21 Dec 2007 13:40:25 +0900
Subject: [ruby-changes:2908] nobu - Ruby:r14399 (trunk): * encoding.c (rb_enc_register): set encoding constant.
nobu 2007-12-21 13:40:13 +0900 (Fri, 21 Dec 2007)
New Revision: 14399
Modified files:
trunk/ChangeLog
trunk/encoding.c
trunk/ruby.c
Log:
* encoding.c (rb_enc_register): set encoding constant.
* encoding.c (rb_enc_find_index): replace non-alphanumeric chars with
underscores, so that initialize function can be called.
* ruby.c (proc_options, process_options): finds encoding after
load_path is initialized.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ruby.c?r1=14399&r2=14398
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14399&r2=14398
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/encoding.c?r1=14399&r2=14398
Index: encoding.c
===================================================================
--- encoding.c (revision 14398)
+++ encoding.c (revision 14399)
@@ -158,6 +158,7 @@
}
static VALUE enc_based_encoding(VALUE);
+static void set_encoding_const(const char *, rb_encoding *);
int rb_enc_registered(const char *name);
int
@@ -170,16 +171,21 @@
if (strcasecmp(name, rb_enc_name(oldenc))) {
st_data_t key = (st_data_t)name, alias;
st_delete(enc_table_alias, &key, &alias);
+ index = enc_register(name, encoding);
}
else if (enc_initialized_p(oldenc) &&
- !NIL_P(enc_based_encoding(ENC_FROM_ENCODING(encoding)))) {
- return enc_register_at(index, name, encoding);
+ !NIL_P(enc_based_encoding(ENC_FROM_ENCODING(oldenc)))) {
+ enc_register_at(index, name, encoding);
}
else {
rb_raise(rb_eArgError, "encoding %s is already registered", name);
}
}
- return enc_register(name, encoding);
+ else {
+ index = enc_register(name, encoding);
+ }
+ set_encoding_const(name, rb_enc_from_index(index));
+ return index;
}
int
@@ -293,6 +299,11 @@
int i = rb_enc_registered(name);
if (i < 0) {
VALUE enclib = rb_sprintf("enc/%s", name);
+ char *s = RSTRING_PTR(enclib) + 4, *e = RSTRING_END(enclib);
+ while (s < e) {
+ if (!ISALNUM(*s)) *s = '_';
+ ++s;
+ }
OBJ_FREEZE(enclib);
if (RTEST(rb_protect(require_enc, enclib, 0)))
i = rb_enc_registered(name);
Index: ChangeLog
===================================================================
--- ChangeLog (revision 14398)
+++ ChangeLog (revision 14399)
@@ -1,3 +1,13 @@
+Fri Dec 21 13:40:11 2007 Nobuyoshi Nakada <nobu@r...>
+
+ * encoding.c (rb_enc_register): set encoding constant.
+
+ * encoding.c (rb_enc_find_index): replace non-alphanumeric chars with
+ underscores, so that initialize function can be called.
+
+ * ruby.c (proc_options, process_options): finds encoding after
+ load_path is initialized.
+
Fri Dec 21 13:10:57 2007 Yukihiro Matsumoto <matz@r...>
* io.c (rb_io_external_encoding): new method.
Index: ruby.c
===================================================================
--- ruby.c (revision 14398)
+++ ruby.c (revision 14399)
@@ -81,6 +81,7 @@
int yydebug;
char *script;
VALUE e_script;
+ const char *enc_name;
int enc_index;
};
@@ -739,7 +740,7 @@
break;
}
if (enc) {
- opt->enc_index = rb_enc_find_index(rb_enc_name(enc));
+ opt->enc_name = rb_enc_name(enc);
}
s++;
}
@@ -810,9 +811,7 @@
rb_raise(rb_eRuntimeError, "missing argument for --encoding");
}
encoding:
- if ((opt->enc_index = rb_enc_find_index(s)) < 0) {
- rb_raise(rb_eRuntimeError, "unknown encoding name - %s", s);
- }
+ opt->enc_name = s;
}
else if (strncmp("encoding=", s, 9) == 0) {
if (!*(s += 9)) goto noencoding;
@@ -981,6 +980,11 @@
ruby_init_gems(opt);
parser = rb_parser_new();
if (opt->yydebug) rb_parser_set_yydebug(parser, Qtrue);
+ if ((s = opt->enc_name) != 0) {
+ if ((opt->enc_index = rb_enc_find_index(s)) < 0) {
+ rb_raise(rb_eRuntimeError, "unknown encoding name - %s", s);
+ }
+ }
if (opt->e_script) {
if (opt->enc_index >= 0)
rb_enc_associate_index(opt->e_script, opt->enc_index);
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml