PikaDebuger_Debuger.c 1.7 KB

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