ref: 7d02e382d314d5bdde7978ccb7a64ea9201d03db
dir: /word.c/
#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 < 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; } }