JD2022-TU1/main/extern/dtest/dtcore/inc/dtscriptparserstate.h

39 lines
No EOL
1.4 KiB
C++

#pragma once
#include "dtcore/inc/dtscriptdescriptor.h"
#include "dtcore/inc/dtscriptstatementcompound.h"
namespace dt
{
class ScriptParserState
{
public:
ScriptParserState(const ScriptDescriptor& script, ScriptStatementCompound* root);
ScriptStatementCompound* GetRoot() const { return m_Root; }
void PushBlock(ScriptStatementCompound* stm) { m_CompoundStack.PushBack(stm); }
bool PopBlock();
ScriptStatementCompound* GetParentStatement() const { return m_CompoundStack.Back(); }
SizeT GetCompoundStackSize() const { return m_CompoundStack.Size(); }
void PushBack(ScriptStatement* stm);
void PushAsRoot(ScriptStatementCompound* stm);
ScriptStatement* GetLast() const { return m_Last; }
void SetCurrentLineById(int id);
const ScriptLines& GetLines() const { return m_Script.GetLines(); }
const ScriptLine& GetCurrentLine() const { return m_Script.GetLines()[m_LineIndex]; }
bool HasNextLine() const { return m_LineIndex < m_Script.GetLines().Size() - 1; }
const ScriptLine& GetNextLine() { return m_Script.GetLines()[++m_LineIndex]; }
private:
ScriptDescriptor m_Script;
SizeT m_LineIndex;
ScriptStatementCompound* m_Root;
Vector<ScriptStatementCompound*> m_CompoundStack;
ScriptStatement* m_Last;
};
}