Add support for calling a class function method using this/super
Also standardize the parser code that uses this/super.
This commit is contained in:
parent
480668fee6
commit
d16a9dcfc6
36
parse.y
36
parse.y
|
|
@ -3220,7 +3220,7 @@ expr_primary
|
||||||
|
|
||||||
/* An identifier followed by an expression list in parentheses is a
|
/* An identifier followed by an expression list in parentheses is a
|
||||||
function call. If a system identifier, then a system function
|
function call. If a system identifier, then a system function
|
||||||
call. */
|
call. It can also be a call to a class method (functino). */
|
||||||
|
|
||||||
| hierarchy_identifier '(' expression_list_with_nuls ')'
|
| hierarchy_identifier '(' expression_list_with_nuls ')'
|
||||||
{ list<PExpr*>*expr_list = $3;
|
{ list<PExpr*>*expr_list = $3;
|
||||||
|
|
@ -3229,6 +3229,19 @@ expr_primary
|
||||||
delete $1;
|
delete $1;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
|
| implicit_class_handle '.' hierarchy_identifier '(' expression_list_with_nuls ')'
|
||||||
|
{ pform_name_t*t_name = $1;
|
||||||
|
while (! $3->empty()) {
|
||||||
|
t_name->push_back($3->front());
|
||||||
|
$3->pop_front();
|
||||||
|
}
|
||||||
|
list<PExpr*>*expr_list = $5;
|
||||||
|
strip_tail_items(expr_list);
|
||||||
|
PECallFunction*tmp = pform_make_call_function(@1, *t_name, *expr_list);
|
||||||
|
delete $1;
|
||||||
|
delete $3;
|
||||||
|
$$ = tmp;
|
||||||
|
}
|
||||||
| SYSTEM_IDENTIFIER '(' expression_list_proper ')'
|
| SYSTEM_IDENTIFIER '(' expression_list_proper ')'
|
||||||
{ perm_string tn = lex_strings.make($1);
|
{ perm_string tn = lex_strings.make($1);
|
||||||
PECallFunction*tmp = new PECallFunction(tn, *$3);
|
PECallFunction*tmp = new PECallFunction(tn, *$3);
|
||||||
|
|
@ -3263,12 +3276,12 @@ expr_primary
|
||||||
}
|
}
|
||||||
|
|
||||||
| implicit_class_handle '.' hierarchy_identifier
|
| implicit_class_handle '.' hierarchy_identifier
|
||||||
{ pform_name_t*nam = $1;
|
{ pform_name_t*t_name = $1;
|
||||||
while (! $3->empty()) {
|
while (! $3->empty()) {
|
||||||
nam->push_back($3->front());
|
t_name->push_back($3->front());
|
||||||
$3->pop_front();
|
$3->pop_front();
|
||||||
}
|
}
|
||||||
PEIdent*tmp = new PEIdent(*nam);
|
PEIdent*tmp = new PEIdent(*t_name);
|
||||||
FILE_NAME(tmp,@1);
|
FILE_NAME(tmp,@1);
|
||||||
delete $1;
|
delete $1;
|
||||||
delete $3;
|
delete $3;
|
||||||
|
|
@ -4075,15 +4088,15 @@ lpvalue
|
||||||
}
|
}
|
||||||
|
|
||||||
| implicit_class_handle '.' hierarchy_identifier
|
| implicit_class_handle '.' hierarchy_identifier
|
||||||
{ pform_name_t*tmp1 = $1;
|
{ pform_name_t*t_name = $1;
|
||||||
while (!$3->empty()) {
|
while (!$3->empty()) {
|
||||||
tmp1->push_back($3->front());
|
t_name->push_back($3->front());
|
||||||
$3->pop_front();
|
$3->pop_front();
|
||||||
}
|
}
|
||||||
PEIdent*tmp = new PEIdent(*tmp1);
|
PEIdent*tmp = new PEIdent(*t_name);
|
||||||
FILE_NAME(tmp, @1);
|
FILE_NAME(tmp, @1);
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
delete tmp1;
|
delete $1;
|
||||||
delete $3;
|
delete $3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6054,12 +6067,12 @@ statement_item /* This is roughly statement_item in the LRM */
|
||||||
}
|
}
|
||||||
|
|
||||||
| implicit_class_handle '.' hierarchy_identifier '(' expression_list_with_nuls ')' ';'
|
| implicit_class_handle '.' hierarchy_identifier '(' expression_list_with_nuls ')' ';'
|
||||||
{ pform_name_t*nam = $1;
|
{ pform_name_t*t_name = $1;
|
||||||
while (! $3->empty()) {
|
while (! $3->empty()) {
|
||||||
nam->push_back($3->front());
|
t_name->push_back($3->front());
|
||||||
$3->pop_front();
|
$3->pop_front();
|
||||||
}
|
}
|
||||||
PCallTask*tmp = new PCallTask(*nam, *$5);
|
PCallTask*tmp = new PCallTask(*t_name, *$5);
|
||||||
FILE_NAME(tmp, @1);
|
FILE_NAME(tmp, @1);
|
||||||
delete $1;
|
delete $1;
|
||||||
delete $3;
|
delete $3;
|
||||||
|
|
@ -6084,6 +6097,7 @@ statement_item /* This is roughly statement_item in the LRM */
|
||||||
| implicit_class_handle '.' K_new '(' expression_list_with_nuls ')' ';'
|
| implicit_class_handle '.' K_new '(' expression_list_with_nuls ')' ';'
|
||||||
{ PChainConstructor*tmp = new PChainConstructor(*$5);
|
{ PChainConstructor*tmp = new PChainConstructor(*$5);
|
||||||
FILE_NAME(tmp, @3);
|
FILE_NAME(tmp, @3);
|
||||||
|
delete $1;
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
| hierarchy_identifier '(' error ')' ';'
|
| hierarchy_identifier '(' error ')' ';'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue