Ejemplo n.º 1
0
static void recover(Streader* sr, int64_t pos)
{
    rassert(sr != NULL);
    rassert(pos <= sr->pos);

    Streader_clear_error(sr);
    sr->pos = pos;

    return;
}
Ejemplo n.º 2
0
bool Streader_try_match_char(Streader* sr, char ch)
{
    rassert(sr != NULL);
    rassert(!Streader_is_error_set(sr));

    const int64_t start_pos = sr->pos;
    const bool success = Streader_match_char(sr, ch);
    if (!success)
    {
        Streader_clear_error(sr);
        sr->pos = start_pos;
    }

    return success;
}
Ejemplo n.º 3
0
static bool Streader_try_match_char_seq(Streader* sr, const char* seq)
{
    assert(sr != NULL);
    assert(!Streader_is_error_set(sr));
    assert(seq != NULL);

    const size_t start_pos = sr->pos;
    const bool success = Streader_match_char_seq(sr, seq);
    if (!success)
    {
        Streader_clear_error(sr);
        sr->pos = start_pos;
    }

    return success;
}
Ejemplo n.º 4
0
END_TEST


START_TEST(Matching_wrong_characters_fails)
{
    Streader* sr = init_with_cstr("1");

    fail_if(Streader_match_char(sr, '2'),
            "Matched '2' successfully in \"1\"");
    fail_if(!Streader_is_error_set(sr),
            "No error set after a failed match");
    fail_if(Streader_match_char(sr, '1'),
            "Match succeeded after an error");

    Streader_clear_error(sr);
    fail_if(Streader_is_error_set(sr),
            "Streader_clear_error did not remove Streader error");
    fail_if(!Streader_match_char(sr, '1'),
            "Correct match did not succeed after a cleared failure");
}