PikaDebuger_Debuger.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "PikaVM.h"
  2. #include "dataStrs.h"
  3. extern volatile PikaObj* __pikaMain;
  4. static enum shellCTRL __obj_shellLineHandler_debug(
  5. PikaObj* self,
  6. char* input_line,
  7. struct ShellConfig* config) {
  8. /* continue */
  9. if (strEqu("c", input_line)) {
  10. return SHELL_CTRL_EXIT;
  11. }
  12. /* next */
  13. if (strEqu("n", input_line)) {
  14. return SHELL_CTRL_EXIT;
  15. }
  16. /* launch shell */
  17. if (strEqu("sh", input_line)) {
  18. /* exit pika shell */
  19. pikaScriptShell((PikaObj*)__pikaMain);
  20. return SHELL_CTRL_CONTINUE;
  21. }
  22. /* quit */
  23. if (strEqu("q", input_line)) {
  24. obj_setInt(self, "enable", 0);
  25. return SHELL_CTRL_EXIT;
  26. }
  27. /* print */
  28. if (strIsStartWith(input_line, "p ")) {
  29. char* path = input_line + 2;
  30. Arg* asm_buff = arg_newStr("B0\n1 REF ");
  31. asm_buff = arg_strAppend(asm_buff, path);
  32. asm_buff = arg_strAppend(asm_buff, "\n0 RUN print\n");
  33. pikaVM_runAsm((PikaObj*)__pikaMain, arg_getStr(asm_buff));
  34. arg_deinit(asm_buff);
  35. return SHELL_CTRL_CONTINUE;
  36. }
  37. obj_run((PikaObj*)__pikaMain, input_line);
  38. return SHELL_CTRL_CONTINUE;
  39. }
  40. void PikaDebug_Debuger___init__(PikaObj* self) {
  41. /* global enable contral */
  42. obj_setInt(self, "enable", 1);
  43. }
  44. void PikaDebug_Debuger_set_trace(PikaObj* self) {
  45. if (!obj_getInt(self, "enable")) {
  46. return;
  47. }
  48. struct ShellConfig cfg = {
  49. .prefix = "(pika-debug) ",
  50. .handler = __obj_shellLineHandler_debug,
  51. .fn_getchar = __platform_getchar,
  52. };
  53. _do_pikaScriptShell(self, &cfg);
  54. }