Lines Matching refs:node

24 static int finsh_compile(struct finsh_node* node)  in finsh_compile()  argument
26 if (node != NULL) in finsh_compile()
29 if (finsh_node_child(node) != NULL) in finsh_compile()
30 finsh_compile(finsh_node_child(node)); in finsh_compile()
33 switch (node->node_type) in finsh_compile()
38 if (node->idtype & FINSH_IDTYPE_SYSCALL) in finsh_compile()
42 finsh_code_dword((long)node->id.syscall->func); in finsh_compile()
45 else if (node->idtype & FINSH_IDTYPE_SYSVAR) in finsh_compile()
49 sysvar = node->id.sysvar; in finsh_compile()
56 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
72 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
94 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
115 var = node->id.var; in finsh_compile()
122 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
138 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
160 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
182 finsh_code_byte(node->value.char_value); in finsh_compile()
188 finsh_code_dword(node->value.long_value); in finsh_compile()
194 finsh_code_dword((uint32_t)node->value.ptr); in finsh_compile()
199 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_ADD_BYTE); in finsh_compile()
200 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_ADD_WORD); in finsh_compile()
201 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_ADD_DWORD); in finsh_compile()
205 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_SUB_BYTE); in finsh_compile()
206 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_SUB_WORD); in finsh_compile()
207 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_SUB_DWORD); in finsh_compile()
211 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_MUL_BYTE); in finsh_compile()
212 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_MUL_WORD); in finsh_compile()
213 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_MUL_DWORD); in finsh_compile()
217 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_DIV_BYTE); in finsh_compile()
218 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_DIV_WORD); in finsh_compile()
219 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_DIV_DWORD); in finsh_compile()
223 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_MOD_BYTE); in finsh_compile()
224 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_MOD_WORD); in finsh_compile()
225 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_MOD_DWORD); in finsh_compile()
230 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_AND_BYTE); in finsh_compile()
231 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_AND_WORD); in finsh_compile()
232 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_AND_DWORD); in finsh_compile()
236 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_OR_BYTE); in finsh_compile()
237 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_OR_WORD); in finsh_compile()
238 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_OR_DWORD); in finsh_compile()
242 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_XOR_BYTE); in finsh_compile()
243 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_XOR_WORD); in finsh_compile()
244 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_XOR_DWORD); in finsh_compile()
248 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_BITWISE_BYTE); in finsh_compile()
249 … else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_BITWISE_WORD); in finsh_compile()
250 … else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_BITWISE_DWORD); in finsh_compile()
254 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_SHL_BYTE); in finsh_compile()
255 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_SHL_WORD); in finsh_compile()
256 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_SHL_DWORD); in finsh_compile()
260 if (node->data_type == FINSH_DATA_TYPE_BYTE) finsh_code_byte(FINSH_OP_SHR_BYTE); in finsh_compile()
261 else if (node->data_type == FINSH_DATA_TYPE_WORD) finsh_code_byte(FINSH_OP_SHR_WORD); in finsh_compile()
262 else if (node->data_type == FINSH_DATA_TYPE_DWORD) finsh_code_byte(FINSH_OP_SHR_DWORD); in finsh_compile()
272 if (finsh_node_child(node) != NULL) in finsh_compile()
274 sibling = finsh_node_sibling(finsh_node_child(node)); in finsh_compile()
293 if (finsh_node_child(node) && finsh_node_child(node)->node_type == FINSH_NODE_ID) in finsh_compile()
295 switch (finsh_node_child(node)->data_type) in finsh_compile()
322 else if (finsh_node_child(node)->node_type == FINSH_NODE_SYS_GETVALUE) in finsh_compile()
324 switch ((finsh_node_child(node)->data_type) & 0x0F) in finsh_compile()
355 if (finsh_node_child(node) && finsh_node_child(node)->node_type == FINSH_NODE_ID) in finsh_compile()
358 var = finsh_node_child(node)->id.var; in finsh_compile()
363 switch (node->data_type) in finsh_compile()
436 if (finsh_node_child(node) && finsh_node_child(node)->node_type == FINSH_NODE_ID) in finsh_compile()
439 var = finsh_node_child(node)->id.var; in finsh_compile()
444 switch (node->data_type) in finsh_compile()
517 if (finsh_node_child(node) && finsh_node_child(node)->node_type == FINSH_NODE_ID) in finsh_compile()
520 var = finsh_node_child(node)->id.var; in finsh_compile()
522 switch (node->data_type) in finsh_compile()
607 if (finsh_node_child(node) && finsh_node_child(node)->node_type == FINSH_NODE_ID) in finsh_compile()
610 var = finsh_node_child(node)->id.var; in finsh_compile()
612 switch (node->data_type) in finsh_compile()
700 if (node->idtype & FINSH_IDTYPE_ADDRESS) in finsh_compile()
706 switch (node->data_type) in finsh_compile()
733 if (finsh_node_sibling(node) != NULL) in finsh_compile()
734 finsh_compile(finsh_node_sibling(node)); in finsh_compile()
740 static int finsh_type_check(struct finsh_node* node, uint8_t is_addr) in finsh_type_check() argument
742 if (node != NULL) in finsh_type_check()
745 if (node->node_type == FINSH_NODE_SYS_ASSIGN || in finsh_type_check()
746 node->node_type == FINSH_NODE_SYS_PREINC || in finsh_type_check()
747 node->node_type == FINSH_NODE_SYS_PREDEC || in finsh_type_check()
748 node->node_type == FINSH_NODE_SYS_GETADDR) in finsh_type_check()
751 finsh_type_check(finsh_node_child(node), FINSH_IDTYPE_ADDRESS); in finsh_type_check()
753 else if (node->node_type == FINSH_NODE_SYS_GETVALUE && is_addr) in finsh_type_check()
756 finsh_type_check(finsh_node_child(node), 0); in finsh_type_check()
761 finsh_type_check(finsh_node_child(node), is_addr); in finsh_type_check()
765 finsh_type_check(finsh_node_sibling(node), FINSH_NODE_VALUE); in finsh_type_check()
770 if (node->idtype != FINSH_IDTYPE_SYSCALL) node->idtype |= is_addr; in finsh_type_check()
772 if (finsh_node_child(node) != NULL) in finsh_type_check()
774 node->data_type = finsh_node_child(node)->data_type; in finsh_type_check()
778 if (node->node_type == FINSH_NODE_ID) in finsh_type_check()
780 if (node->idtype & FINSH_IDTYPE_VAR) in finsh_type_check()
784 var = node->id.var; in finsh_type_check()
790 node->data_type = FINSH_DATA_TYPE_VOID; in finsh_type_check()
795 node->data_type = FINSH_DATA_TYPE_BYTE; in finsh_type_check()
800 node->data_type = FINSH_DATA_TYPE_WORD; in finsh_type_check()
807 node->data_type = FINSH_DATA_TYPE_DWORD; in finsh_type_check()
815 node->data_type = FINSH_DATA_TYPE_DWORD; in finsh_type_check()
824 else if (node->idtype & FINSH_IDTYPE_SYSVAR) in finsh_type_check()
828 sysvar = node->id.sysvar; in finsh_type_check()
834 node->data_type = FINSH_DATA_TYPE_VOID; in finsh_type_check()
839 node->data_type = FINSH_DATA_TYPE_BYTE; in finsh_type_check()
844 node->data_type = FINSH_DATA_TYPE_WORD; in finsh_type_check()
851 node->data_type = FINSH_DATA_TYPE_DWORD; in finsh_type_check()
859 node->data_type = FINSH_DATA_TYPE_DWORD; in finsh_type_check()
869 else if (node->node_type == FINSH_NODE_VALUE_CHAR) in finsh_type_check()
871 node->data_type = FINSH_DATA_TYPE_BYTE; in finsh_type_check()
873 else if (node->node_type == FINSH_NODE_VALUE_INT || in finsh_type_check()
874 node->node_type == FINSH_NODE_VALUE_LONG || in finsh_type_check()
875 node->node_type == FINSH_NODE_VALUE_STRING || in finsh_type_check()
876 node->node_type == FINSH_NODE_VALUE_NULL) in finsh_type_check()
878 node->data_type = FINSH_DATA_TYPE_DWORD; in finsh_type_check()
884 int finsh_compiler_run(struct finsh_node* node) in finsh_compiler_run() argument
889 finsh_type_check(node, FINSH_NODE_VALUE); in finsh_compiler_run()
900 sibling = node; in finsh_compiler_run()