Add p_set_input_index()
This commit is contained in:
1 parent
b4d43d39f6
commit
1c74e747e1
14 files changed
+401
-2
No files matched your search
@@ -77,5 +77,33 @@ int main()
|
||||
p_context_delete(context);
|
||||
}
|
||||
|
||||
/* p_set_input_index() rewinds the lexer's byte cursor. Combined with
|
||||
* p_set_position(), it re-reads an earlier section of the input: both
|
||||
* tokens are lexed, then the cursor and text position are rewound to the
|
||||
* start so that the same tokens are produced again with the same reported
|
||||
* positions. */
|
||||
{
|
||||
char const * input = "ab";
|
||||
p_context_t * context = p_context_new((uint8_t const *)input, strlen(input));
|
||||
p_token_info_t token_info;
|
||||
size_t start_index = p_input_index(context);
|
||||
p_position_t start_position = p_position(context);
|
||||
assert_eq(0u, start_index);
|
||||
assert(p_lex(context, &token_info) == P_SUCCESS);
|
||||
assert_eq((size_t)TOKEN_a, (size_t)token_info.token);
|
||||
assert(p_lex(context, &token_info) == P_SUCCESS);
|
||||
assert_eq((size_t)TOKEN_b, (size_t)token_info.token);
|
||||
assert_eq(2u, p_input_index(context));
|
||||
/* Rewind and re-read from the start. */
|
||||
p_set_input_index(context, start_index);
|
||||
p_set_position(context, start_position);
|
||||
assert_eq(0u, p_input_index(context));
|
||||
assert(p_lex(context, &token_info) == P_SUCCESS);
|
||||
assert_eq((size_t)TOKEN_a, (size_t)token_info.token);
|
||||
assert_eq(1u, (size_t)token_info.position.row);
|
||||
assert_eq(1u, (size_t)token_info.position.col);
|
||||
p_context_delete(context);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user