resolve conflict regarding backtick

This commit is contained in:
Yukihiro Matz Matsumoto
2013-03-23 11:08:18 +09:00
14 changed files with 131 additions and 109 deletions
+64 -50
View File
@@ -61,13 +61,27 @@ typedef unsigned int stack_type;
#define sym(x) ((mrb_sym)(intptr_t)(x))
#define nsym(x) ((node*)(intptr_t)(x))
static mrb_sym
static inline mrb_sym
intern_gen(parser_state *p, const char *s)
{
return mrb_intern(p->mrb, s);
}
#define intern(s) intern_gen(p,(s))
static inline mrb_sym
intern_gen2(parser_state *p, const char *s, size_t len)
{
return mrb_intern2(p->mrb, s, len);
}
#define intern2(s,len) intern_gen2(p,(s),(len))
static inline mrb_sym
intern_gen_c(parser_state *p, const char c)
{
return mrb_intern2(p->mrb, &c, 1);
}
#define intern_c(c) intern_gen_c(p,(c))
static void
cons_free_gen(parser_state *p, node *cons)
{
@@ -1228,7 +1242,7 @@ stmt : keyword_alias fsym {p->lstate = EXPR_FNAME;} fsym
}
| primary_value '[' opt_call_args rbracket tOP_ASGN command_call
{
$$ = new_op_asgn(p, new_call(p, $1, intern("[]"), $3), $5, $6);
$$ = new_op_asgn(p, new_call(p, $1, intern2("[]",2), $3), $5, $6);
}
| primary_value '.' tIDENTIFIER tOP_ASGN command_call
{
@@ -1467,7 +1481,7 @@ mlhs_node : variable
}
| primary_value '[' opt_call_args rbracket
{
$$ = new_call(p, $1, intern("[]"), $3);
$$ = new_call(p, $1, intern2("[]",2), $3);
}
| primary_value '.' tIDENTIFIER
{
@@ -1506,7 +1520,7 @@ lhs : variable
}
| primary_value '[' opt_call_args rbracket
{
$$ = new_call(p, $1, intern("[]"), $3);
$$ = new_call(p, $1, intern2("[]",2), $3);
}
| primary_value '.' tIDENTIFIER
{
@@ -1589,35 +1603,35 @@ undef_list : fsym
}
;
op : '|' { $$ = intern("|"); }
| '^' { $$ = intern("^"); }
| '&' { $$ = intern("&"); }
| tCMP { $$ = intern("<=>"); }
| tEQ { $$ = intern("=="); }
| tEQQ { $$ = intern("==="); }
| tMATCH { $$ = intern("=~"); }
| tNMATCH { $$ = intern("!~"); }
| '>' { $$ = intern(">"); }
| tGEQ { $$ = intern(">="); }
| '<' { $$ = intern("<"); }
| tLEQ { $$ = intern("<="); }
| tNEQ { $$ = intern("!="); }
| tLSHFT { $$ = intern("<<"); }
| tRSHFT { $$ = intern(">>"); }
| '+' { $$ = intern("+"); }
| '-' { $$ = intern("-"); }
| '*' { $$ = intern("*"); }
| tSTAR { $$ = intern("*"); }
| '/' { $$ = intern("/"); }
| '%' { $$ = intern("%"); }
| tPOW { $$ = intern("**"); }
| '!' { $$ = intern("!"); }
| '~' { $$ = intern("~"); }
| tUPLUS { $$ = intern("+@"); }
| tUMINUS { $$ = intern("-@"); }
| tAREF { $$ = intern("[]"); }
| tASET { $$ = intern("[]="); }
| '`' { $$ = intern("`"); }
op : '|' { $$ = intern_c('|'); }
| '^' { $$ = intern_c('^'); }
| '&' { $$ = intern_c('&'); }
| tCMP { $$ = intern2("<=>",3); }
| tEQ { $$ = intern2("==",2); }
| tEQQ { $$ = intern2("===",3); }
| tMATCH { $$ = intern2("=~",2); }
| tNMATCH { $$ = intern2("!~",2); }
| '>' { $$ = intern_c('>'); }
| tGEQ { $$ = intern2(">=",2); }
| '<' { $$ = intern_c('<'); }
| tLEQ { $$ = intern2("<=",2); }
| tNEQ { $$ = intern2("!=",2); }
| tLSHFT { $$ = intern2("<<",2); }
| tRSHFT { $$ = intern2(">>",2); }
| '+' { $$ = intern_c('+'); }
| '-' { $$ = intern_c('-'); }
| '*' { $$ = intern_c('*'); }
| tSTAR { $$ = intern_c('*'); }
| '/' { $$ = intern_c('/'); }
| '%' { $$ = intern_c('%'); }
| tPOW { $$ = intern2("**",2); }
| '!' { $$ = intern_c('!'); }
| '~' { $$ = intern_c('~'); }
| tUPLUS { $$ = intern2("+@",2); }
| tUMINUS { $$ = intern2("-@",2); }
| tAREF { $$ = intern2("[]",2); }
| tASET { $$ = intern2("[]=",3); }
| '`' { $$ = intern_c('`'); }
;
reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
@@ -1652,7 +1666,7 @@ arg : lhs '=' arg
}
| primary_value '[' opt_call_args rbracket tOP_ASGN arg
{
$$ = new_op_asgn(p, new_call(p, $1, intern("[]"), $3), $5, $6);
$$ = new_op_asgn(p, new_call(p, $1, intern2("[]",2), $3), $5, $6);
}
| primary_value '.' tIDENTIFIER tOP_ASGN arg
{
@@ -2461,11 +2475,11 @@ method_call : operation paren_args
}
| primary_value '.' paren_args
{
$$ = new_call(p, $1, intern("call"), $3);
$$ = new_call(p, $1, intern2("call",4), $3);
}
| primary_value tCOLON2 paren_args
{
$$ = new_call(p, $1, intern("call"), $3);
$$ = new_call(p, $1, intern2("call",4), $3);
}
| keyword_super paren_args
{
@@ -2477,7 +2491,7 @@ method_call : operation paren_args
}
| primary_value '[' opt_call_args rbracket
{
$$ = new_call(p, $1, intern("[]"), $3);
$$ = new_call(p, $1, intern2("[]",2), $3);
}
;
@@ -3873,7 +3887,7 @@ parser_yylex(parser_state *p)
case '*':
if ((c = nextc(p)) == '*') {
if ((c = nextc(p)) == '=') {
yylval.id = intern("**");
yylval.id = intern2("**",2);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -3882,7 +3896,7 @@ parser_yylex(parser_state *p)
}
else {
if (c == '=') {
yylval.id = intern("*");
yylval.id = intern_c('*');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -3982,7 +3996,7 @@ parser_yylex(parser_state *p)
}
if (c == '<') {
if ((c = nextc(p)) == '=') {
yylval.id = intern("<<");
yylval.id = intern2("<<",2);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4003,7 +4017,7 @@ parser_yylex(parser_state *p)
}
if (c == '>') {
if ((c = nextc(p)) == '=') {
yylval.id = intern(">>");
yylval.id = intern2(">>",2);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4117,7 +4131,7 @@ parser_yylex(parser_state *p)
if ((c = nextc(p)) == '&') {
p->lstate = EXPR_BEG;
if ((c = nextc(p)) == '=') {
yylval.id = intern("&&");
yylval.id = intern2("&&",2);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4125,7 +4139,7 @@ parser_yylex(parser_state *p)
return tANDOP;
}
else if (c == '=') {
yylval.id = intern("&");
yylval.id = intern_c('&');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4151,7 +4165,7 @@ parser_yylex(parser_state *p)
if ((c = nextc(p)) == '|') {
p->lstate = EXPR_BEG;
if ((c = nextc(p)) == '=') {
yylval.id = intern("||");
yylval.id = intern2("||",2);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4159,7 +4173,7 @@ parser_yylex(parser_state *p)
return tOROP;
}
if (c == '=') {
yylval.id = intern("|");
yylval.id = intern_c('|');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4183,7 +4197,7 @@ parser_yylex(parser_state *p)
return '+';
}
if (c == '=') {
yylval.id = intern("+");
yylval.id = intern_c('+');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4211,7 +4225,7 @@ parser_yylex(parser_state *p)
return '-';
}
if (c == '=') {
yylval.id = intern("-");
yylval.id = intern_c('-');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4511,7 +4525,7 @@ parser_yylex(parser_state *p)
return tREGEXP_BEG;
}
if ((c = nextc(p)) == '=') {
yylval.id = intern("/");
yylval.id = intern_c('/');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4529,7 +4543,7 @@ parser_yylex(parser_state *p)
case '^':
if ((c = nextc(p)) == '=') {
yylval.id = intern("^");
yylval.id = intern_c('^');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -4702,7 +4716,7 @@ parser_yylex(parser_state *p)
}
}
if ((c = nextc(p)) == '=') {
yylval.id = intern("%");
yylval.id = intern_c('%');
p->lstate = EXPR_BEG;
return tOP_ASGN;
}