script.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef _SCRIPT_H_
  2. #define _SCRIPT_H_
  3. #include "runtime.h"
  4. #include "core/stream/stream.h"
  5. #include "module.h"
  6. namespace Con
  7. {
  8. inline EvalResult gLastEvalResult;
  9. inline EvalResult setLastEvalResult(EvalResult pLastEvalResult)
  10. {
  11. gLastEvalResult.valid = pLastEvalResult.valid;
  12. gLastEvalResult.error = pLastEvalResult.error;
  13. gLastEvalResult.value.setString(pLastEvalResult.value.getString());
  14. return std::move(pLastEvalResult);
  15. }
  16. inline EvalResult getLastEvalResult() { return setLastEvalResult(std::move(gLastEvalResult)); };
  17. bool runStream(Stream* byteCode, const char* fileName);
  18. bool isCurrentScriptToolScript();
  19. Module* getCurrentModule();
  20. inline Vector<Runtime*> gRuntimes(32);
  21. inline Runtime* getRuntime(S32 pRuntimeId = 0) { return gRuntimes[pRuntimeId]; }
  22. inline void registerRuntime(S32 pRuntimeId, Runtime* pRuntime)
  23. {
  24. if (gRuntimes.size() == 0)
  25. {
  26. gRuntimes.setSize(pRuntimeId + 1);
  27. gRuntimes.fill(NULL);
  28. }
  29. AssertFatal(gRuntimes[pRuntimeId] == NULL, "A runtime with that ID already exists");
  30. gRuntimes[pRuntimeId] = pRuntime;
  31. }
  32. /// Evaluate an arbitrary chunk of code.
  33. ///
  34. /// @param script Buffer containing code to execute.
  35. /// @param echo Should we echo the string to the console?
  36. /// @param fileName Indicate what file this code is coming from; used in error reporting and such.
  37. /// NOTE: This function restores the console stack on return.
  38. inline EvalResult evaluate(const char* script, bool echo = false, const char *fileName = NULL) { return setLastEvalResult(getRuntime()->evaluate(script, echo, fileName)); };
  39. inline EvalResult evaluate(const char* script, S32 frame, bool echo = false, const char *fileName = NULL) { return setLastEvalResult(getRuntime()->evaluate(script, frame, echo, fileName)); };
  40. /// Evaluate an arbitrary line of script.
  41. ///
  42. /// This wraps dVsprintf(), so you can substitute parameters into the code being executed.
  43. /// NOTE: This function restores the console stack on return.
  44. inline EvalResult evaluatef(const char* string, ...)
  45. {
  46. va_list args;
  47. va_start(args, string);
  48. EvalResult result = setLastEvalResult(getRuntime()->evaluatef(string, args));
  49. va_end(args);
  50. return result;
  51. };
  52. /// Executes a script file and compiles it for use in script.
  53. ///
  54. /// @param string File name that is the script to be executed and compiled.
  55. /// @param fileName Path to the file to execute
  56. /// @param noCalls Deprecated
  57. /// @param journalScript Deprecated
  58. ///
  59. /// @return True if the script was successfully executed, false if not.
  60. inline bool executeFile(const char* fileName, bool noCalls, bool journalScript) { return getRuntime()->executeFile(fileName, noCalls, journalScript); };
  61. }
  62. #endif