37 return _emitterChange;
192 [[nodiscard]]
const IdInfo*
getInfo(
const std::string& name)
const override;
237 std::string _script{};
269 return _instructions;
376 std::ostream* _outputStream{
nullptr};
382 void getExternalSource(std::string& source);
387 ip_type addInstruction(Instruction::EInstr instr, ip_type ip, pos_type pos,
const std::string& script = std::string());
392 void setJumpInstruction(ip_type ip, ip_type jmp_ip = -1);
397 void setBreakInstruction(ip_type start_ip, ip_type jmp_ip);
402 void setContinueInstruction(ip_type start_ip, ip_type jmp_ip);
412 void setPosition(pos_type pos);
417 bool getIdName(std::string& name);
429 bool compileKeyword(
const IdInfo* Info, pos_type pos);
446 bool isKeyWord(EKeyWord keyword);
453 const char* getKeyWordText(EKeyWord keyword);
461 bool getScript(std::string& script,
char ending);
466 void getVarScript(std::string& script);
471 std::string getProfilePath();
477 const EState _currentState{esEmpty};
481 EState _prevState{esEmpty};
485 Value _accumulator{};
489 const char* _command;
493 pos_type _codePos{0};
497 pos_type _codeLine{0};
501 bool _flagSentry{
false};
505 bool _flagStepMode{
false};
509 TVector<Instruction> _instructions{};
513 ip_type _currentInstructionPtr{-1};
517 ip_type _errorInstructionPtr{-1};
521 ip_type _mainFunction{-1};
528 explicit StackEntry(ip_type ip)
542 TVector<StackEntry> _stack;
546 TVector<VariableInfo*> _variables;
550 TVector<LabelInfo*> _labels;
554 ElapseTimer _sleepTimer;
558 std::string _scriptName;
562 Value::int_type _trace{0};
566 static IdInfo _info[];
570 static const char* _instructionNames[];
574 static const char* _stateNames[];
578 static const char* _exitCodeNames[];
583 ChangeListener::emitter_type _emitterChange;
Timer for turning true when a certain amount of time has passed.
Definition ElapseTimer.h:12
Simple script engine able.
Definition ScriptEngine.h:13
Script interpreter for running a loaded script.
Definition ScriptInterpreter.h:14
void flush()
Calls the protected virtual clear function.
ip_type getLabelIp(const std::string &name)
Gets the ip from the label name.
void setState(EState exec_state)
Sets the execution state.
virtual bool compileAdditionalStatement(const IdInfo *info, const std::string &source)
Compile external supplied keyword.
strings getIdentifiers(EIdentifier id) const override
Gets a list of available identifiers.
ip_type getErrorInstructionPtr() const
Gets the error instruction pointer in case of an error.
std::string getInstructionText(ip_type ip) const
Gets the instruction text at pointer IP.
void setScriptName(const std::string &name)
Sets the name given by the user. Is used for referencing when debugging.
ElapseTimer _loopTimer
Timer to prevent endless loops.
Definition ScriptInterpreter.h:372
std::string getDebugText() const
const IdInfo * getInfo(const std::string &name) const override
EExecMode
Enumerate for indicating the mode of execution.
Definition ScriptInterpreter.h:80
@ emInit
Definition ScriptInterpreter.h:82
@ emRun
Definition ScriptInterpreter.h:84
@ emStep
Definition ScriptInterpreter.h:88
@ emStart
Definition ScriptInterpreter.h:86
virtual void exitFunction(EExitCode exitcode, const Value &value)
Function is called at the exit of the script.
EExitCode
Possible exit codes.
Definition ScriptInterpreter.h:298
@ ecError
Definition ScriptInterpreter.h:302
@ ecApplication
Definition ScriptInterpreter.h:306
@ ecScript
Definition ScriptInterpreter.h:304
const TVector< Instruction > & getInstructions() const
Gets the instruction text at pointer IP.
Definition ScriptInterpreter.h:267
bool callFunction(const std::string &name, bool step_mode)
bool compile(const char *cmd)
Compiles the passed script text and outputs debug info to the stream.
ChangeListener::emitter_type & getChangeEmitter()
Gets the emitter for change events.
Definition ScriptInterpreter.h:35
void callFunction(ip_type ip, bool step_mode)
Makes it possible to execute function/gosub.
~ScriptInterpreter() override
Virtual destructor.
bool getSetValue(const IdInfo *info, Value *value, Value::vector_type *params, bool flag_set) override
Overridden from ScriptEngine class.
void setOutputStream(std::ostream *os)
Sets and enables debugging output stream.
EState
State of the running script.
Definition ScriptInterpreter.h:61
@ esReady
Definition ScriptInterpreter.h:71
@ esRunning
Definition ScriptInterpreter.h:69
@ esCompiled
Definition ScriptInterpreter.h:67
@ esEmpty
Definition ScriptInterpreter.h:65
EKeyWord
Keywords available for the script.
Definition ScriptInterpreter.h:313
@ kwWhile
Definition ScriptInterpreter.h:316
@ kwReturn
Definition ScriptInterpreter.h:322
@ kwBreak
Definition ScriptInterpreter.h:319
@ kwExternal
Definition ScriptInterpreter.h:323
@ kwExtern
Definition ScriptInterpreter.h:324
@ kwSubroutine
Definition ScriptInterpreter.h:321
@ kwIf
Definition ScriptInterpreter.h:315
@ kwGoto
Definition ScriptInterpreter.h:318
@ kwContinue
Definition ScriptInterpreter.h:320
@ kwElse
Definition ScriptInterpreter.h:317
TListener< const ScriptInterpreter * > ChangeListener
Declare type for listening and at the same time a type for emitting the changes of the script like St...
Definition ScriptInterpreter.h:20
virtual void clear()
Clears compiled data can be overloaded by derived classes.
std::string getScriptName() const
Gets the name given by the user. Is used for referencing when debugging.
void setMaxLoopTime(unsigned long usec)
Sets the maximum loop time for this instance.
const TVector< VariableInfo * > & getVariables() const
Gets the current variables declared in the script.
Definition ScriptInterpreter.h:275
EState execute(EExecMode exec_mode=emRun)
Executes a macro depending on the execution mode.
strings getInfoNames() const override
Gets names of info structures in lines.
CodePos getErrorPos() const
virtual void linkInstruction()
Links the labels of the calls in the script.
const char * getStateName(EState exec_state=esCurrent) const
Gets the execution state name from the passed state or the current one on state 'esCurrent'.
bool isStepMode() const
Get the step mode of the script.
ScriptInterpreter()
Default constructor.
ip_type getInstructionPtr() const
ssize_t ip_type
Instruction pointer type.
Definition ScriptObject.h:37
EIdentifier
Keyword identifiers.
Definition ScriptObject.h:43
std::string::size_type pos_type
Source position type.
Definition ScriptObject.h:33
Template class used to bind listeners to a handler_type instance.
Definition TListener.h:135
Counted vector having additional methods and operators for ease of usage. This template class extends...
Definition TVector.h:20
Value container class able to performing arithmetic functions.
Definition Value.h:19
#define _MISC_CLASS
Definition misc/global.h:40
Definition Application.h:10
TStrings< std::string > strings
Vector of std::strings with additional functionality.
Definition TStrings.h:193
Position in the source with line and offset.
Definition ScriptInterpreter.h:97
CodePos(pos_type line, pos_type offset)
Definition ScriptInterpreter.h:100
Executable instruction as result of interpreting the script.
Definition ScriptInterpreter.h:198
const char * getMnemonic() const
Gets the mnemonic of the current instruction.
EInstr
Interpreter available instructions.
Definition ScriptInterpreter.h:203
@ eiCalculate
Definition ScriptInterpreter.h:208
@ eiTestJump
Definition ScriptInterpreter.h:209
@ eiJump
Definition ScriptInterpreter.h:210
@ eiCall
Definition ScriptInterpreter.h:211
@ eiRetFunction
Definition ScriptInterpreter.h:212
Instruction()=default
Default constructor.
Instruction(EInstr instr, ip_type ip, const CodePos &pos, std::string script=std::string())
Initializing constructor.
ip_type getJumpIp() const
Gets the jump ip from this instruction when applicable.
Used to create static lookup lists.
Definition ScriptObject.h:62