word.c revision afc2ba1deb75b323afde536f2dd18bcafdaa308d
#include "ficl.h"
/*
* w o r d I s I m m e d i a t e
*/
int
ficlWordIsImmediate(ficlWord *word)
{
return ((word != NULL) && (word->flags & FICL_WORD_IMMEDIATE));
}
/*
* w o r d I s C o m p i l e O n l y
*/
int
ficlWordIsCompileOnly(ficlWord *word)
{
return ((word != NULL) && (word->flags & FICL_WORD_COMPILE_ONLY));
}
/*
* f i c l W o r d C l a s s i f y
* This public function helps to classify word types for SEE
* and the debugger in tools.c. Given an pointer to a word, it returns
* a member of WOR
*/
ficlWordKind
ficlWordClassify(ficlWord *word)
{
ficlPrimitive code;
ficlInstruction i;
ficlWordKind iType;
if ((((ficlInstruction)word) > ficlInstructionInvalid) &&
(((ficlInstruction)word) < ficlInstructionLast)) {
i = (ficlInstruction)word;
iType = FICL_WORDKIND_INSTRUCTION;
goto IS_INSTRUCTION;
}
code = word->code;
if ((((ficlInstruction)code) > ficlInstructionInvalid) &&
(((ficlInstruction)code) < ficlInstructionLast)) {
i = (ficlInstruction)code;
iType = FICL_WORDKIND_INSTRUCTION_WORD;
goto IS_INSTRUCTION;
}
return (FICL_WORDKIND_PRIMITIVE);
IS_INSTRUCTION:
switch (i) {
case ficlInstructionConstantParen:
#if FICL_WANT_FLOAT
case ficlInstructionFConstantParen:
#endif /* FICL_WANT_FLOAT */
return (FICL_WORDKIND_CONSTANT);
case ficlInstruction2ConstantParen:
#if FICL_WANT_FLOAT
case ficlInstructionF2ConstantParen:
#endif /* FICL_WANT_FLOAT */
return (FICL_WORDKIND_2CONSTANT);
#if FICL_WANT_LOCALS
case ficlInstructionToLocalParen:
case ficlInstructionTo2LocalParen:
#if FICL_WANT_FLOAT
case ficlInstructionToFLocalParen:
case ficlInstructionToF2LocalParen:
#endif /* FICL_WANT_FLOAT */
return (FICL_WORDKIND_INSTRUCTION_WITH_ARGUMENT);
#endif /* FICL_WANT_LOCALS */
#if FICL_WANT_USER
case ficlInstructionUserParen:
return (FICL_WORDKIND_USER);
#endif
case ficlInstruction2LiteralParen:
return (FICL_WORDKIND_2LITERAL);
#if FICL_WANT_FLOAT
case ficlInstructionFLiteralParen:
return (FICL_WORDKIND_FLITERAL);
#endif
case ficlInstructionCreateParen:
return (FICL_WORDKIND_CREATE);
case ficlInstructionCStringLiteralParen:
return (FICL_WORDKIND_CSTRING_LITERAL);
case ficlInstructionStringLiteralParen:
return (FICL_WORDKIND_STRING_LITERAL);
case ficlInstructionColonParen:
return (FICL_WORDKIND_COLON);
case ficlInstructionDoDoes:
return (FICL_WORDKIND_DOES);
case ficlInstructionDoParen:
return (FICL_WORDKIND_DO);
case ficlInstructionQDoParen:
return (FICL_WORDKIND_QDO);
case ficlInstructionVariableParen:
return (FICL_WORDKIND_VARIABLE);
case ficlInstructionBranchParenWithCheck:
case ficlInstructionBranchParen:
return (FICL_WORDKIND_BRANCH);
case ficlInstructionBranch0ParenWithCheck:
case ficlInstructionBranch0Paren:
return (FICL_WORDKIND_BRANCH0);
case ficlInstructionLiteralParen:
return (FICL_WORDKIND_LITERAL);
case ficlInstructionLoopParen:
return (FICL_WORDKIND_LOOP);
case ficlInstructionOfParen:
return (FICL_WORDKIND_OF);
case ficlInstructionPlusLoopParen:
return (FICL_WORDKIND_PLOOP);
default:
return (iType);
}
}