mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* parse.y (yylex): 'do' should return kDO_BLOCK on EXPR_ENDARG.
* parse.y (singleton): "def (()).a end" dumped core. * parse.y (range_op): node may be null. * parse.y (match_gen): ditto. * parse.y (arg): void value check for "..", "...", "!", and "not". * parse.y (match_gen): void value check for "=~". * parse.y (value_expr): check NODE_AND and NODE_OR recursively. * parse.y (cond0): void value check added for conditionals. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
94f86651d6
commit
91511afa9c
2 changed files with 71 additions and 31 deletions
20
ChangeLog
20
ChangeLog
|
@ -2,6 +2,16 @@ Wed Jun 12 02:38:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
||||||
|
|
||||||
* parse.y (stmt): fix typo.
|
* parse.y (stmt): fix typo.
|
||||||
|
|
||||||
|
Wed Jun 12 01:10:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (yylex): 'do' should return kDO_BLOCK on EXPR_ENDARG.
|
||||||
|
|
||||||
|
* parse.y (singleton): "def (()).a end" dumped core.
|
||||||
|
|
||||||
|
* parse.y (range_op): node may be null.
|
||||||
|
|
||||||
|
* parse.y (match_gen): ditto.
|
||||||
|
|
||||||
Tue Jun 11 19:20:34 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
Tue Jun 11 19:20:34 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||||
|
|
||||||
* configure.in (LIBRUBY): rename to lib$(LIBRUBY_SO).a on Cygwin/MinGW.
|
* configure.in (LIBRUBY): rename to lib$(LIBRUBY_SO).a on Cygwin/MinGW.
|
||||||
|
@ -9,6 +19,16 @@ Tue Jun 11 19:20:34 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||||
* configure.in, cygwin/GNUmakefile: use dllwrap when --disable-shared
|
* configure.in, cygwin/GNUmakefile: use dllwrap when --disable-shared
|
||||||
is specified.
|
is specified.
|
||||||
|
|
||||||
|
Tue Jun 11 17:12:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (arg): void value check for "..", "...", "!", and "not".
|
||||||
|
|
||||||
|
* parse.y (match_gen): void value check for "=~".
|
||||||
|
|
||||||
|
* parse.y (value_expr): check NODE_AND and NODE_OR recursively.
|
||||||
|
|
||||||
|
* parse.y (cond0): void value check added for conditionals.
|
||||||
|
|
||||||
Tue Jun 11 13:18:47 2002 Shugo Maeda <shugo@ruby-lang.org>
|
Tue Jun 11 13:18:47 2002 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
* lib/net/ftp.rb (noop): new method.
|
* lib/net/ftp.rb (noop): new method.
|
||||||
|
|
30
parse.y
30
parse.y
|
@ -898,10 +898,14 @@ arg : lhs '=' arg
|
||||||
}
|
}
|
||||||
| arg tDOT2 arg
|
| arg tDOT2 arg
|
||||||
{
|
{
|
||||||
|
value_expr($1);
|
||||||
|
value_expr($3);
|
||||||
$$ = NEW_DOT2($1, $3);
|
$$ = NEW_DOT2($1, $3);
|
||||||
}
|
}
|
||||||
| arg tDOT3 arg
|
| arg tDOT3 arg
|
||||||
{
|
{
|
||||||
|
value_expr($1);
|
||||||
|
value_expr($3);
|
||||||
$$ = NEW_DOT3($1, $3);
|
$$ = NEW_DOT3($1, $3);
|
||||||
}
|
}
|
||||||
| arg '+' arg
|
| arg '+' arg
|
||||||
|
@ -1003,7 +1007,6 @@ arg : lhs '=' arg
|
||||||
}
|
}
|
||||||
| '!' arg
|
| '!' arg
|
||||||
{
|
{
|
||||||
value_expr($2);
|
|
||||||
$$ = NEW_NOT(cond($2));
|
$$ = NEW_NOT(cond($2));
|
||||||
}
|
}
|
||||||
| '~' arg
|
| '~' arg
|
||||||
|
@ -1292,7 +1295,7 @@ primary : literal
|
||||||
}
|
}
|
||||||
| tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} ')'
|
| tLPAREN_ARG expr {lex_state = EXPR_ENDARG;} ')'
|
||||||
{
|
{
|
||||||
rb_warning("%s (...) interpreted as grouped expression", rb_id2name($<id>1));
|
rb_warning("(...) interpreted as grouped expression");
|
||||||
$$ = $2;
|
$$ = $2;
|
||||||
}
|
}
|
||||||
| tLPAREN compstmt ')'
|
| tLPAREN compstmt ')'
|
||||||
|
@ -1983,6 +1986,10 @@ singleton : var_ref
|
||||||
}
|
}
|
||||||
| '(' {lex_state = EXPR_BEG;} expr opt_nl ')'
|
| '(' {lex_state = EXPR_BEG;} expr opt_nl ')'
|
||||||
{
|
{
|
||||||
|
if ($3 == 0) {
|
||||||
|
yyerror("can't define single method for ().");
|
||||||
|
}
|
||||||
|
else {
|
||||||
switch (nd_type($3)) {
|
switch (nd_type($3)) {
|
||||||
case NODE_STR:
|
case NODE_STR:
|
||||||
case NODE_DSTR:
|
case NODE_DSTR:
|
||||||
|
@ -1992,11 +1999,12 @@ singleton : var_ref
|
||||||
case NODE_LIT:
|
case NODE_LIT:
|
||||||
case NODE_ARRAY:
|
case NODE_ARRAY:
|
||||||
case NODE_ZARRAY:
|
case NODE_ZARRAY:
|
||||||
yyerror("can't define single method for literals.");
|
yyerror("can't define single method for literals");
|
||||||
default:
|
default:
|
||||||
value_expr($3);
|
value_expr($3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
$$ = $3;
|
$$ = $3;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
@ -3980,6 +3988,8 @@ yylex()
|
||||||
if (COND_P()) return kDO_COND;
|
if (COND_P()) return kDO_COND;
|
||||||
if (CMDARG_P() && state != EXPR_CMDARG)
|
if (CMDARG_P() && state != EXPR_CMDARG)
|
||||||
return kDO_BLOCK;
|
return kDO_BLOCK;
|
||||||
|
if (state == EXPR_ENDARG)
|
||||||
|
return kDO_BLOCK;
|
||||||
return kDO;
|
return kDO;
|
||||||
}
|
}
|
||||||
if (state == EXPR_BEG)
|
if (state == EXPR_BEG)
|
||||||
|
@ -4380,6 +4390,9 @@ match_gen(node1, node2)
|
||||||
{
|
{
|
||||||
local_cnt('~');
|
local_cnt('~');
|
||||||
|
|
||||||
|
value_expr(node1);
|
||||||
|
value_expr(node2);
|
||||||
|
if (node1) {
|
||||||
switch (nd_type(node1)) {
|
switch (nd_type(node1)) {
|
||||||
case NODE_DREGX:
|
case NODE_DREGX:
|
||||||
case NODE_DREGX_ONCE:
|
case NODE_DREGX_ONCE:
|
||||||
|
@ -4390,7 +4403,9 @@ match_gen(node1, node2)
|
||||||
return NEW_MATCH2(node1, node2);
|
return NEW_MATCH2(node1, node2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node2) {
|
||||||
switch (nd_type(node2)) {
|
switch (nd_type(node2)) {
|
||||||
case NODE_DREGX:
|
case NODE_DREGX:
|
||||||
case NODE_DREGX_ONCE:
|
case NODE_DREGX_ONCE:
|
||||||
|
@ -4401,6 +4416,7 @@ match_gen(node1, node2)
|
||||||
return NEW_MATCH3(node2, node1);
|
return NEW_MATCH3(node2, node1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
|
return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
|
||||||
}
|
}
|
||||||
|
@ -4519,7 +4535,6 @@ aryset(recv, idx)
|
||||||
NODE *recv, *idx;
|
NODE *recv, *idx;
|
||||||
{
|
{
|
||||||
value_expr(recv);
|
value_expr(recv);
|
||||||
|
|
||||||
return NEW_CALL(recv, tASET, idx);
|
return NEW_CALL(recv, tASET, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4538,7 +4553,6 @@ attrset(recv, id)
|
||||||
ID id;
|
ID id;
|
||||||
{
|
{
|
||||||
value_expr(recv);
|
value_expr(recv);
|
||||||
|
|
||||||
return NEW_CALL(recv, rb_id_attrset(id), 0);
|
return NEW_CALL(recv, rb_id_attrset(id), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4647,6 +4661,10 @@ value_expr(node)
|
||||||
case NODE_IF:
|
case NODE_IF:
|
||||||
return value_expr(node->nd_body) && value_expr(node->nd_else);
|
return value_expr(node->nd_body) && value_expr(node->nd_else);
|
||||||
|
|
||||||
|
case NODE_AND:
|
||||||
|
case NODE_OR:
|
||||||
|
return value_expr(node->nd_2nd);
|
||||||
|
|
||||||
case NODE_NEWLINE:
|
case NODE_NEWLINE:
|
||||||
return value_expr(node->nd_next);
|
return value_expr(node->nd_next);
|
||||||
|
|
||||||
|
@ -4843,6 +4861,7 @@ range_op(node)
|
||||||
enum node_type type;
|
enum node_type type;
|
||||||
|
|
||||||
if (!e_option_supplied()) return node;
|
if (!e_option_supplied()) return node;
|
||||||
|
if (node == 0) return 0;
|
||||||
|
|
||||||
node = cond0(node);
|
node = cond0(node);
|
||||||
type = nd_type(node);
|
type = nd_type(node);
|
||||||
|
@ -4861,6 +4880,7 @@ cond0(node)
|
||||||
enum node_type type = nd_type(node);
|
enum node_type type = nd_type(node);
|
||||||
|
|
||||||
assign_in_cond(node);
|
assign_in_cond(node);
|
||||||
|
value_expr(node);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case NODE_DSTR:
|
case NODE_DSTR:
|
||||||
|
|
Loading…
Reference in a new issue