Lines Matching defs:pVM

69 void vmBranchRelative(FICL_VM *pVM, int offset)
71 pVM->ip += offset;
78 ** Creates a virtual machine either from scratch (if pVM is NULL on entry)
82 FICL_VM *vmCreate(FICL_VM *pVM, unsigned nPStack, unsigned nRStack)
84 if (pVM == NULL)
86 pVM = (FICL_VM *)ficlMalloc(sizeof (FICL_VM));
87 assert (pVM);
88 memset(pVM, 0, sizeof (FICL_VM));
91 if (pVM->pStack)
92 stackDelete(pVM->pStack);
93 pVM->pStack = stackCreate(nPStack);
95 if (pVM->rStack)
96 stackDelete(pVM->rStack);
97 pVM->rStack = stackCreate(nRStack);
100 if (pVM->fStack)
101 stackDelete(pVM->fStack);
102 pVM->fStack = stackCreate(nPStack);
105 pVM->textOut = ficlTextOut;
107 vmReset(pVM);
108 return pVM;
117 void vmDelete (FICL_VM *pVM)
119 if (pVM)
121 ficlFree(pVM->pStack);
122 ficlFree(pVM->rStack);
124 ficlFree(pVM->fStack);
126 ficlFree(pVM);
140 void vmExecute(FICL_VM *pVM, FICL_WORD *pWord)
142 pVM->runningWord = pWord;
143 pWord->code(pVM);
160 void vmInnerLoop(FICL_VM *pVM)
162 M_INNER_LOOP(pVM);
195 void vmInnerLoop(FICL_VM *pVM)
197 IPTYPE ip = pVM->ip;
198 FICL_STACK *pStack = pVM->pStack;
253 FICL_DICT *vmGetDict(FICL_VM *pVM)
255 assert(pVM);
256 return pVM->pSys->dp;
268 char *vmGetString(FICL_VM *pVM, FICL_STRING *spDest, char delimiter)
270 STRINGINFO si = vmParseStringEx(pVM, delimiter, 0);
290 STRINGINFO vmGetWord(FICL_VM *pVM)
292 STRINGINFO si = vmGetWord0(pVM);
296 vmThrow(pVM, VM_RESTART);
312 STRINGINFO vmGetWord0(FICL_VM *pVM)
314 char *pSrc = vmGetInBuf(pVM);
315 char *pEnd = vmGetInBufEnd(pVM);
347 vmUpdateTib(pVM, pSrc);
359 int vmGetWordToPad(FICL_VM *pVM)
362 char *cp = (char *)pVM->pad;
363 si = vmGetWord(pVM);
384 STRINGINFO vmParseString(FICL_VM *pVM, char delim)
386 return vmParseStringEx(pVM, delim, 1);
389 STRINGINFO vmParseStringEx(FICL_VM *pVM, char delim, char fSkipLeading)
392 char *pSrc = vmGetInBuf(pVM);
393 char *pEnd = vmGetInBufEnd(pVM);
418 vmUpdateTib(pVM, pSrc);
427 CELL vmPop(FICL_VM *pVM)
429 return stackPop(pVM->pStack);
437 void vmPush(FICL_VM *pVM, CELL c)
439 stackPush(pVM->pStack, c);
448 void vmPopIP(FICL_VM *pVM)
450 pVM->ip = (IPTYPE)(stackPopPtr(pVM->rStack));
459 void vmPushIP(FICL_VM *pVM, IPTYPE newIP)
461 stackPushPtr(pVM->rStack, (void *)pVM->ip);
462 pVM->ip = newIP;
471 void vmPushTib(FICL_VM *pVM, char *text, FICL_INT nChars, TIB *pSaveTib)
475 *pSaveTib = pVM->tib;
478 pVM->tib.cp = text;
479 pVM->tib.end = text + nChars;
480 pVM->tib.index = 0;
484 void vmPopTib(FICL_VM *pVM, TIB *pTib)
488 pVM->tib = *pTib;
498 void vmQuit(FICL_VM *pVM)
500 stackReset(pVM->rStack);
501 pVM->fRestart = 0;
502 pVM->ip = NULL;
503 pVM->runningWord = NULL;
504 pVM->state = INTERPRET;
505 pVM->tib.cp = NULL;
506 pVM->tib.end = NULL;
507 pVM->tib.index = 0;
508 pVM->pad[0] = '\0';
509 pVM->sourceID.i = 0;
518 void vmReset(FICL_VM *pVM)
520 vmQuit(pVM);
521 stackReset(pVM->pStack);
523 stackReset(pVM->fStack);
525 pVM->base = 10;
535 void vmSetTextOut(FICL_VM *pVM, OUTFUNC textOut)
538 pVM->textOut = textOut;
540 pVM->textOut = ficlTextOut;
550 void vmTextOut(FICL_VM *pVM, char *text, int fNewline)
552 assert(pVM);
553 assert(pVM->textOut);
554 (pVM->textOut)(pVM, text, fNewline);
564 void vmThrow(FICL_VM *pVM, int except)
566 if (pVM->pState)
567 longjmp(*(pVM->pState), except);
571 void vmThrowErr(FICL_VM *pVM, char *fmt, ...)
575 vsprintf(pVM->pad, fmt, va);
576 vmTextOut(pVM, pVM->pad, 1);
578 longjmp(*(pVM->pState), VM_ERREXIT);