Lines Matching refs:pVM

85 static void vmSetBreak(FICL_VM *pVM, FICL_BREAKPOINT *pBP)
87 FICL_WORD *pStep = ficlLookup(pVM->pSys, "step-break");
90 pBP->address = pVM->ip;
91 pBP->origXT = *pVM->ip;
92 *pVM->ip = pStep;
99 static void debugPrompt(FICL_VM *pVM)
101 vmTextOut(pVM, "dbg> ", 0);
154 static FICL_WORD *findEnclosingWord(FICL_VM *pVM, CELL *cp)
157 FICL_DICT *pd = vmGetDict(pVM);
187 static void seeColon(FICL_VM *pVM, CELL *pc)
191 FICL_DICT *pd = vmGetDict(pVM);
192 FICL_WORD *pSemiParen = ficlLookup(pVM->pSys, "(;)");
199 cp = pVM->pad;
200 if ((void *)pc == (void *)pVM->ip)
288 vmTextOut(pVM, pVM->pad, 1);
291 vmTextOut(pVM, ";", 1);
302 static void seeXT(FICL_VM *pVM)
307 pFW = (FICL_WORD *)stackPopPtr(pVM->pStack);
313 sprintf(pVM->pad, ": %.*s", pFW->nName, pFW->name);
314 vmTextOut(pVM, pVM->pad, 1);
315 seeColon(pVM, pFW->param);
319 vmTextOut(pVM, "does>", 1);
320 seeColon(pVM, (CELL *)pFW->param->p);
324 vmTextOut(pVM, "create", 1);
328 sprintf(pVM->pad, "variable = %ld (%#lx)",
330 vmTextOut(pVM, pVM->pad, 1);
335 sprintf(pVM->pad, "user variable %ld (%#lx)",
337 vmTextOut(pVM, pVM->pad, 1);
342 sprintf(pVM->pad, "constant = %ld (%#lx)",
344 vmTextOut(pVM, pVM->pad, 1);
347 sprintf(pVM->pad, "%.*s is a primitive", pFW->nName, pFW->name);
348 vmTextOut(pVM, pVM->pad, 1);
354 vmTextOut(pVM, "immediate", 1);
359 vmTextOut(pVM, "compile-only", 1);
366 static void see(FICL_VM *pVM)
368 ficlTick(pVM);
369 seeXT(pVM);
382 void ficlDebugXT(FICL_VM *pVM)
384 FICL_WORD *xt = stackPopPtr(pVM->pStack);
387 stackPushPtr(pVM->pStack, xt);
388 seeXT(pVM);
397 vmExecute(pVM, xt);
398 vmSetBreak(pVM, &(pVM->pSys->bpStep));
402 vmExecute(pVM, xt);
416 void stepIn(FICL_VM *pVM)
422 M_VM_STEP(pVM)
428 vmSetBreak(pVM, &(pVM->pSys->bpStep));
441 void stepOver(FICL_VM *pVM)
445 FICL_WORD *pStep = ficlLookup(pVM->pSys, "step-break");
448 pFW = *pVM->ip;
459 pVM->pSys->bpStep.address = pVM->ip + 1;
460 pVM->pSys->bpStep.origXT = pVM->ip[1];
461 pVM->ip[1] = pStep;
465 stepIn(pVM);
489 void stepBreak(FICL_VM *pVM)
495 if (!pVM->fRestart)
497 assert(pVM->pSys->bpStep.address);
498 assert(pVM->pSys->bpStep.origXT);
504 pVM->ip = (IPTYPE)(pVM->pSys->bpStep.address);
505 *pVM->ip = pVM->pSys->bpStep.origXT;
510 pOnStep = ficlLookup(pVM->pSys, "on-step");
512 ficlExecXT(pVM, pOnStep);
517 pFW = pVM->pSys->bpStep.origXT;
518 sprintf(pVM->pad, "next: %.*s", pFW->nName, pFW->name);
522 strcat(pVM->pad, " ( primitive )");
526 vmTextOut(pVM, pVM->pad, 1);
527 debugPrompt(pVM);
531 pVM->fRestart = 0;
534 si = vmGetWord(pVM);
538 stepIn(pVM);
547 xt = findEnclosingWord(pVM, (CELL *)(pVM->ip));
550 stackPushPtr(pVM->pStack, xt);
551 seeXT(pVM);
555 vmTextOut(pVM, "sorry - can't do that", 1);
557 vmThrow(pVM, VM_RESTART);
561 stepOver(pVM);
565 ficlTextOut(pVM, FICL_PROMPT, 0);
566 vmThrow(pVM, VM_ABORT);
574 char *cp = pVM->tib.cp + pVM->tib.index;
575 int count = pVM->tib.end - cp;
576 FICL_WORD *oldRun = pVM->runningWord;
578 ret = ficlExecC(pVM, cp, count);
583 pVM->runningWord = oldRun;
584 vmTextOut(pVM, "", 1);
587 vmThrow(pVM, ret);
591 vmTextOut(pVM, "i -- step In", 1);
592 vmTextOut(pVM, "o -- step Over", 1);
593 vmTextOut(pVM, "g -- Go (execute to completion)", 1);
594 vmTextOut(pVM, "l -- List source code", 1);
595 vmTextOut(pVM, "q -- Quit (stop debugging and abort)", 1);
596 vmTextOut(pVM, "x -- eXecute the rest of the line as ficl words", 1);
597 debugPrompt(pVM);
598 vmThrow(pVM, VM_RESTART);
611 static void bye(FICL_VM *pVM)
613 vmThrow(pVM, VM_USEREXIT);
623 static void displayPStack(FICL_VM *pVM)
625 FICL_STACK *pStk = pVM->pStack;
630 vmCheckStack(pVM, 0, 0);
633 vmTextOut(pVM, "(Stack Empty) ", 0);
639 vmTextOut(pVM, ltoa((*pCell++).i, pVM->pad, pVM->base), 0);
640 vmTextOut(pVM, " ", 0);
647 static void displayRStack(FICL_VM *pVM)
649 FICL_STACK *pStk = pVM->rStack;
653 FICL_DICT *dp = vmGetDict(pVM);
655 vmCheckStack(pVM, 0, 0);
658 vmTextOut(pVM, "(Stack Empty) ", 0);
673 FICL_WORD *pFW = findEnclosingWord(pVM, c.p);
677 sprintf(pVM->pad, "%s+%d ", pFW->name, offset);
678 vmTextOut(pVM, pVM->pad, 0);
682 vmTextOut(pVM, ltoa(c.i, pVM->pad, pVM->base), 0);
683 vmTextOut(pVM, " ", 0);
695 static void forgetWid(FICL_VM *pVM)
697 FICL_DICT *pDict = vmGetDict(pVM);
700 pHash = (FICL_HASH *)stackPopPtr(pVM->pStack);
719 static void forget(FICL_VM *pVM)
722 FICL_DICT *pDict = vmGetDict(pVM);
725 ficlTick(pVM);
726 where = ((FICL_WORD *)stackPopPtr(pVM->pStack))->name;
739 static void listWords(FICL_VM *pVM)
741 FICL_DICT *dp = vmGetDict(pVM);
750 char *pPad = pVM->pad;
769 vmTextOut(pVM, "--- Press Enter to continue ---",0);
771 vmTextOut(pVM,"\r",0);
773 vmTextOut(pVM, pPad, 1);
789 vmTextOut(pVM, "--- Press Enter to continue ---",0);
791 vmTextOut(pVM,"\r",0);
793 vmTextOut(pVM, pPad, 1);
802 vmTextOut(pVM, pPad, 1);
805 sprintf(pVM->pad, "Dictionary: %d words, %ld cells used of %u total",
807 vmTextOut(pVM, pVM->pad, 1);
816 static void listEnv(FICL_VM *pVM)
818 FICL_DICT *dp = pVM->pSys->envp;
828 vmTextOut(pVM, wp->name, 1);
832 sprintf(pVM->pad, "Environment: %d words, %ld cells used of %u total",
834 vmTextOut(pVM, pVM->pad, 1);
844 static void envConstant(FICL_VM *pVM)
849 vmCheckStack(pVM, 1, 0);
852 vmGetWordToPad(pVM);
854 ficlSetEnv(pVM->pSys, pVM->pad, (FICL_UNS)value);
858 static void env2Constant(FICL_VM *pVM)
863 vmCheckStack(pVM, 2, 0);
866 vmGetWordToPad(pVM);
869 ficlSetEnvD(pVM->pSys, pVM->pad, v1, v2);