37 return _emitterChange;
195 [[nodiscard]]
const IdInfo*
getInfo(
const std::string& name)
const override;
240 std::string _script{};
273 return _instructions;
382 std::ostream* _outputStream{
nullptr};
388 void getExternalSource(std::string& source);
393 ip_type addInstruction(Instruction::EInstr instr, ip_type ip, pos_type pos,
const std::string& script = std::string());
398 void setJumpInstruction(ip_type ip, ip_type jmp_ip = -1);
403 void setBreakInstruction(ip_type start_ip, ip_type jmp_ip);
408 void setContinueInstruction(ip_type start_ip, ip_type jmp_ip);
418 void setPosition(pos_type pos);
423 bool getName(std::string& name);
435 bool compileKeyword(
const IdInfo* Info, pos_type pos);
453 bool isKeyWord(EKeyWord keyword);
461 const char* getKeyWordText(EKeyWord keyword);
470 bool getScript(std::string& script,
char ending);
475 void getVarScript(std::string& script);
480 std::string getProfilePath();
487 const EState _currentState{esEmpty};
491 EState _prevState{esEmpty};
495 Value _accumulator{};
499 const char* _command;
503 pos_type _codePos{0};
507 pos_type _codeLine{0};
511 bool _flagSentry{
false};
515 bool _flagStepMode{
false};
519 TVector<Instruction> _instructions{};
523 ip_type _currentInstructionPtr{-1};
527 ip_type _errorInstructionPtr{-1};
531 ip_type _mainFunction{-1};
538 explicit StackEntry(ip_type ip)
552 TVector<StackEntry> _stack;
556 TVector<VariableInfo*> _variables;
560 TVector<LabelInfo*> _labels;
564 ElapseTimer _sleepTimer;
568 std::string _scriptName;
572 Value::int_type _trace{0};
576 static IdInfo _info[];
580 static const char* _instructionNames[];
584 static const char* _stateNames[];
588 static const char* _exitCodeNames[];
593 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.
ElapseTimer _loopTimer
Timer to prevent endless loops.
Definition ScriptInterpreter.h:378
std::string getDebugText() const
const IdInfo * getInfo(const std::string &name) const override
EExecMode
Enumerate for indicating the mode of execution.
Definition ScriptInterpreter.h:82
@ emInit
Definition ScriptInterpreter.h:84
@ emRun
Definition ScriptInterpreter.h:86
@ emStep
Definition ScriptInterpreter.h:90
@ emAbort
Definition ScriptInterpreter.h:92
@ emStart
Definition ScriptInterpreter.h:88
virtual void exitFunction(EExitCode exitcode, const Value &value)
Function is called at the exit of the script.
EExitCode
Possible exit codes.
Definition ScriptInterpreter.h:302
@ ecError
Definition ScriptInterpreter.h:306
@ ecApplication
Definition ScriptInterpreter.h:310
@ ecScript
Definition ScriptInterpreter.h:308
const TVector< Instruction > & getInstructions() const
Gets the instruction text at pointer IP.
Definition ScriptInterpreter.h:271
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:63
@ esReady
Definition ScriptInterpreter.h:73
@ esRunning
Definition ScriptInterpreter.h:71
@ esCompiled
Definition ScriptInterpreter.h:69
@ esEmpty
Definition ScriptInterpreter.h:67
EKeyWord
Keywords available for the script.
Definition ScriptInterpreter.h:317
@ kwWhile
Definition ScriptInterpreter.h:320
@ kwReturn
Definition ScriptInterpreter.h:326
@ kwBreak
Definition ScriptInterpreter.h:323
@ kwExternal
Definition ScriptInterpreter.h:327
@ kwExtern
Definition ScriptInterpreter.h:328
@ kwSubroutine
Definition ScriptInterpreter.h:325
@ kwIf
Definition ScriptInterpreter.h:319
@ kwGoto
Definition ScriptInterpreter.h:322
@ kwContinue
Definition ScriptInterpreter.h:324
@ kwElse
Definition ScriptInterpreter.h:321
TListener< const ScriptInterpreter * > ChangeListener
Declare type for listening and at teh sme time a type for emitting the changes of the script like Sta...
Definition ScriptInterpreter.h:20
virtual void clear()
Clears compiled data can be overloaded by derived classes.
std::string getScriptName() const
Returns the name given by the user.
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:279
strings getInfoNames() const override
Gets names of info structures in lines.
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'.
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:36
EIdentifier
Keyword identifiers.
Definition ScriptObject.h:41
std::string::size_type pos_type
Source position type.
Definition ScriptObject.h:32
Emitter class type for creating an instance which is emitting events to listeners.
Definition TListener.h:180
Template class used to bind listeners to a handler_type instance.
Definition TListener.h:135
Counted vector of strings.
Definition TStrings.h:12
Counted vector having additional methods and operators for ease of usage.
Definition TVector.h:25
Value container class able to performing arithmetic functions.
Definition Value.h:19
#define _MISC_CLASS
Definition misc/global.h:40
Definition Application.h:10
Position in the source with line and offset.
Definition ScriptInterpreter.h:99
CodePos(pos_type line, pos_type offset)
Definition ScriptInterpreter.h:102
Executable instruction as result of interpreting the script.
Definition ScriptInterpreter.h:201
const char * getMnemonic() const
Gets the mnemonic of the current instruction.
EInstr
Interpreter available instructions.
Definition ScriptInterpreter.h:206
@ eiCalculate
Definition ScriptInterpreter.h:211
@ eiTestJump
Definition ScriptInterpreter.h:212
@ eiJump
Definition ScriptInterpreter.h:213
@ eiCall
Definition ScriptInterpreter.h:214
@ eiRetFunction
Definition ScriptInterpreter.h:215
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:60