MinitScript  0.9.31 PRE-BETA
ScriptMethods.cpp
Go to the documentation of this file.
1 #include <span>
2 
3 #include <memory>
4 
10 
11 using std::span;
12 using std::make_unique;
13 
15 
17 
20 
21 void ScriptMethods::registerConstants(MinitScript* minitScript) {
22 }
23 
24 void ScriptMethods::registerMethods(MinitScript* minitScript) {
25  // script methods
26  {
27  //
28  class MethodScriptWaitForCondition: public MinitScript::Method {
29  private:
30  MinitScript* minitScript { nullptr };
31  public:
32  MethodScriptWaitForCondition(MinitScript* minitScript): minitScript(minitScript) {}
33  const string getMethodName() override {
34  return "script.waitForCondition";
35  }
36  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
37  if (arguments.size() == 0) {
39  minitScript->getScriptState().timeWaitTime = 100LL;
40  minitScript->setScriptStateState(MinitScript::STATEMACHINESTATE_WAIT_FOR_CONDITION);
41  } else {
42  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
43  }
44  }
45  };
46  minitScript->registerMethod(new MethodScriptWaitForCondition(minitScript));
47  }
48  {
49  //
50  class MethodScriptWait: public MinitScript::Method {
51  private:
52  MinitScript* minitScript { nullptr };
53  public:
54  MethodScriptWait(MinitScript* minitScript):
56  { .type = MinitScript::TYPE_INTEGER, .name = "time", .optional = false, .reference = false, .nullable = false }
57  }),
58  minitScript(minitScript) {}
59  const string getMethodName() override {
60  return "script.wait";
61  }
62  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
63  int64_t time;
64  if (arguments.size() == 1 &&
65  minitScript->getIntegerValue(arguments, 0, time) == true) {
67  minitScript->getScriptState().timeWaitTime = time;
68  minitScript->setScriptStateState(MinitScript::STATEMACHINESTATE_WAIT);
69  } else {
70  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
71  }
72  }
73  };
74  minitScript->registerMethod(new MethodScriptWait(minitScript));
75  }
76  {
77  //
78  class MethodScriptEmit: public MinitScript::Method {
79  private:
80  MinitScript* minitScript { nullptr };
81  public:
82  MethodScriptEmit(MinitScript* minitScript):
84  {
85  { .type = MinitScript::TYPE_STRING, .name = "condition", .optional = false, .reference = false, .nullable = false }
86  }
87  ),
88  minitScript(minitScript) {}
89  const string getMethodName() override {
90  return "script.emit";
91  }
92  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
93  string condition;
94  if (arguments.size() == 1 &&
95  MinitScript::getStringValue(arguments, 0, condition) == true) {
96  minitScript->emit(condition);
97  } else {
98  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
99  }
100  }
101  };
102  minitScript->registerMethod(new MethodScriptEmit(minitScript));
103  }
104  {
105  //
106  class MethodScriptEnableNamedCondition: public MinitScript::Method {
107  private:
108  MinitScript* minitScript { nullptr };
109  public:
110  MethodScriptEnableNamedCondition(MinitScript* minitScript):
112  {
113  { .type = MinitScript::TYPE_STRING, .name = "name", .optional = false, .reference = false, .nullable = false }
114  }
115  ),
116  minitScript(minitScript) {}
117  const string getMethodName() override {
118  return "script.enableNamedCondition"; // METHOD_ENABLENAMEDCONDITION;
119  }
120  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
121  string name;
122  if (arguments.size() == 1 &&
123  MinitScript::getStringValue(arguments, 0, name) == true) {
124  minitScript->enabledNamedConditions.erase(
125  remove(
126  minitScript->enabledNamedConditions.begin(),
127  minitScript->enabledNamedConditions.end(),
128  name
129  ),
130  minitScript->enabledNamedConditions.end()
131  );
132  minitScript->enabledNamedConditions.push_back(name);
133  } else {
134  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
135  }
136  }
137  };
138  minitScript->registerMethod(new MethodScriptEnableNamedCondition(minitScript));
139  }
140  {
141  //
142  class MethodScriptDisableNamedCondition: public MinitScript::Method {
143  private:
144  MinitScript* minitScript { nullptr };
145  public:
146  MethodScriptDisableNamedCondition(MinitScript* minitScript):
148  {
149  { .type = MinitScript::TYPE_STRING, .name = "name", .optional = false, .reference = false, .nullable = false }
150  }
151  ),
152  minitScript(minitScript) {}
153  const string getMethodName() override {
154  return "script.disableNamedCondition"; // METHOD_DISABLENAMEDCONDITION;
155  }
156  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
157  string name;
158  if (arguments.size() == 1 &&
159  MinitScript::getStringValue(arguments, 0, name) == true) {
160  minitScript->enabledNamedConditions.erase(
161  remove(
162  minitScript->enabledNamedConditions.begin(),
163  minitScript->enabledNamedConditions.end(),
164  name
165  ),
166  minitScript->enabledNamedConditions.end()
167  );
168  } else {
169  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
170  }
171  }
172  };
173  minitScript->registerMethod(new MethodScriptDisableNamedCondition(minitScript));
174  }
175  {
176  //
177  class MethodScriptGetNamedConditions: public MinitScript::Method {
178  private:
179  MinitScript* minitScript { nullptr };
180  public:
181  MethodScriptGetNamedConditions(MinitScript* minitScript):
182  MinitScript::Method({}, MinitScript::TYPE_STRING),
183  minitScript(minitScript) {}
184  const string getMethodName() override {
185  return "script.getNamedConditions";
186  }
187  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
188  if (arguments.size() == 0) {
189  string result;
190  for (const auto& namedCondition: minitScript->enabledNamedConditions) {
191  result+= result.empty() == false?",":namedCondition;
192  }
193  returnValue.setValue(result);
194  } else {
195  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
196  }
197  }
198  };
199  minitScript->registerMethod(new MethodScriptGetNamedConditions(minitScript));
200  }
201  {
202  //
203  class MethodScriptEvaluate: public MinitScript::Method {
204  private:
205  MinitScript* minitScript { nullptr };
206  public:
207  MethodScriptEvaluate(MinitScript* minitScript):
209  {
210  { .type = MinitScript::TYPE_STRING, .name = "statement", .optional = false, .reference = false, .nullable = false }
211  },
212  MinitScript::TYPE_PSEUDO_MIXED
213  ),
214  minitScript(minitScript) {}
215  const string getMethodName() override {
216  return "script.evaluate";
217  }
218  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
219  string statementString;
220  if (arguments.size() == 1 &&
221  minitScript->getStringValue(arguments, 0, statementString) == true) {
222  if (minitScript->evaluate(statementString, returnValue) == false) {
223  _Console::printLine(getMethodName() + "(): " + minitScript->getSubStatementInformation(subStatement) + ": '" + statementString + "': An error occurred");
224  }
225  } else {
226  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
227  }
228  }
229  };
230  minitScript->registerMethod(new MethodScriptEvaluate(minitScript));
231  }
232  {
233  //
234  class MethodScriptCall: public MinitScript::Method {
235  private:
236  MinitScript* minitScript { nullptr };
237  public:
238  MethodScriptCall(MinitScript* minitScript):
240  {
241  { .type = MinitScript::TYPE_STRING, .name = "function", .optional = false, .reference = false, .nullable = false }
242  },
243  MinitScript::TYPE_PSEUDO_MIXED
244  ),
245  minitScript(minitScript) {}
246  const string getMethodName() override {
247  return "script.call"; // METHOD_SCRIPTCALL;
248  }
249  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
250  string function;
251  if (arguments.size() >= 1 &&
252  minitScript->getStringValue(arguments, 0, function) == true) {
253  auto scriptIdx = minitScript->getFunctionScriptIdx(function);
254  if (scriptIdx == MinitScript::SCRIPTIDX_NONE || minitScript->getScripts()[scriptIdx].type != MinitScript::Script::TYPE_FUNCTION) {
255  MINITSCRIPT_METHODUSAGE_COMPLAINM(getMethodName(), "Function not found: " + function);
256  } else {
257  #if defined (__clang__)
258  // Clang currently does not support initializing span using begin and end iterators,
259  vector<MinitScript::Variable> callArguments(arguments.size() - 1);
260  for (auto i = 1; i < arguments.size(); i++) callArguments[i - 1] = move(arguments[i]);
261  // call
262  span callArgumentsSpan(callArguments);
263  minitScript->call(scriptIdx, callArgumentsSpan, returnValue);
264  // move back arguments
265  for (auto i = 1; i < arguments.size(); i++) arguments[i] = move(callArguments[i - 1]);
266  #else
267  span callArgumentsSpan(arguments.begin() + 1, arguments.end());
268  minitScript->call(scriptIdx, callArgumentsSpan, returnValue);
269  #endif
270  }
271  } else {
272  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
273  }
274  }
275  bool isVariadic() const override {
276  return true;
277  }
278  };
279  minitScript->registerMethod(new MethodScriptCall(minitScript));
280  }
281  {
282  //
283  class MethodScriptCallByIndex: public MinitScript::Method {
284  private:
285  MinitScript* minitScript { nullptr };
286  public:
287  MethodScriptCallByIndex(MinitScript* minitScript):
289  {
290  { .type = MinitScript::TYPE_INTEGER, .name = "functionScriptIdx", .optional = false, .reference = false, .nullable = false }
291  },
292  MinitScript::TYPE_PSEUDO_MIXED
293  ),
294  minitScript(minitScript) {}
295  const string getMethodName() override {
296  return "script.callByIndex"; // METHOD_SCRIPTCALLBYINDEX;
297  }
298  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
299  int64_t functionScriptIdx;
300  if (arguments.size() >= 1 &&
301  minitScript->getIntegerValue(arguments, 0, functionScriptIdx) == true) {
302  if (functionScriptIdx == MinitScript::SCRIPTIDX_NONE ||
303  functionScriptIdx < 0 ||
304  functionScriptIdx >= minitScript->getScripts().size() ||
305  minitScript->getScripts()[functionScriptIdx].type != MinitScript::Script::TYPE_FUNCTION) {
306  MINITSCRIPT_METHODUSAGE_COMPLAINM(getMethodName(), "Function script index invalid: " + to_string(functionScriptIdx));
307  } else {
308  #if defined (__clang__)
309  // Clang currently does not support initializing span using begin and end iterators,
310  vector<MinitScript::Variable> callArguments(arguments.size() - 1);
311  for (auto i = 1; i < arguments.size(); i++) callArguments[i - 1] = move(arguments[i]);
312  // call
313  span callArgumentsSpan(callArguments);
314  minitScript->call(functionScriptIdx, callArgumentsSpan, returnValue);
315  // move back arguments
316  for (auto i = 1; i < arguments.size(); i++) arguments[i] = move(callArguments[i - 1]);
317  #else
318  span callArgumentsSpan(arguments.begin() + 1, arguments.end());
319  minitScript->call(functionScriptIdx, callArgumentsSpan, returnValue);
320  #endif
321  }
322  } else {
323  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
324  }
325  }
326  bool isVariadic() const override {
327  return true;
328  }
329  bool isPrivate() const override {
330  return true;
331  }
332  };
333  minitScript->registerMethod(new MethodScriptCallByIndex(minitScript));
334  }
335  {
336  //
337  class MethodScriptCallFunction: public MinitScript::Method {
338  private:
339  MinitScript* minitScript { nullptr };
340  public:
341  MethodScriptCallFunction(MinitScript* minitScript):
343  {
344  { .type = MinitScript::TYPE_FUNCTION_ASSIGNMENT, .name = "function", .optional = false, .reference = false, .nullable = false }
345  },
346  MinitScript::TYPE_PSEUDO_MIXED
347  ),
348  minitScript(minitScript) {}
349  const string getMethodName() override {
350  return "script.callFunction";
351  }
352  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
353  string function;
354  auto functionScriptIdx = MinitScript::SCRIPTIDX_NONE;
355  if (arguments.size() >= 1 &&
356  minitScript->getFunctionValue(arguments, 0, function, functionScriptIdx) == true) {
357  if (functionScriptIdx == MinitScript::SCRIPTIDX_NONE) {
358  functionScriptIdx = minitScript->getFunctionScriptIdx(function);
359  }
360  if (functionScriptIdx == MinitScript::SCRIPTIDX_NONE || minitScript->getScripts()[functionScriptIdx].type != MinitScript::Script::TYPE_FUNCTION) {
361  MINITSCRIPT_METHODUSAGE_COMPLAINM(getMethodName(), "Function not found: " + function);
362  } else {
363  #if defined (__clang__)
364  // Clang currently does not support initializing span using begin and end iterators,
365  vector<MinitScript::Variable> callArguments(arguments.size() - 1);
366  for (auto i = 1; i < arguments.size(); i++) callArguments[i - 1] = move(arguments[i]);
367  // call
368  span callArgumentsSpan(callArguments);
369  minitScript->call(functionScriptIdx, callArgumentsSpan, returnValue);
370  // move back arguments
371  for (auto i = 1; i < arguments.size(); i++) arguments[i] = move(callArguments[i - 1]);
372  #else
373  span callArgumentsSpan(arguments.begin() + 1, arguments.end());
374  minitScript->call(functionScriptIdx, callArgumentsSpan, returnValue);
375  #endif
376  }
377  } else {
378  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
379  }
380  }
381  bool isVariadic() const override {
382  return true;
383  }
384  };
385  minitScript->registerMethod(new MethodScriptCallFunction(minitScript));
386  }
387  {
388  //
389  class MethodScriptCallStacklet: public MinitScript::Method {
390  private:
391  MinitScript* minitScript { nullptr };
392  public:
393  MethodScriptCallStacklet(MinitScript* minitScript):
395  {
396  { .type = MinitScript::TYPE_STRING, .name = "stacklet", .optional = false, .reference = false, .nullable = false }
397  },
398  MinitScript::TYPE_PSEUDO_MIXED
399  ),
400  minitScript(minitScript) {}
401  const string getMethodName() override {
402  return "script.callStacklet"; // METHOD_SCRIPTCALLSTACKLET;
403  }
404  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
405  string stacklet;
406  if (arguments.size() >= 1 &&
407  minitScript->getStringValue(arguments, 0, stacklet) == true) {
408  auto scriptIdx = minitScript->getFunctionScriptIdx(stacklet);
409  if (scriptIdx == MinitScript::SCRIPTIDX_NONE || minitScript->getScripts()[scriptIdx].type != MinitScript::Script::TYPE_STACKLET) {
410  MINITSCRIPT_METHODUSAGE_COMPLAINM(getMethodName(), "Stacklet not found: " + stacklet);
411  } else {
412  vector<MinitScript::Variable> callArguments(0);
413  span callArgumentsSpan(callArguments);
414  minitScript->callStacklet(scriptIdx, callArgumentsSpan, returnValue);
415  }
416  } else {
417  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
418  }
419  }
420  };
421  minitScript->registerMethod(new MethodScriptCallStacklet(minitScript));
422  }
423  {
424  //
425  class MethodScriptCallStackletByIndex: public MinitScript::Method {
426  private:
427  MinitScript* minitScript { nullptr };
428  public:
429  MethodScriptCallStackletByIndex(MinitScript* minitScript):
431  {
432  { .type = MinitScript::TYPE_INTEGER, .name = "stackletScriptIndex", .optional = false, .reference = false, .nullable = false }
433  },
434  MinitScript::TYPE_PSEUDO_MIXED
435  ),
436  minitScript(minitScript) {}
437  const string getMethodName() override {
438  return "script.callStackletByIndex"; // METHOD_SCRIPTCALLSTACKLETBYINDEX;
439  }
440  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
441  int64_t stackletScriptIdx;
442  if (arguments.size() == 1 &&
443  minitScript->getIntegerValue(arguments, 0, stackletScriptIdx) == true) {
444  if (stackletScriptIdx == MinitScript::SCRIPTIDX_NONE ||
445  stackletScriptIdx < 0 ||
446  stackletScriptIdx >= minitScript->getScripts().size() ||
447  minitScript->getScripts()[stackletScriptIdx].type != MinitScript::Script::TYPE_STACKLET) {
448  MINITSCRIPT_METHODUSAGE_COMPLAINM(getMethodName(), "Stacklet script index invalid: " + to_string(stackletScriptIdx));
449  } else {
450  vector<MinitScript::Variable> callArguments(0);
451  span callArgumentsSpan(callArguments);
452  minitScript->callStacklet(stackletScriptIdx, callArgumentsSpan, returnValue);
453  }
454  } else {
455  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
456  }
457  }
458  bool isPrivate() const override {
459  return true;
460  }
461  };
462  minitScript->registerMethod(new MethodScriptCallStackletByIndex(minitScript));
463  }
464  {
465  //
466  class MethodScriptStop: public MinitScript::Method {
467  private:
468  MinitScript* minitScript { nullptr };
469  public:
470  MethodScriptStop(MinitScript* minitScript): MinitScript::Method(), minitScript(minitScript) {}
471  const string getMethodName() override {
472  return "script.stop";
473  }
474  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
475  if (arguments.size() == 0) {
476  minitScript->stopScriptExecution();
477  minitScript->stopRunning();
478  } else {
479  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
480  }
481  }
482  };
483  minitScript->registerMethod(new MethodScriptStop(minitScript));
484  }
485  {
486  //
487  class MethodScriptGetVariables: public MinitScript::Method {
488  private:
489  MinitScript* minitScript { nullptr };
490  public:
491  MethodScriptGetVariables(MinitScript* minitScript): MinitScript::Method({}, MinitScript::TYPE_MAP), minitScript(minitScript) {}
492  const string getMethodName() override {
493  return "script.getVariables";
494  }
495  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
496  if (arguments.size() == 0) {
497  returnValue.setType(MinitScript::TYPE_MAP);
498  for (const auto& [variableName, variableValue]: minitScript->getScriptState().variables) {
499  returnValue.setMapEntry(variableName, *variableValue);
500  }
501  } else {
502  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
503  }
504  }
505  };
506  minitScript->registerMethod(new MethodScriptGetVariables(minitScript));
507  }
508  {
509  //
510  class MethodScriptIsNative: public MinitScript::Method {
511  private:
512  MinitScript* minitScript { nullptr };
513  public:
514  MethodScriptIsNative(MinitScript* minitScript): MinitScript::Method({}, MinitScript::TYPE_BOOLEAN),
515  minitScript(minitScript) {}
516 
517  const string getMethodName() override {
518  return "script.isNative";
519  }
520  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
521  if (arguments.size() == 0) {
522  returnValue.setValue(minitScript->isNative());
523  } else {
524  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
525  }
526  }
527  };
528  minitScript->registerMethod(new MethodScriptIsNative(minitScript));
529  }
530  {
531  //
532  class MethodScriptErrorGetMessage: public MinitScript::Method {
533  private:
534  MinitScript* minitScript { nullptr };
535  public:
536  MethodScriptErrorGetMessage(MinitScript* minitScript):
537  MinitScript::Method({}, MinitScript::TYPE_STRING, true),
538  minitScript(minitScript) {}
539  const string getMethodName() override {
540  return "script.error.getMessage";
541  }
542  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
543  if (arguments.size() == 0) {
544  const auto& errorSubStatement = minitScript->getErrorSubStatement();
545  if (errorSubStatement.statement != nullptr) {
546  returnValue.setValue(minitScript->getErrorMessage());
547  }
548  } else {
549  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
550  }
551  }
552  };
553  minitScript->registerMethod(new MethodScriptErrorGetMessage(minitScript));
554  }
555  {
556  //
557  class MethodScriptErrorGetStatement: public MinitScript::Method {
558  private:
559  MinitScript* minitScript { nullptr };
560  public:
561  MethodScriptErrorGetStatement(MinitScript* minitScript):
562  MinitScript::Method({}, MinitScript::TYPE_MAP, true),
563  minitScript(minitScript) {}
564  const string getMethodName() override {
565  return "script.error.getStatement";
566  }
567  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
568  if (arguments.size() == 0) {
569  const auto& errorSubStatement = minitScript->getErrorSubStatement();
570  if (errorSubStatement.statement != nullptr) {
571  returnValue.setType(MinitScript::TYPE_MAP);
572  returnValue.setMapEntry("script", MinitScript::Variable(minitScript->getScriptPathName() + "/" + minitScript->getScriptFileName()));
573  returnValue.setMapEntry("line", MinitScript::Variable(static_cast<int64_t>(errorSubStatement.statement->line + errorSubStatement.subLineIdx)));
574  returnValue.setMapEntry("statementIndex", MinitScript::Variable(static_cast<int64_t>(errorSubStatement.statement->statementIdx)));
575  returnValue.setMapEntry("statement", MinitScript::Variable(errorSubStatement.statement->statement));
576  returnValue.setMapEntry("executableStatement", MinitScript::Variable(errorSubStatement.statement->executableStatement));
577  }
578  } else {
579  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
580  }
581  }
582  };
583  minitScript->registerMethod(new MethodScriptErrorGetStatement(minitScript));
584  }
585 }
#define MINITSCRIPT_METHODUSAGE_COMPLAINM(methodName, message)
Definition: MinitScript.h:60
#define MINITSCRIPT_METHODUSAGE_COMPLAIN(methodName)
Definition: MinitScript.h:59
void setMapEntry(const string &key, const Variable &value, bool _private=false)
Set entry in map with given key.
Definition: MinitScript.h:1993
void setType(VariableType newType)
Set type.
Definition: MinitScript.h:1253
void setValue(const Variable &variable)
Set value from given variable into variable.
Definition: MinitScript.h:1618
const SubStatement & getErrorSubStatement()
Definition: MinitScript.h:4337
void registerMethod(Method *method)
Register method.
int getFunctionScriptIdx(const string &function)
Return function script index by function name.
Definition: MinitScript.h:5204
void setScriptStateState(int state)
Set script state machine state.
Definition: MinitScript.h:3416
bool call(int scriptIdx, span< Variable > &arguments, Variable &returnValue, bool pushScriptState)
Call function.
void stopScriptExecution()
Stop script execution.
Definition: MinitScript.h:3399
bool callStacklet(int scriptIdx, span< Variable > &arguments, Variable &returnValue)
Call stacklet.
Definition: MinitScript.h:5245
virtual void emit(const string &condition)
Emit.
static bool getStringValue(const span< Variable > &arguments, int idx, string &value, bool optional=false)
Get string value from given variable.
Definition: MinitScript.h:4746
const string getSubStatementInformation(const SubStatement &subStatement)
Return sub statement information.
Definition: MinitScript.h:4576
void stopRunning()
Set running flag to false.
Definition: MinitScript.h:3392
static bool getFunctionValue(const span< Variable > &arguments, int idx, string &function, int &scriptIdx, bool optional=false)
Get function value from given variable.
Definition: MinitScript.h:4717
const vector< Script > & getScripts()
Definition: MinitScript.h:4471
static bool getIntegerValue(const span< Variable > &arguments, int idx, int64_t &value, bool optional=false)
Get integer value from given variable.
Definition: MinitScript.h:4688
bool evaluate(const string &evaluateStatement, Variable &returnValue)
Evaluate statement.
Definition: MinitScript.h:5266
MinitScript script script methods.
Definition: ScriptMethods.h:12
static void printLine()
Print newline to console.
Definition: Console.cpp:66
Time utility class.
Definition: Time.h:20
static int64_t getCurrentMillis()
Retrieve current time in milliseconds.
Definition: Time.h:27
unordered_map< string, Variable * > variables
Definition: MinitScript.h:3109