summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-06-23 10:30:12 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-06-23 10:30:12 +0000
commit6a3c97169c8a671f5feda7eba2b2a7529252daf3 (patch)
tree299c92f68d6acda64e18e3e43ceda8db1d59ff61
parent6b15412c77fc82ceacb156e4595571dd7262ab5d (diff)
*** empty log message ***
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--parse.y11
-rw-r--r--regex.c10
3 files changed, 19 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 747320f..61cebdf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue Jun 23 11:46:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): `&&=' and `||=' added.
+
Sat Jun 20 02:53:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
* parse.y (assignable): nesting local variables should have higher
diff --git a/parse.y b/parse.y
index 8b13766..de14f4f 100644
--- a/parse.y
+++ b/parse.y
@@ -441,7 +441,6 @@ mlhs : mlhs_head
{
$$ = $2;
}
-
| mlhs_head tSTAR lhs
{
$$ = NEW_MASGN(NEW_LIST($1), $3);
@@ -2470,6 +2469,11 @@ retry:
case '&':
if ((c = nextc()) == '&') {
lex_state = EXPR_BEG;
+ if ((c = nextc()) == '=') {
+ yylval.id = tANDOP;
+ return tOP_ASGN;
+ }
+ pushback(c);
return tANDOP;
}
else if (c == '=') {
@@ -2493,6 +2497,11 @@ retry:
case '|':
lex_state = EXPR_BEG;
if ((c = nextc()) == '|') {
+ if ((c = nextc()) == '=') {
+ yylval.id = tOROP;
+ return tOP_ASGN;
+ }
+ pushback(c);
return tOROP;
}
else if (c == '=') {
diff --git a/regex.c b/regex.c
index accfbdf..fbe91ec 100644
--- a/regex.c
+++ b/regex.c
@@ -2824,7 +2824,7 @@ typedef union
} while(0)
#define AT_STRINGS_BEG(d) (d == string)
-#define AT_STRINGS_END(d) (d == dend)
+#define AT_STRINGS_END(d) (d == dend)
#define AT_WORD_BOUNDARY(d) \
(AT_STRINGS_BEG(d) || AT_STRINGS_END(d) || IS_A_LETTER(d - 1) != IS_A_LETTER(d))
@@ -3300,14 +3300,14 @@ re_match(bufp, string_arg, size, pos, regs)
case begline:
if (size == 0
- || d == string
+ || AT_STRINGS_BEG(d)
|| (d && d[-1] == '\n'))
break;
else
goto fail;
case endline:
- if (d == dend || *d == '\n')
+ if (AT_STRINGS_END(d) || *d == '\n')
break;
goto fail;
@@ -3604,7 +3604,7 @@ re_match(bufp, string_arg, size, pos, regs)
if (*p == 0xff) {
p++;
if (!--mcnt
- || d == dend
+ || AT_STRINGS_END(d)
|| (unsigned char)*d++ != (unsigned char)*p++)
goto fail;
continue;
@@ -3613,7 +3613,7 @@ re_match(bufp, string_arg, size, pos, regs)
if (c != (unsigned char)*p++
|| !--mcnt /* redundant check if pattern was
compiled properly. */
- || d == dend
+ || AT_STRINGS_END(d)
|| (unsigned char)*d++ != (unsigned char)*p++)
goto fail;
continue;