mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-12 07:34:50 +00:00
Allow empty parameter lists for action functions without parameters
- Using A_Scream() in a state instead of A_Scream is now valid.
This commit is contained in:
parent
8c105ff3a0
commit
320fb9aec5
1 changed files with 55 additions and 56 deletions
|
@ -391,6 +391,8 @@ void ParseFunctionParameters(FScanner &sc, PClassActor *cls, TArray<FxExpression
|
|||
const TArray<DWORD> ¶mflags = afd->Variants[0].ArgFlags;
|
||||
int numparams = (int)params.Size();
|
||||
int pnum = 0;
|
||||
bool zeroparm;
|
||||
|
||||
if (afd->Flags & VARF_Method)
|
||||
{
|
||||
numparams--;
|
||||
|
@ -401,83 +403,80 @@ void ParseFunctionParameters(FScanner &sc, PClassActor *cls, TArray<FxExpression
|
|||
numparams -= 2;
|
||||
pnum += 2;
|
||||
}
|
||||
if (numparams > 0)
|
||||
assert(numparams >= 0);
|
||||
zeroparm = numparams == 0;
|
||||
if (numparams > 0 && !(paramflags[pnum] & VARF_Optional))
|
||||
{
|
||||
int v;
|
||||
|
||||
if (!(paramflags[pnum] & VARF_Optional))
|
||||
{
|
||||
sc.MustGetStringName("(");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!sc.CheckString("("))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while (numparams > 0)
|
||||
{
|
||||
FxExpression *x;
|
||||
if (statedef != NULL && params[pnum] == TypeState && sc.CheckNumber())
|
||||
{
|
||||
// Special case: State label as an offset
|
||||
if (sc.Number > 0 && statestring.Len() > 1)
|
||||
{
|
||||
sc.ScriptError("You cannot use state jumps commands with a jump offset on multistate definitions\n");
|
||||
}
|
||||
|
||||
v = sc.Number;
|
||||
if (v<0)
|
||||
{
|
||||
sc.ScriptError("Negative jump offsets are not allowed");
|
||||
}
|
||||
|
||||
if (v > 0)
|
||||
{
|
||||
x = new FxStateByIndex(statedef->GetStateCount() + v, sc);
|
||||
}
|
||||
else
|
||||
{
|
||||
x = new FxConstant((FState*)NULL, sc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use the generic parameter parser for everything else
|
||||
x = ParseParameter(sc, cls, params[pnum], false);
|
||||
}
|
||||
out_params.Push(new FxParameter(x));
|
||||
pnum++;
|
||||
numparams--;
|
||||
if (numparams > 0)
|
||||
{
|
||||
if (params[pnum] == NULL)
|
||||
{ // varargs function
|
||||
if (sc.CheckString(")"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
pnum--;
|
||||
numparams++;
|
||||
}
|
||||
else if ((paramflags[pnum] & VARF_Optional) && sc.CheckString(")"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
sc.MustGetStringName (",");
|
||||
}
|
||||
}
|
||||
sc.MustGetStringName(")");
|
||||
sc.MustGetStringName("(");
|
||||
}
|
||||
else
|
||||
{
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("("))
|
||||
if (!sc.CheckString("("))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
while (numparams > 0)
|
||||
{
|
||||
FxExpression *x;
|
||||
if (statedef != NULL && params[pnum] == TypeState && sc.CheckNumber())
|
||||
{
|
||||
// Special case: State label as an offset
|
||||
if (sc.Number > 0 && statestring.Len() > 1)
|
||||
{
|
||||
sc.ScriptError("You cannot use state jumps commands with a jump offset on multistate definitions\n");
|
||||
}
|
||||
|
||||
int v = sc.Number;
|
||||
if (v < 0)
|
||||
{
|
||||
sc.ScriptError("Negative jump offsets are not allowed");
|
||||
}
|
||||
|
||||
if (v > 0)
|
||||
{
|
||||
x = new FxStateByIndex(statedef->GetStateCount() + v, sc);
|
||||
}
|
||||
else
|
||||
{
|
||||
x = new FxConstant((FState*)NULL, sc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use the generic parameter parser for everything else
|
||||
x = ParseParameter(sc, cls, params[pnum], false);
|
||||
}
|
||||
out_params.Push(new FxParameter(x));
|
||||
pnum++;
|
||||
numparams--;
|
||||
if (numparams > 0)
|
||||
{
|
||||
if (params[pnum] == NULL)
|
||||
{ // varargs function
|
||||
if (sc.CheckString(")"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
pnum--;
|
||||
numparams++;
|
||||
}
|
||||
else if ((paramflags[pnum] & VARF_Optional) && sc.CheckString(")"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
sc.MustGetStringName (",");
|
||||
}
|
||||
}
|
||||
if (zeroparm)
|
||||
{
|
||||
if (!sc.CheckString(")"))
|
||||
{
|
||||
sc.ScriptError("You cannot pass parameters to '%s'\n", afd->SymbolName.GetChars());
|
||||
}
|
||||
sc.UnGet();
|
||||
}
|
||||
else
|
||||
{
|
||||
sc.MustGetStringName(")");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue