static void validate_block(Validator *val) { int block_id = val->cur_mark[1]; switch (block_id) { case 'a': { MVMuint16 index; ensure_op(val, MVM_OP_prepargs); validate_operands(val); index = GET_UI16(val->cur_op, -2); val->cur_call = val->cu->body.callsites[index]; val->cur_arg = 0; val->expected_named_arg = 0; val->remaining_positionals = val->cur_call->num_pos; break; } default: fail(val, MSG(val, "unknown instruction block '%c'"), block_id); } while (val->cur_op < val->bc_end) { int type, id; read_op(val); type = val->cur_mark[0]; id = val->cur_mark[1]; if (id != block_id) fail(val, MSG(val, "expected instruction marked '%c' but got '%c'"), block_id, id); switch (type) { case MARK_body: break; case MARK_tail: goto terminate_block; default: fail_illegal_mark(val); } switch (block_id) { case 'a': validate_operands(val); validate_arg(val); break; } } terminate_block: switch (block_id) { case 'a': validate_operands(val); ensure_no_remaining_positionals(val); break; } }
int search_count_arg(char *args[], int def) { int i = 0; while (args[i] != NULL) { char *arg = args[i]; if (validate_arg(arg) == TRUE) { return atoi(arg); } i++; } return def; }