diff --git a/parse.y b/parse.y index 9603ec9169..8c6348804a 100644 --- a/parse.y +++ b/parse.y @@ -1434,7 +1434,7 @@ cases : opt_else exc_list : args | none -exc_var : kIN lhs +exc_var : ':' lhs { $$ = $2; } @@ -2257,7 +2257,8 @@ parse_regx(term, paren) options |= RE_OPTION_EXTENDED; break; case 'p': /* /p is obsolete, works as /m */ - yyerror("/p option is obsolete; use /m\n\tnote: /m does not change ^, $ behavior"); + rb_warn("/p option is obsolete; use /m\n\tnote: /m does not change ^, $ behavior"); + options |= RE_OPTION_POSIXLINE; break; case 'm': options |= RE_OPTION_MULTILINE; @@ -2266,16 +2267,16 @@ parse_regx(term, paren) once = 1; break; case 'n': - kcode = 8; - break; - case 'e': kcode = 16; break; + case 'e': + kcode = 32; + break; case 's': - kcode = 24; + kcode = 48; break; case 'u': - kcode = 32; + kcode = 64; break; default: pushback(c); @@ -4654,7 +4655,7 @@ rb_intern(name) const char *name; { static ID last_id = LAST_TOKEN; - int id; + ID id; int last; if (st_lookup(sym_tbl, name, &id)) diff --git a/re.c b/re.c index 1295ef23a6..ef1614db3b 100644 --- a/re.c +++ b/re.c @@ -791,33 +791,33 @@ rb_reg_initialize(obj, s, len, options) default: FL_SET(re, reg_kcode); break; - case 8: + case 16: kcode_none(re); break; - case 16: + case 32: kcode_euc(re); break; - case 24: + case 48: kcode_sjis(re); break; - case 32: + case 64: kcode_utf8(re); break; } - if (options & ~0x7) { + if (options & ~0xf) { kcode_set_option((VALUE)re); } if (ruby_ignorecase) { options |= RE_OPTION_IGNORECASE; FL_SET(re, REG_CASESTATE); } - re->ptr = make_regexp(s, len, options & 0x7); + re->ptr = make_regexp(s, len, options & 0xf); re->str = ALLOC_N(char, len+1); memcpy(re->str, s, len); re->str[len] = '\0'; re->len = len; - if (options & ~0x7) { + if (options & ~0xf) { kcode_reset_option(); } }