summaryrefslogtreecommitdiffstats
path: root/sys/boot/ficl/words.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/boot/ficl/words.c')
-rw-r--r--sys/boot/ficl/words.c57
1 files changed, 51 insertions, 6 deletions
diff --git a/sys/boot/ficl/words.c b/sys/boot/ficl/words.c
index cc0db3d..04cbc0a 100644
--- a/sys/boot/ficl/words.c
+++ b/sys/boot/ficl/words.c
@@ -1068,7 +1068,11 @@ static void ifCoIm(FICL_VM *pVM)
** called (not?branch) since it does "branch if false".
**************************************************************************/
+#ifdef FICL_TRACE
+void ifParen(FICL_VM *pVM)
+#else
static void ifParen(FICL_VM *pVM)
+#endif
{
UNS32 flag;
@@ -1130,7 +1134,11 @@ static void elseCoIm(FICL_VM *pVM)
** compilation address, and branches to that location.
**************************************************************************/
+#ifdef FICL_TRACE
+void branchParen(FICL_VM *pVM)
+#else
static void branchParen(FICL_VM *pVM)
+#endif
{
vmBranchRelative(pVM, *(int *)(pVM->ip));
return;
@@ -1277,8 +1285,11 @@ static void interpWord(FICL_VM *pVM, STRINGINFO si)
** parameter stack at runtime. This code is compiled by "literal".
**
**************************************************************************/
-
+#ifdef FICL_TRACE
+void literalParen(FICL_VM *pVM)
+#else
static void literalParen(FICL_VM *pVM)
+#endif
{
#if FICL_ROBUST > 1
vmCheckStack(pVM, 0, 1);
@@ -1591,8 +1602,11 @@ static void doCoIm(FICL_VM *pVM)
return;
}
-
+#ifdef FICL_TRACE
+void doParen(FICL_VM *pVM)
+#else
static void doParen(FICL_VM *pVM)
+#endif
{
CELL index, limit;
#if FICL_ROBUST > 1
@@ -1631,8 +1645,11 @@ static void qDoCoIm(FICL_VM *pVM)
return;
}
-
+#ifdef FICL_TRACE
+void qDoParen(FICL_VM *pVM)
+#else
static void qDoParen(FICL_VM *pVM)
+#endif
{
CELL index, limit;
#if FICL_ROBUST > 1
@@ -1705,8 +1722,11 @@ static void plusLoopCoIm(FICL_VM *pVM)
return;
}
-
+#ifdef FICL_TRACE
+void loopParen(FICL_VM *pVM)
+#else
static void loopParen(FICL_VM *pVM)
+#endif
{
INT32 index = stackGetTop(pVM->rStack).i;
INT32 limit = stackFetch(pVM->rStack, 1).i;
@@ -1727,8 +1747,11 @@ static void loopParen(FICL_VM *pVM)
return;
}
-
+#ifdef FICL_TRACE
+void plusLoopParen(FICL_VM *pVM)
+#else
static void plusLoopParen(FICL_VM *pVM)
+#endif
{
INT32 index = stackGetTop(pVM->rStack).i;
INT32 limit = stackFetch(pVM->rStack, 1).i;
@@ -2034,8 +2057,11 @@ static void compileOnly(FICL_VM *pVM)
** and count on the stack. Finally, update ip to point to the first
** aligned address after the string text.
**************************************************************************/
-
+#ifdef FICL_TRACE
+void stringLit(FICL_VM *pVM)
+#else
static void stringLit(FICL_VM *pVM)
+#endif
{
FICL_STRING *sp = (FICL_STRING *)(pVM->ip);
FICL_COUNT count = sp->count;
@@ -3783,7 +3809,11 @@ static void setParentWid(FICL_VM *pVM)
** like it's in the dictionary address range.
** NOTE: this excludes :noname words!
*/
+#ifdef FICL_TRACE
+int isAFiclWord(FICL_WORD *pFW)
+#else
static int isAFiclWord(FICL_WORD *pFW)
+#endif
{
void *pv = (void *)pFW;
FICL_DICT *pd = ficlGetDict();
@@ -4401,6 +4431,18 @@ static void fkey(FICL_VM *pVM)
return;
}
+/************************* freebsd added trace ***************************/
+
+#ifdef FICL_TRACE
+static void ficlTrace(FICL_VM *pVM)
+{
+#if FICL_ROBUST > 1
+ vmCheckStack(pVM, 1, 1);
+#endif
+
+ ficl_trace = stackPopINT32(pVM->pStack);
+}
+#endif
/**************************************************************************
f i c l C o m p i l e C o r e
@@ -4574,6 +4616,9 @@ void ficlCompileCore(FICL_DICT *dp)
dictAppendWord(dp, "key?", keyQuestion, FW_DEFAULT);
dictAppendWord(dp, "ms", ms, FW_DEFAULT);
dictAppendWord(dp, "seconds", pseconds, FW_DEFAULT);
+#ifdef FICL_TRACE
+ dictAppendWord(dp, "trace!", ficlTrace, FW_DEFAULT);
+#endif
/*
** EXCEPTION word set
*/
OpenPOWER on IntegriCloud