mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 15:21:51 +00:00
- Renamed FxSequence to FxCompoundStatement.
- fixed: The state parser was unable to accept empty anonymous functions, which should be treated as if there is none at all.
This commit is contained in:
parent
458c68775f
commit
8a6230d64a
5 changed files with 17 additions and 13 deletions
|
@ -5016,11 +5016,11 @@ ExpEmit FxFlopFunctionCall::Emit(VMFunctionBuilder *build)
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FxSequence :: Resolve
|
// FxCompoundStatement :: Resolve
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
FxExpression *FxSequence::Resolve(FCompileContext &ctx)
|
FxExpression *FxCompoundStatement::Resolve(FCompileContext &ctx)
|
||||||
{
|
{
|
||||||
CHECKRESOLVED();
|
CHECKRESOLVED();
|
||||||
for (unsigned i = 0; i < Expressions.Size(); ++i)
|
for (unsigned i = 0; i < Expressions.Size(); ++i)
|
||||||
|
@ -5036,11 +5036,11 @@ FxExpression *FxSequence::Resolve(FCompileContext &ctx)
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FxSequence :: Emit
|
// FxCompoundStatement :: Emit
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
ExpEmit FxSequence::Emit(VMFunctionBuilder *build)
|
ExpEmit FxCompoundStatement::Emit(VMFunctionBuilder *build)
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; i < Expressions.Size(); ++i)
|
for (unsigned i = 0; i < Expressions.Size(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -5053,11 +5053,11 @@ ExpEmit FxSequence::Emit(VMFunctionBuilder *build)
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FxSequence :: GetDirectFunction
|
// FxCompoundStatement :: GetDirectFunction
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
VMFunction *FxSequence::GetDirectFunction()
|
VMFunction *FxCompoundStatement::GetDirectFunction()
|
||||||
{
|
{
|
||||||
if (Expressions.Size() == 1)
|
if (Expressions.Size() == 1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1079,16 +1079,16 @@ public:
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FxSequence
|
// FxCompoundStatement
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
class FxSequence : public FxExpression
|
class FxCompoundStatement : public FxExpression
|
||||||
{
|
{
|
||||||
TDeletingArray<FxExpression *> Expressions;
|
TDeletingArray<FxExpression *> Expressions;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FxSequence(const FScriptPosition &pos) : FxExpression(pos) {}
|
FxCompoundStatement(const FScriptPosition &pos) : FxExpression(pos) {}
|
||||||
FxExpression *Resolve(FCompileContext&);
|
FxExpression *Resolve(FCompileContext&);
|
||||||
ExpEmit Emit(VMFunctionBuilder *build);
|
ExpEmit Emit(VMFunctionBuilder *build);
|
||||||
void Add(FxExpression *expr) { if (expr != NULL) Expressions.Push(expr); }
|
void Add(FxExpression *expr) { if (expr != NULL) Expressions.Push(expr); }
|
||||||
|
|
|
@ -314,7 +314,7 @@ do_stop:
|
||||||
ScriptCode = ParseActions(sc, state, statestring, bag, hasfinalret);
|
ScriptCode = ParseActions(sc, state, statestring, bag, hasfinalret);
|
||||||
if (!hasfinalret && ScriptCode != nullptr)
|
if (!hasfinalret && ScriptCode != nullptr)
|
||||||
{
|
{
|
||||||
static_cast<FxSequence *>(ScriptCode)->Add(new FxReturnStatement(nullptr, sc));
|
static_cast<FxCompoundStatement *>(ScriptCode)->Add(new FxReturnStatement(nullptr, sc));
|
||||||
}
|
}
|
||||||
goto endofstate;
|
goto endofstate;
|
||||||
}
|
}
|
||||||
|
@ -474,7 +474,7 @@ FxExpression *ParseActions(FScanner &sc, FState state, FString statestring, Bagg
|
||||||
|
|
||||||
const FScriptPosition pos(sc);
|
const FScriptPosition pos(sc);
|
||||||
|
|
||||||
FxSequence *seq = NULL;
|
FxCompoundStatement *seq = NULL;
|
||||||
bool lastwasret = false;
|
bool lastwasret = false;
|
||||||
|
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
|
@ -536,7 +536,7 @@ FxExpression *ParseActions(FScanner &sc, FState state, FString statestring, Bagg
|
||||||
{
|
{
|
||||||
if (seq == NULL)
|
if (seq == NULL)
|
||||||
{
|
{
|
||||||
seq = new FxSequence(pos);
|
seq = new FxCompoundStatement(pos);
|
||||||
}
|
}
|
||||||
seq->Add(add);
|
seq->Add(add);
|
||||||
}
|
}
|
||||||
|
|
|
@ -528,6 +528,10 @@ state_action(X) ::= LBRACE(T) statement_list(A) scanner_mode RBRACE.
|
||||||
stmt->Content = A;
|
stmt->Content = A;
|
||||||
X = stmt;
|
X = stmt;
|
||||||
}
|
}
|
||||||
|
state_action(X) ::= LBRACE scanner_mode RBRACE.
|
||||||
|
{
|
||||||
|
X = NULL;
|
||||||
|
}
|
||||||
state_action(X) ::= LBRACE error scanner_mode RBRACE. { X = NULL; }
|
state_action(X) ::= LBRACE error scanner_mode RBRACE. { X = NULL; }
|
||||||
state_action(X) ::= state_call(A) scanner_mode SEMICOLON. { X = A; /*X-overwrites-A*/ }
|
state_action(X) ::= state_call(A) scanner_mode SEMICOLON. { X = A; /*X-overwrites-A*/ }
|
||||||
|
|
||||||
|
|
|
@ -2087,7 +2087,7 @@ FxExpression *ZCCCompiler::SetupActionFunction(PClassActor *cls, ZCC_TreeNode *a
|
||||||
tcall->Code = ParseActions(sc, state, statestring, bag, hasfinalret);
|
tcall->Code = ParseActions(sc, state, statestring, bag, hasfinalret);
|
||||||
if (!hasfinalret && tcall->Code != nullptr)
|
if (!hasfinalret && tcall->Code != nullptr)
|
||||||
{
|
{
|
||||||
static_cast<FxSequence *>(tcall->Code)->Add(new FxReturnStatement(nullptr, sc));
|
static_cast<FxCompoundStatement *>(tcall->Code)->Add(new FxReturnStatement(nullptr, sc));
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue