mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* parse.y: Support for { key: value } -style hash immediates.
[ruby-core:21946][ruby-core:22286] * keywords: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@24338 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
56057f9f8f
commit
f82dc0ffed
3 changed files with 44 additions and 16 deletions
|
@ -1,3 +1,9 @@
|
|||
Fri Jul 31 17:17:17 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
|
||||
|
||||
* parse.y: Support for { key: value } -style hash immediates.
|
||||
[ruby-core:21946][ruby-core:22286]
|
||||
* keywords: ditto.
|
||||
|
||||
Tue Jul 28 15:48:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_event_all, rb_add_event_hook): merged thread-switch
|
||||
|
|
24
keywords
24
keywords
|
@ -5,27 +5,27 @@ __FILE__, {k__FILE__, k__FILE__}, EXPR_END
|
|||
BEGIN, {klBEGIN, klBEGIN}, EXPR_END
|
||||
END, {klEND, klEND}, EXPR_END
|
||||
alias, {kALIAS, kALIAS}, EXPR_FNAME
|
||||
and, {kAND, kAND}, EXPR_BEG
|
||||
and, {kAND, kAND}, EXPR_VALUE
|
||||
begin, {kBEGIN, kBEGIN}, EXPR_BEG
|
||||
break, {kBREAK, kBREAK}, EXPR_MID
|
||||
case, {kCASE, kCASE}, EXPR_BEG
|
||||
case, {kCASE, kCASE}, EXPR_VALUE
|
||||
class, {kCLASS, kCLASS}, EXPR_CLASS
|
||||
def, {kDEF, kDEF}, EXPR_FNAME
|
||||
defined?, {kDEFINED, kDEFINED}, EXPR_ARG
|
||||
do, {kDO, kDO}, EXPR_BEG
|
||||
else, {kELSE, kELSE}, EXPR_BEG
|
||||
elsif, {kELSIF, kELSIF}, EXPR_BEG
|
||||
elsif, {kELSIF, kELSIF}, EXPR_VALUE
|
||||
end, {kEND, kEND}, EXPR_END
|
||||
ensure, {kENSURE, kENSURE}, EXPR_BEG
|
||||
false, {kFALSE, kFALSE}, EXPR_END
|
||||
for, {kFOR, kFOR}, EXPR_BEG
|
||||
if, {kIF, kIF_MOD}, EXPR_BEG
|
||||
in, {kIN, kIN}, EXPR_BEG
|
||||
module, {kMODULE, kMODULE}, EXPR_BEG
|
||||
for, {kFOR, kFOR}, EXPR_VALUE
|
||||
if, {kIF, kIF_MOD}, EXPR_VALUE
|
||||
in, {kIN, kIN}, EXPR_VALUE
|
||||
module, {kMODULE, kMODULE}, EXPR_VALUE
|
||||
next, {kNEXT, kNEXT}, EXPR_MID
|
||||
nil, {kNIL, kNIL}, EXPR_END
|
||||
not, {kNOT, kNOT}, EXPR_BEG
|
||||
or, {kOR, kOR}, EXPR_BEG
|
||||
or, {kOR, kOR}, EXPR_VALUE
|
||||
redo, {kREDO, kREDO}, EXPR_END
|
||||
rescue, {kRESCUE, kRESCUE_MOD}, EXPR_MID
|
||||
retry, {kRETRY, kRETRY}, EXPR_END
|
||||
|
@ -35,8 +35,8 @@ super, {kSUPER, kSUPER}, EXPR_ARG
|
|||
then, {kTHEN, kTHEN}, EXPR_BEG
|
||||
true, {kTRUE, kTRUE}, EXPR_END
|
||||
undef, {kUNDEF, kUNDEF}, EXPR_FNAME
|
||||
unless, {kUNLESS, kUNLESS_MOD}, EXPR_BEG
|
||||
until, {kUNTIL, kUNTIL_MOD}, EXPR_BEG
|
||||
when, {kWHEN, kWHEN}, EXPR_BEG
|
||||
while, {kWHILE, kWHILE_MOD}, EXPR_BEG
|
||||
unless, {kUNLESS, kUNLESS_MOD}, EXPR_VALUE
|
||||
until, {kUNTIL, kUNTIL_MOD}, EXPR_VALUE
|
||||
when, {kWHEN, kWHEN}, EXPR_VALUE
|
||||
while, {kWHILE, kWHILE_MOD}, EXPR_VALUE
|
||||
yield, {kYIELD, kYIELD}, EXPR_ARG
|
||||
|
|
30
parse.y
30
parse.y
|
@ -91,6 +91,7 @@ static enum lex_state {
|
|||
EXPR_FNAME, /* ignore newline, no reserved words. */
|
||||
EXPR_DOT, /* right after `.' or `::', no reserved words. */
|
||||
EXPR_CLASS, /* immediate after `class', no here document. */
|
||||
EXPR_VALUE /* alike EXPR_BEG but label is disallowed. */
|
||||
} lex_state;
|
||||
static NODE *lex_strterm;
|
||||
|
||||
|
@ -267,7 +268,7 @@ static void fixup_nodes();
|
|||
k__LINE__
|
||||
k__FILE__
|
||||
|
||||
%token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR
|
||||
%token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL
|
||||
%token <node> tINTEGER tFLOAT tSTRING_CONTENT
|
||||
%token <node> tNTH_REF tBACK_REF
|
||||
%token <num> tREGEXP_END
|
||||
|
@ -2504,6 +2505,14 @@ assoc : arg_value tASSOC arg_value
|
|||
{
|
||||
$$ = list_append(NEW_LIST($1), $3);
|
||||
}
|
||||
| tLABEL arg_value
|
||||
{
|
||||
/*%%%*/
|
||||
$$ = list_append(NEW_LIST(NEW_LIT(ID2SYM($1))), $2);
|
||||
/*%
|
||||
$$ = dispatch2(assoc_new, $1, $2);
|
||||
%*/
|
||||
}
|
||||
;
|
||||
|
||||
operation : tIDENTIFIER
|
||||
|
@ -3434,7 +3443,8 @@ arg_ambiguous()
|
|||
}
|
||||
|
||||
#define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
|
||||
#define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_CLASS)
|
||||
#define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || \
|
||||
lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
|
||||
|
||||
static int
|
||||
yylex()
|
||||
|
@ -3491,6 +3501,7 @@ yylex()
|
|||
case EXPR_FNAME:
|
||||
case EXPR_DOT:
|
||||
case EXPR_CLASS:
|
||||
case EXPR_VALUE:
|
||||
goto retry;
|
||||
default:
|
||||
break;
|
||||
|
@ -3673,7 +3684,7 @@ yylex()
|
|||
|
||||
case '?':
|
||||
if (lex_state == EXPR_END || lex_state == EXPR_ENDARG) {
|
||||
lex_state = EXPR_BEG;
|
||||
lex_state = EXPR_VALUE;
|
||||
return '?';
|
||||
}
|
||||
c = nextc();
|
||||
|
@ -4526,6 +4537,16 @@ yylex()
|
|||
}
|
||||
}
|
||||
|
||||
if ((lex_state == EXPR_BEG && !cmd_state) ||
|
||||
lex_state == EXPR_ARG ||
|
||||
lex_state == EXPR_CMDARG) {
|
||||
if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
|
||||
lex_state = EXPR_BEG;
|
||||
nextc();
|
||||
yylval.id = rb_intern(tok());
|
||||
return tLABEL;
|
||||
}
|
||||
}
|
||||
if (lex_state != EXPR_DOT) {
|
||||
const struct kwtable *kw;
|
||||
|
||||
|
@ -4547,7 +4568,7 @@ yylex()
|
|||
return kDO_BLOCK;
|
||||
return kDO;
|
||||
}
|
||||
if (state == EXPR_BEG)
|
||||
if (state == EXPR_BEG || state == EXPR_VALUE)
|
||||
return kw->id[0];
|
||||
else {
|
||||
if (kw->id[0] != kw->id[1])
|
||||
|
@ -4562,6 +4583,7 @@ yylex()
|
|||
lex_state == EXPR_DOT ||
|
||||
lex_state == EXPR_ARG ||
|
||||
lex_state == EXPR_CLASS ||
|
||||
lex_state == EXPR_VALUE ||
|
||||
lex_state == EXPR_CMDARG) {
|
||||
if (cmd_state) {
|
||||
lex_state = EXPR_CMDARG;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue