Esempio n. 1
0
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;
    }
}
Esempio n. 2
0
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;
}