ruby-changes:1776
From: ko1@a...
Date: 25 Aug 2007 16:07:00 +0900
Subject: [ruby-changes:1776] nobu - Ruby:r13267 (trunk): * parse.y, re.c: re-applied revision 13092.
nobu 2007-08-25 16:06:47 +0900 (Sat, 25 Aug 2007) New Revision: 13267 Modified files: trunk/ChangeLog trunk/parse.y trunk/re.c Log: * parse.y, re.c: re-applied revision 13092. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=13267&r2=13266 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13267&r2=13266 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/re.c?r1=13267&r2=13266 Index: re.c =================================================================== --- re.c (revision 13266) +++ re.c (revision 13267) @@ -624,10 +624,25 @@ rb_raise(rb_eRegexpError, "%s: %s", err, RSTRING_PTR(desc)); } +static VALUE +rb_reg_error_desc(VALUE str, int options, const char *err) +{ + char opts[6]; + VALUE desc = rb_str_buf_new2(err); + + rb_str_buf_cat2(desc, ": /"); + rb_reg_expr_str(desc, RSTRING_PTR(str), RSTRING_LEN(str)); + opts[0] = '/'; + option_to_str(opts + 1, options); + strlcat(opts, arg_kcode(options), sizeof(opts)); + rb_str_buf_cat2(desc, opts); + return rb_exc_new3(rb_eRegexpError, desc); +} + static void -rb_reg_raise_str(VALUE str, const char *err, VALUE re) +rb_reg_raise_str(VALUE str, int options, const char *err) { - rb_reg_raise(RSTRING_PTR(str), RSTRING_LEN(str), err, re); + rb_exc_raise(rb_reg_error_desc(str, options, err)); } @@ -1552,7 +1567,7 @@ onig_errmsg_buffer err; if (rb_reg_initialize_str(re, s, options, err) != 0) { - rb_reg_raise_str(s, err, re); + rb_reg_raise_str(s, options, err); } return re; @@ -1566,15 +1581,8 @@ if (!str) str = rb_str_new(0,0); if (rb_reg_initialize_str(re, str, options, err) != 0) { - char opts[6]; - VALUE desc = rb_str_buf_new2(err); - - rb_str_buf_cat2(desc, ": /"); - rb_reg_expr_str(desc, RSTRING_PTR(str), RSTRING_LEN(str)); - opts[0] = '/'; - option_to_str(opts + 1, options); - strlcat(opts, arg_kcode(options), sizeof(opts)); - return rb_str_buf_cat2(desc, opts); + rb_set_errinfo(rb_reg_error_desc(str, options, err)); + return Qnil; } FL_SET(re, REG_LITERAL); return re; @@ -1889,7 +1897,7 @@ str = argv[0]; } if (rb_reg_initialize_str(self, str, flags, err) != 0) { - rb_reg_raise_str(str, err, self); + rb_reg_raise_str(str, flags, err); } return self; } @@ -2148,7 +2156,6 @@ onig_errmsg_buffer err; const char *s; long len; - int options; if (copy == re) return copy; rb_check_frozen(copy); @@ -2160,7 +2167,7 @@ s = RREGEXP(re)->str; len = RREGEXP(re)->len; if (rb_reg_initialize(copy, s, len, rb_enc_get(re), rb_reg_options(re), err) != 0) { - rb_reg_raise(s, len, err, copy); + rb_reg_raise(s, len, err, re); } return copy; } Index: ChangeLog =================================================================== --- ChangeLog (revision 13266) +++ ChangeLog (revision 13267) @@ -1,7 +1,9 @@ -Sat Aug 25 15:20:46 2007 Nobuyoshi Nakada <nobu@r...> +Sat Aug 25 16:06:40 2007 Nobuyoshi Nakada <nobu@r...> * io.c (swallow): removed condition using an unset variable. + * parse.y, re.c: re-applied revision 13092. + Sat Aug 25 11:45:37 2007 Yukihiro Matsumoto <matz@r...> * encoding.c: provide basic features for M17N. Index: parse.y =================================================================== --- parse.y (revision 13266) +++ parse.y (revision 13267) @@ -430,8 +430,8 @@ extern int rb_local_defined(ID); extern int rb_parse_in_eval(void); -static VALUE reg_compile_gen(struct parser_params*, const char *, long, int); -#define reg_compile(ptr,len,options) reg_compile_gen(parser, ptr, len, options) +static VALUE reg_compile_gen(struct parser_params*, VALUE, int); +#define reg_compile(str,options) reg_compile_gen(parser, str, options) #else #define remove_begin(node) (node) #endif /* !RIPPER */ @@ -3629,14 +3629,14 @@ int options = $3; NODE *node = $2; if (!node) { - node = NEW_LIT(rb_reg_compile(0, options & ~RE_OPTION_ONCE)); + node = NEW_LIT(reg_compile(0, options & ~RE_OPTION_ONCE)); } else switch (nd_type(node)) { case NODE_STR: { VALUE src = node->nd_lit; nd_set_type(node, NODE_LIT); - node->nd_lit = rb_reg_compile(src, options&~RE_OPTION_ONCE); + node->nd_lit = reg_compile(src, options&~RE_OPTION_ONCE); } break; default: @@ -5277,7 +5277,6 @@ parser_heredoc_identifier(struct parser_params *parser) { int c = nextc(), term, func = 0, len; - unsigned int uc; if (c == '-') { c = nextc(); @@ -5662,7 +5661,6 @@ register int c; int space_seen = 0; int cmd_state; - unsigned char uc; enum lex_state_e last_state; #ifdef RIPPER int fallthru = Qfalse; @@ -8117,10 +8115,12 @@ vtable_included(lvtbl->vars, id)); } +VALUE rb_reg_compile(VALUE str, int options); + static VALUE -reg_compile_gen(struct parser_params* parser, const char *ptr, long len, int options) +reg_compile_gen(struct parser_params* parser, VALUE str, int options) { - VALUE re = rb_reg_compile(STR_NEW(ptr, len), (options) & ~RE_OPTION_ONCE); + VALUE re = rb_reg_compile(str, (options) & ~RE_OPTION_ONCE); if (NIL_P(re)) { RB_GC_GUARD(re) = rb_obj_as_string(rb_errinfo()); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml