1*afc2ba1dSToomas Soome #include "ficl.h" 2*afc2ba1dSToomas Soome 3*afc2ba1dSToomas Soome /* 4*afc2ba1dSToomas Soome * w o r d I s I m m e d i a t e 5*afc2ba1dSToomas Soome */ 6*afc2ba1dSToomas Soome int ficlWordIsImmediate(ficlWord * word)7*afc2ba1dSToomas SoomeficlWordIsImmediate(ficlWord *word) 8*afc2ba1dSToomas Soome { 9*afc2ba1dSToomas Soome return ((word != NULL) && (word->flags & FICL_WORD_IMMEDIATE)); 10*afc2ba1dSToomas Soome } 11*afc2ba1dSToomas Soome 12*afc2ba1dSToomas Soome /* 13*afc2ba1dSToomas Soome * w o r d I s C o m p i l e O n l y 14*afc2ba1dSToomas Soome */ 15*afc2ba1dSToomas Soome int ficlWordIsCompileOnly(ficlWord * word)16*afc2ba1dSToomas SoomeficlWordIsCompileOnly(ficlWord *word) 17*afc2ba1dSToomas Soome { 18*afc2ba1dSToomas Soome return ((word != NULL) && (word->flags & FICL_WORD_COMPILE_ONLY)); 19*afc2ba1dSToomas Soome } 20*afc2ba1dSToomas Soome 21*afc2ba1dSToomas Soome /* 22*afc2ba1dSToomas Soome * f i c l W o r d C l a s s i f y 23*afc2ba1dSToomas Soome * This public function helps to classify word types for SEE 24*afc2ba1dSToomas Soome * and the debugger in tools.c. Given an pointer to a word, it returns 25*afc2ba1dSToomas Soome * a member of WOR 26*afc2ba1dSToomas Soome */ 27*afc2ba1dSToomas Soome ficlWordKind ficlWordClassify(ficlWord * word)28*afc2ba1dSToomas SoomeficlWordClassify(ficlWord *word) 29*afc2ba1dSToomas Soome { 30*afc2ba1dSToomas Soome ficlPrimitive code; 31*afc2ba1dSToomas Soome ficlInstruction i; 32*afc2ba1dSToomas Soome ficlWordKind iType; 33*afc2ba1dSToomas Soome 34*afc2ba1dSToomas Soome if ((((ficlInstruction)word) > ficlInstructionInvalid) && 35*afc2ba1dSToomas Soome (((ficlInstruction)word) < ficlInstructionLast)) { 36*afc2ba1dSToomas Soome i = (ficlInstruction)word; 37*afc2ba1dSToomas Soome iType = FICL_WORDKIND_INSTRUCTION; 38*afc2ba1dSToomas Soome goto IS_INSTRUCTION; 39*afc2ba1dSToomas Soome } 40*afc2ba1dSToomas Soome 41*afc2ba1dSToomas Soome code = word->code; 42*afc2ba1dSToomas Soome 43*afc2ba1dSToomas Soome if ((((ficlInstruction)code) > ficlInstructionInvalid) && 44*afc2ba1dSToomas Soome (((ficlInstruction)code) < ficlInstructionLast)) { 45*afc2ba1dSToomas Soome i = (ficlInstruction)code; 46*afc2ba1dSToomas Soome iType = FICL_WORDKIND_INSTRUCTION_WORD; 47*afc2ba1dSToomas Soome goto IS_INSTRUCTION; 48*afc2ba1dSToomas Soome } 49*afc2ba1dSToomas Soome 50*afc2ba1dSToomas Soome return (FICL_WORDKIND_PRIMITIVE); 51*afc2ba1dSToomas Soome 52*afc2ba1dSToomas Soome IS_INSTRUCTION: 53*afc2ba1dSToomas Soome 54*afc2ba1dSToomas Soome switch (i) { 55*afc2ba1dSToomas Soome case ficlInstructionConstantParen: 56*afc2ba1dSToomas Soome #if FICL_WANT_FLOAT 57*afc2ba1dSToomas Soome case ficlInstructionFConstantParen: 58*afc2ba1dSToomas Soome #endif /* FICL_WANT_FLOAT */ 59*afc2ba1dSToomas Soome return (FICL_WORDKIND_CONSTANT); 60*afc2ba1dSToomas Soome 61*afc2ba1dSToomas Soome case ficlInstruction2ConstantParen: 62*afc2ba1dSToomas Soome #if FICL_WANT_FLOAT 63*afc2ba1dSToomas Soome case ficlInstructionF2ConstantParen: 64*afc2ba1dSToomas Soome #endif /* FICL_WANT_FLOAT */ 65*afc2ba1dSToomas Soome return (FICL_WORDKIND_2CONSTANT); 66*afc2ba1dSToomas Soome 67*afc2ba1dSToomas Soome #if FICL_WANT_LOCALS 68*afc2ba1dSToomas Soome case ficlInstructionToLocalParen: 69*afc2ba1dSToomas Soome case ficlInstructionTo2LocalParen: 70*afc2ba1dSToomas Soome #if FICL_WANT_FLOAT 71*afc2ba1dSToomas Soome case ficlInstructionToFLocalParen: 72*afc2ba1dSToomas Soome case ficlInstructionToF2LocalParen: 73*afc2ba1dSToomas Soome #endif /* FICL_WANT_FLOAT */ 74*afc2ba1dSToomas Soome return (FICL_WORDKIND_INSTRUCTION_WITH_ARGUMENT); 75*afc2ba1dSToomas Soome #endif /* FICL_WANT_LOCALS */ 76*afc2ba1dSToomas Soome 77*afc2ba1dSToomas Soome #if FICL_WANT_USER 78*afc2ba1dSToomas Soome case ficlInstructionUserParen: 79*afc2ba1dSToomas Soome return (FICL_WORDKIND_USER); 80*afc2ba1dSToomas Soome #endif 81*afc2ba1dSToomas Soome 82*afc2ba1dSToomas Soome case ficlInstruction2LiteralParen: 83*afc2ba1dSToomas Soome return (FICL_WORDKIND_2LITERAL); 84*afc2ba1dSToomas Soome 85*afc2ba1dSToomas Soome #if FICL_WANT_FLOAT 86*afc2ba1dSToomas Soome case ficlInstructionFLiteralParen: 87*afc2ba1dSToomas Soome return (FICL_WORDKIND_FLITERAL); 88*afc2ba1dSToomas Soome #endif 89*afc2ba1dSToomas Soome case ficlInstructionCreateParen: 90*afc2ba1dSToomas Soome return (FICL_WORDKIND_CREATE); 91*afc2ba1dSToomas Soome 92*afc2ba1dSToomas Soome case ficlInstructionCStringLiteralParen: 93*afc2ba1dSToomas Soome return (FICL_WORDKIND_CSTRING_LITERAL); 94*afc2ba1dSToomas Soome 95*afc2ba1dSToomas Soome case ficlInstructionStringLiteralParen: 96*afc2ba1dSToomas Soome return (FICL_WORDKIND_STRING_LITERAL); 97*afc2ba1dSToomas Soome 98*afc2ba1dSToomas Soome case ficlInstructionColonParen: 99*afc2ba1dSToomas Soome return (FICL_WORDKIND_COLON); 100*afc2ba1dSToomas Soome 101*afc2ba1dSToomas Soome case ficlInstructionDoDoes: 102*afc2ba1dSToomas Soome return (FICL_WORDKIND_DOES); 103*afc2ba1dSToomas Soome 104*afc2ba1dSToomas Soome case ficlInstructionDoParen: 105*afc2ba1dSToomas Soome return (FICL_WORDKIND_DO); 106*afc2ba1dSToomas Soome 107*afc2ba1dSToomas Soome case ficlInstructionQDoParen: 108*afc2ba1dSToomas Soome return (FICL_WORDKIND_QDO); 109*afc2ba1dSToomas Soome 110*afc2ba1dSToomas Soome case ficlInstructionVariableParen: 111*afc2ba1dSToomas Soome return (FICL_WORDKIND_VARIABLE); 112*afc2ba1dSToomas Soome 113*afc2ba1dSToomas Soome case ficlInstructionBranchParenWithCheck: 114*afc2ba1dSToomas Soome case ficlInstructionBranchParen: 115*afc2ba1dSToomas Soome return (FICL_WORDKIND_BRANCH); 116*afc2ba1dSToomas Soome 117*afc2ba1dSToomas Soome case ficlInstructionBranch0ParenWithCheck: 118*afc2ba1dSToomas Soome case ficlInstructionBranch0Paren: 119*afc2ba1dSToomas Soome return (FICL_WORDKIND_BRANCH0); 120*afc2ba1dSToomas Soome 121*afc2ba1dSToomas Soome case ficlInstructionLiteralParen: 122*afc2ba1dSToomas Soome return (FICL_WORDKIND_LITERAL); 123*afc2ba1dSToomas Soome 124*afc2ba1dSToomas Soome case ficlInstructionLoopParen: 125*afc2ba1dSToomas Soome return (FICL_WORDKIND_LOOP); 126*afc2ba1dSToomas Soome 127*afc2ba1dSToomas Soome case ficlInstructionOfParen: 128*afc2ba1dSToomas Soome return (FICL_WORDKIND_OF); 129*afc2ba1dSToomas Soome 130*afc2ba1dSToomas Soome case ficlInstructionPlusLoopParen: 131*afc2ba1dSToomas Soome return (FICL_WORDKIND_PLOOP); 132*afc2ba1dSToomas Soome 133*afc2ba1dSToomas Soome default: 134*afc2ba1dSToomas Soome return (iType); 135*afc2ba1dSToomas Soome } 136*afc2ba1dSToomas Soome } 137