Remove use of wuffs_base__token__link_prev
diff --git a/example/jsonptr/jsonptr.cc b/example/jsonptr/jsonptr.cc
index f5d72ab..e4aa8a7 100644
--- a/example/jsonptr/jsonptr.cc
+++ b/example/jsonptr/jsonptr.cc
@@ -838,7 +838,7 @@
}
const char* //
-handle_token(wuffs_base__token t) {
+handle_token(wuffs_base__token t, bool start_of_token_chain) {
do {
int64_t vbc = t.value_base_category();
uint64_t vbd = t.value_base_detail();
@@ -888,7 +888,7 @@
// Write preceding whitespace and punctuation, if it wasn't ']', '}' or a
// continuation of a multi-token chain.
- if (!t.link_prev()) {
+ if (start_of_token_chain) {
if (g_ctx == context::in_dict_after_key) {
TRY(write_dst(": ", g_flags.compact_output ? 1 : 2));
} else if (g_ctx != context::none) {
@@ -962,7 +962,7 @@
return nullptr;
case WUFFS_BASE__TOKEN__VBC__STRING:
- if (!t.link_prev()) {
+ if (start_of_token_chain) {
TRY(write_dst("\"", 1));
g_query.restart_fragment(in_dict_before_key() &&
g_query.is_at(g_depth));
@@ -986,7 +986,7 @@
goto after_value;
case WUFFS_BASE__TOKEN__VBC__UNICODE_CODE_POINT:
- if (!t.link_prev() || !t.link_next()) {
+ if (!t.link_next()) {
return "main: internal error: unexpected unlinked token";
}
TRY(handle_unicode_code_point(vbd));
@@ -1033,6 +1033,7 @@
main1(int argc, char** argv) {
TRY(initialize_globals(argc, argv));
+ bool start_of_token_chain = false;
while (true) {
wuffs_base__status status = g_dec.decode_tokens(
&g_tok, &g_src,
@@ -1048,10 +1049,12 @@
// Skip filler tokens (e.g. whitespace).
if (t.value() == 0) {
+ start_of_token_chain = !t.link_next();
continue;
}
- const char* z = handle_token(t);
+ const char* z = handle_token(t, start_of_token_chain);
+ start_of_token_chain = !t.link_next();
if (z == nullptr) {
continue;
} else if (z == g_eod) {
diff --git a/fuzz/c/std/json_fuzzer.c b/fuzz/c/std/json_fuzzer.c
index 9ccbbe1..c3ae16e 100644
--- a/fuzz/c/std/json_fuzzer.c
+++ b/fuzz/c/std/json_fuzzer.c
@@ -85,7 +85,6 @@
const char* //
fuzz_one_token(wuffs_base__token t,
- wuffs_base__token* prev_token,
wuffs_base__io_buffer* src,
size_t* ti,
stack_element* stack,
@@ -102,11 +101,6 @@
return "fuzz: internal error: token high bit was not zero";
}
- if (wuffs_base__token__link_next(prev_token) !=
- (wuffs_base__token__link_prev(&t))) {
- return "fuzz: internal error: inconsistent link bits";
- }
-
int64_t vbc = wuffs_base__token__value_base_category(&t);
uint64_t vbd = wuffs_base__token__value_base_detail(&t);
@@ -290,7 +284,7 @@
}),
});
- wuffs_base__token prev_token = wuffs_base__make_token(0);
+ wuffs_base__token final_token = wuffs_base__make_token(0);
uint32_t no_progress_count = 0;
stack_element stack[STACK_SIZE];
@@ -335,12 +329,11 @@
while (tok.meta.ri < tok.meta.wi) { // Inner loop.
wuffs_base__token t = tok.data.ptr[tok.meta.ri++];
- const char* z =
- fuzz_one_token(t, &prev_token, &src, &ti, &stack[0], &depth);
+ const char* z = fuzz_one_token(t, &src, &ti, &stack[0], &depth);
if (z != NULL) {
return z;
}
- prev_token = t;
+ final_token = t;
} // Inner loop.
// ----
@@ -375,7 +368,7 @@
if (depth != 0) {
return "fuzz: internal error: decoded OK but final depth was not zero";
- } else if (wuffs_base__token__link_next(&prev_token)) {
+ } else if (wuffs_base__token__link_next(&final_token)) {
return "fuzz: internal error: decoded OK but final token had link_next";
}
return NULL;