int check_member_stmt(is_member_stmt* node, bool first_pass) { int errors = 0; switch (node->type) { case t_member_stmt_var: if (first_pass) errors += check_var_stmt(node->data.var, true); break; case t_member_stmt_func_def: errors += check_func_def(node->data.func_def, first_pass); break; } return errors; }
/** * Given the first token to an input line, will attempt to parse it and * process the related instruction. * * @param tok The first token on the input line, this is expected to be * a clean (non-whitespace) token. * @param program Contains all current program information gathered so far, * primarily used for error reporting. */ void process_token(char *tok, struct program *program){ // check for comments if(check_comment(tok, program)){ process_comment(program); return; } // process constant definitions else if(check_const_def(tok, program)){ process_const_def(tok, program); return; } // Function definitions else if(check_func_def(tok, program)){ process_func_def(tok, program); return; } // check if we have a label else if(check_label_def(tok, program)){ process_label_def(tok, program); return; } // the first token should contain our instruction else if(!strcmp(tok, "HALT")){ process_instruction(program, HALT, HALT_F , 0); } else if(!strcmp(tok, "NOT")){ process_instruction(program, NOT, NOT_F, 0); } else if(!strcmp(tok, "SHL")){ process_instruction(program, SHL, SHL_F, 0); } else if(!strcmp(tok, "SHR")){ process_instruction(program, SHR, SHR_F, 0); } else if(!strcmp(tok, "OR")){ process_instruction(program, OR, OR_F, 0); } else if(!strcmp(tok, "AND")){ process_instruction(program, AND, AND_F, 0); } else if(!strcmp(tok, "ADD")){ process_instruction(program, ADD, ADD_F, 0); } else if(!strcmp(tok, "SW")){ process_instruction(program, SW, SW_F, 0); } else if(!strcmp(tok, "SI")){ process_instruction(program, SI, SI_F, 0); } else if(!strcmp(tok, "LW")){ process_instruction(program, LW, LW_F, 0); } else if(!strcmp(tok, "LI")){ process_instruction(program, LI, LI_F, 0); } else if(!strcmp(tok, "BEZ")){ process_instruction(program, BEZ, BEZ_F, 0); } else if(!strcmp(tok, "ROT")){ process_instruction(program, ROT, ROT_F, 0); } else if(!strcmp(tok, "ROT1")){ process_instruction(program, ROT1, ROT1_F, 0); } else if(!strcmp(tok, "JMP")){ process_instruction(program, JMP, JMP_F, 0); } else if(!strcmp(tok, "NOP")){ process_instruction(program, NOP, NOP_F, 0); } else if(!strcmp(tok, "LFSJ")){ process_instruction(program, LFSJ, LFSJ_F, 0); } else if(!strcmp(tok, "STJ")){ process_instruction(program, STJ, STJ_F, 0); } // looks like a bad opcode else{ #ifdef DEBUG fprintf(stderr, "BAD CODE '%s'\n", tok); #endif print_unexpected_ident(tok, program); } }