xref: /illumos-gate/usr/src/common/ficl/word.c (revision afc2ba1d)
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 Soome ficlWordIsImmediate(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 Soome ficlWordIsCompileOnly(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 Soome ficlWordClassify(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