37 return _emitterChange;
190 [[nodiscard]]
const IdInfo*
getInfo(
const std::string& name)
const override;
235 std::string _script{};
267 return _instructions;
373 std::ostream* _outputStream{
nullptr};
379 void getExternalSource(std::string& source);
384 ip_type addInstruction(Instruction::EInstr instr, ip_type ip, pos_type pos,
const std::string& script = std::string());
389 void setJumpInstruction(ip_type ip, ip_type jmp_ip = -1);
394 void setBreakInstruction(ip_type start_ip, ip_type jmp_ip);
399 void setContinueInstruction(ip_type start_ip, ip_type jmp_ip);
409 void setPosition(pos_type pos);
414 bool getIdName(std::string& name);
426 bool compileKeyword(
const IdInfo* Info, pos_type pos);
443 bool isKeyWord(EKeyWord keyword);
450 const char* getKeyWordText(EKeyWord keyword);
458 bool getScript(std::string& script,
char ending);
463 void getVarScript(std::string& script);
468 std::string getProfilePath();
474 const EState _currentState{esEmpty};
478 EState _prevState{esEmpty};
482 Value _accumulator{};
486 const char* _command;
490 pos_type _codePos{0};
494 pos_type _codeLine{0};
498 bool _flagSentry{
false};
502 bool _flagStepMode{
false};
506 TVector<Instruction> _instructions{};
510 ip_type _currentInstructionPtr{-1};
514 ip_type _errorInstructionPtr{-1};
518 ip_type _mainFunction{-1};
525 explicit StackEntry(ip_type ip)
539 TVector<StackEntry> _stack;
543 TVector<VariableInfo*> _variables;
547 TVector<LabelInfo*> _labels;
551 ElapseTimer _sleepTimer;
555 std::string _scriptName;
559 Value::int_type _trace{0};
563 static IdInfo _info[];
567 static const char* _instructionNames[];
571 static const char* _stateNames[];
575 static const char* _exitCodeNames[];
580 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.
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:369
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.
string_list getInfoNames() const override
Gets names of info structures in lines.
EExitCode
Possible exit codes.
Definition ScriptInterpreter.h:295
@ ecError
Definition ScriptInterpreter.h:299
@ ecApplication
Definition ScriptInterpreter.h:303
@ ecScript
Definition ScriptInterpreter.h:301
const TVector< Instruction > & getInstructions() const
Gets the instruction text at pointer IP.
Definition ScriptInterpreter.h:265
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:310
@ kwWhile
Definition ScriptInterpreter.h:313
@ kwReturn
Definition ScriptInterpreter.h:319
@ kwBreak
Definition ScriptInterpreter.h:316
@ kwExternal
Definition ScriptInterpreter.h:320
@ kwExtern
Definition ScriptInterpreter.h:321
@ kwSubroutine
Definition ScriptInterpreter.h:318
@ kwIf
Definition ScriptInterpreter.h:312
@ kwGoto
Definition ScriptInterpreter.h:315
@ kwContinue
Definition ScriptInterpreter.h:317
@ kwElse
Definition ScriptInterpreter.h:314
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 overridden 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:273
EState execute(EExecMode exec_mode=emRun)
Executes a macro depending on the execution mode.
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'.
string_list getIdentifiers(EIdentifier id) const override
Gets a list of available identifiers. Used for syntax high lighting for example or code completion.
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:79
Counted vector having additional methods and operators for ease of usage. This template class extends...
Definition TVector.h:19
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 > string_list
Vector of std::strings with additional functionality.
Definition TStrings.h:97
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:196
const char * getMnemonic() const
Gets the mnemonic of the current instruction.
EInstr
Interpreter available instructions.
Definition ScriptInterpreter.h:201
@ eiCalculate
Definition ScriptInterpreter.h:206
@ eiTestJump
Definition ScriptInterpreter.h:207
@ eiJump
Definition ScriptInterpreter.h:208
@ eiCall
Definition ScriptInterpreter.h:209
@ eiRetFunction
Definition ScriptInterpreter.h:210
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