Allow chaining off method calls. (bug 6178)
This commit is contained in:
parent
9e1fef9775
commit
1a83ca57fc
@ -2250,12 +2250,17 @@ restart:
|
||||
error(4,symname); /* function not defined */
|
||||
} /* if */
|
||||
callfunction(sym,implicitthis,lval1,TRUE);
|
||||
if (lexpeek('.')) {
|
||||
lvalue = FALSE;
|
||||
goto restart;
|
||||
}
|
||||
return FALSE; /* result of function call is no lvalue */
|
||||
} /* if */
|
||||
} /* if */
|
||||
if (sym!=NULL && lval1->ident==iFUNCTN) {
|
||||
assert(sym->ident==iFUNCTN);
|
||||
if (sc_allowproccall) {
|
||||
// Note: this is unreachable in SourceMod, we don't support paren-less calls.
|
||||
callfunction(sym,NULL,lval1,FALSE);
|
||||
} else if ((sym->usage & uNATIVE) != uNATIVE) {
|
||||
symbol *oldsym=sym;
|
||||
|
38
sourcepawn/compiler/tests/ok-chaining.sp
Normal file
38
sourcepawn/compiler/tests/ok-chaining.sp
Normal file
@ -0,0 +1,38 @@
|
||||
methodmap Duck
|
||||
{
|
||||
property bool MyProp
|
||||
{
|
||||
public get() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public bool OnPluginStart()
|
||||
{
|
||||
Duck duck = GiveMeADuck();
|
||||
|
||||
// no compile errors or warnings
|
||||
if (duck.MyProp)
|
||||
{
|
||||
}
|
||||
|
||||
// error 001: expected token: ")", but found "."
|
||||
// error 029: invalid expression, assumed zero
|
||||
// error 017: undefined symbol "MyProp"
|
||||
if (GiveMeADuck().MyProp)
|
||||
{
|
||||
}
|
||||
|
||||
// warning 213: tag mismatch
|
||||
// error 001: expected token: ";", but found "."
|
||||
// error 029: invalid expression, assumed zero
|
||||
// error 017: undefined symbol "MyProp"
|
||||
bool prop = GiveMeADuck().MyProp;
|
||||
return prop
|
||||
}
|
||||
|
||||
stock Duck GiveMeADuck()
|
||||
{
|
||||
return Duck:1;
|
||||
}
|
Loading…
Reference in New Issue
Block a user