Add base.token_decoder.workbuf_len
diff --git a/example/jsonfindptrs/jsonfindptrs.cc b/example/jsonfindptrs/jsonfindptrs.cc
index a21a2ce..73ed7ad 100644
--- a/example/jsonfindptrs/jsonfindptrs.cc
+++ b/example/jsonfindptrs/jsonfindptrs.cc
@@ -233,6 +233,9 @@
// ----
+#define WORK_BUFFER_ARRAY_SIZE \
+ WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+
#ifndef SRC_BUFFER_ARRAY_SIZE
#define SRC_BUFFER_ARRAY_SIZE (4 * 1024)
#endif
@@ -305,7 +308,10 @@
return Result(m_status.message());
}
- m_status = m_dec.decode_tokens(&m_tok, &m_src);
+ m_status =
+ m_dec.decode_tokens(&m_tok, &m_src,
+ wuffs_base__make_slice_u8(
+ m_work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
}
wuffs_base__token t = m_tok.data.ptr[m_tok.meta.ri];
@@ -355,6 +361,12 @@
wuffs_base__token m_tok_array[TOKEN_BUFFER_ARRAY_SIZE];
uint8_t m_src_array[SRC_BUFFER_ARRAY_SIZE];
+#if WORK_BUFFER_ARRAY_SIZE > 0
+ uint8_t m_work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+#else
+ // Not all C/C++ compilers support 0-length arrays.
+ uint8_t m_work_buffer_array[1];
+#endif
wuffs_json__decoder m_dec;
};
diff --git a/example/jsonptr/jsonptr.cc b/example/jsonptr/jsonptr.cc
index a820961..e9ba151 100644
--- a/example/jsonptr/jsonptr.cc
+++ b/example/jsonptr/jsonptr.cc
@@ -232,6 +232,17 @@
// ----
+// Wuffs allows either statically or dynamically allocated work buffers. This
+// program exercises static allocation.
+#define WORK_BUFFER_ARRAY_SIZE \
+ WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+#if WORK_BUFFER_ARRAY_SIZE > 0
+uint8_t work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+#else
+// Not all C/C++ compilers support 0-length arrays.
+uint8_t work_buffer_array[1];
+#endif
+
bool sandboxed = false;
int input_file_descriptor = 0; // A 0 default means stdin.
@@ -1013,7 +1024,9 @@
TRY(initialize_globals(argc, argv));
while (true) {
- wuffs_base__status status = dec.decode_tokens(&tok, &src);
+ wuffs_base__status status = dec.decode_tokens(
+ &tok, &src,
+ wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
while (tok.meta.ri < tok.meta.wi) {
wuffs_base__token t = tok.data.ptr[tok.meta.ri++];
diff --git a/fuzz/c/std/json_fuzzer.c b/fuzz/c/std/json_fuzzer.c
index ae377be..a5bb0be 100644
--- a/fuzz/c/std/json_fuzzer.c
+++ b/fuzz/c/std/json_fuzzer.c
@@ -62,6 +62,17 @@
#define TOK_BUFFER_ARRAY_SIZE 4096
#define STACK_SIZE (WUFFS_JSON__DECODER_DEPTH_MAX_INCL + 1)
+// Wuffs allows either statically or dynamically allocated work buffers. This
+// program exercises static allocation.
+#define WORK_BUFFER_ARRAY_SIZE \
+ WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+#if WORK_BUFFER_ARRAY_SIZE > 0
+uint8_t work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+#else
+// Not all C/C++ compilers support 0-length arrays.
+uint8_t work_buffer_array[1];
+#endif
+
// Each stack element is 1 byte. The low 7 bits denote the container:
// - 0x01 means no container: we are at the top level.
// - 0x02 means a [] list.
@@ -297,7 +308,9 @@
size_t old_src_ri = src.meta.ri;
size_t ti = old_src_ri;
- status = wuffs_json__decoder__decode_tokens(&dec, &tok, &src);
+ status = wuffs_json__decoder__decode_tokens(
+ &dec, &tok, &src,
+ wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
if ((tok.data.len < tok.meta.wi) || //
(tok.meta.wi < tok.meta.ri) || //
(tok.meta.ri != old_tok_ri)) {
@@ -386,7 +399,9 @@
});
while (true) {
- status = wuffs_json__decoder__decode_tokens(&dec, &tok, full_src);
+ status = wuffs_json__decoder__decode_tokens(
+ &dec, &tok, full_src,
+ wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
if (status.repr == NULL) {
break;
diff --git a/fuzz/c/std/zlib_fuzzer.c b/fuzz/c/std/zlib_fuzzer.c
index 4835c6e..cf7eb66 100644
--- a/fuzz/c/std/zlib_fuzzer.c
+++ b/fuzz/c/std/zlib_fuzzer.c
@@ -101,10 +101,7 @@
dst.meta.wi = 0;
status =
wuffs_zlib__decoder__transform_io(&dec, &dst, src,
- ((wuffs_base__slice_u8){
- .ptr = work_buffer_array,
- .len = WORK_BUFFER_ARRAY_SIZE,
- }));
+ wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
if (status.repr != wuffs_base__suspension__short_write) {
break;
}
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index af5503b..06ca6e8 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -422,7 +422,8 @@
// ---- token_decoder
- "token_decoder.decode_tokens?(dst: token_writer, src: io_reader)",
+ "token_decoder.decode_tokens?(dst: token_writer, src: io_reader, workbuf: slice u8)",
+ "token_decoder.workbuf_len() range_ii_u64",
}
// The "T1" and "T2" types here are placeholders for generic "slice T" or
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 9598c16..ca1e98e 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -4039,7 +4039,9 @@
typedef struct {
wuffs_base__status (*decode_tokens)(void* self,
wuffs_base__token_buffer* a_dst,
- wuffs_base__io_buffer* a_src);
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf);
+ wuffs_base__range_ii_u64 (*workbuf_len)(const void* self);
} wuffs_base__token_decoder__func_ptrs;
typedef struct wuffs_base__token_decoder__struct wuffs_base__token_decoder;
@@ -4047,7 +4049,11 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_base__token_decoder__decode_tokens(wuffs_base__token_decoder* self,
wuffs_base__token_buffer* a_dst,
- wuffs_base__io_buffer* a_src);
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf);
+
+WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64 //
+wuffs_base__token_decoder__workbuf_len(const wuffs_base__token_decoder* self);
#if defined(__cplusplus) || defined(WUFFS_IMPLEMENTATION)
@@ -4061,8 +4067,16 @@
#ifdef __cplusplus
inline wuffs_base__status //
- decode_tokens(wuffs_base__token_buffer* a_dst, wuffs_base__io_buffer* a_src) {
- return wuffs_base__token_decoder__decode_tokens(this, a_dst, a_src);
+ decode_tokens(wuffs_base__token_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf) {
+ return wuffs_base__token_decoder__decode_tokens(this, a_dst, a_src,
+ a_workbuf);
+ }
+
+ inline wuffs_base__range_ii_u64 //
+ workbuf_len() const {
+ return wuffs_base__token_decoder__workbuf_len(this);
}
#endif // __cplusplus
@@ -5908,6 +5922,8 @@
// ---------------- Public Consts
+#define WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE 0
+
#define WUFFS_JSON__DECODER_DEPTH_MAX_INCL 1024
#define WUFFS_JSON__DECODER_DST_TOKEN_BUFFER_LENGTH_MIN_INCL 1
@@ -5982,10 +5998,14 @@
uint32_t a_quirk,
bool a_enabled);
+WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64 //
+wuffs_json__decoder__workbuf_len(const wuffs_json__decoder* self);
+
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_json__decoder__decode_tokens(wuffs_json__decoder* self,
wuffs_base__token_buffer* a_dst,
- wuffs_base__io_buffer* a_src);
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf);
// ---------------- Struct Definitions
@@ -6095,9 +6115,16 @@
return wuffs_json__decoder__set_quirk_enabled(this, a_quirk, a_enabled);
}
+ inline wuffs_base__range_ii_u64 //
+ workbuf_len() const {
+ return wuffs_json__decoder__workbuf_len(this);
+ }
+
inline wuffs_base__status //
- decode_tokens(wuffs_base__token_buffer* a_dst, wuffs_base__io_buffer* a_src) {
- return wuffs_json__decoder__decode_tokens(this, a_dst, a_src);
+ decode_tokens(wuffs_base__token_buffer* a_dst,
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf) {
+ return wuffs_json__decoder__decode_tokens(this, a_dst, a_src, a_workbuf);
}
#endif // __cplusplus
@@ -7620,7 +7647,8 @@
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_base__token_decoder__decode_tokens(wuffs_base__token_decoder* self,
wuffs_base__token_buffer* a_dst,
- wuffs_base__io_buffer* a_src) {
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
@@ -7637,7 +7665,7 @@
if (v->vtable_name == wuffs_base__token_decoder__vtable_name) {
const wuffs_base__token_decoder__func_ptrs* func_ptrs =
(const wuffs_base__token_decoder__func_ptrs*)(v->function_pointers);
- return (*func_ptrs->decode_tokens)(self, a_dst, a_src);
+ return (*func_ptrs->decode_tokens)(self, a_dst, a_src, a_workbuf);
} else if (v->vtable_name == NULL) {
break;
}
@@ -7647,6 +7675,32 @@
return wuffs_base__make_status(wuffs_base__error__bad_vtable);
}
+WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64 //
+wuffs_base__token_decoder__workbuf_len(const wuffs_base__token_decoder* self) {
+ if (!self) {
+ return wuffs_base__utility__empty_range_ii_u64();
+ }
+ if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
+ (self->private_impl.magic != WUFFS_BASE__DISABLED)) {
+ return wuffs_base__utility__empty_range_ii_u64();
+ }
+
+ const wuffs_base__vtable* v = &self->private_impl.first_vtable;
+ int i;
+ for (i = 0; i < 63; i++) {
+ if (v->vtable_name == wuffs_base__token_decoder__vtable_name) {
+ const wuffs_base__token_decoder__func_ptrs* func_ptrs =
+ (const wuffs_base__token_decoder__func_ptrs*)(v->function_pointers);
+ return (*func_ptrs->workbuf_len)(self);
+ } else if (v->vtable_name == NULL) {
+ break;
+ }
+ v++;
+ }
+
+ return wuffs_base__utility__empty_range_ii_u64();
+}
+
// ---------------- Images
const uint32_t wuffs_base__pixel_format__bits_per_channel[16] = {
@@ -20356,8 +20410,11 @@
wuffs_json__decoder__func_ptrs_for__wuffs_base__token_decoder = {
(wuffs_base__status(*)(void*,
wuffs_base__token_buffer*,
- wuffs_base__io_buffer*))(
+ wuffs_base__io_buffer*,
+ wuffs_base__slice_u8))(
&wuffs_json__decoder__decode_tokens),
+ (wuffs_base__range_ii_u64(*)(const void*))(
+ &wuffs_json__decoder__workbuf_len),
};
// ---------------- Initializer Implementations
@@ -20468,12 +20525,28 @@
return wuffs_base__make_empty_struct();
}
+// -------- func json.decoder.workbuf_len
+
+WUFFS_BASE__MAYBE_STATIC wuffs_base__range_ii_u64 //
+wuffs_json__decoder__workbuf_len(const wuffs_json__decoder* self) {
+ if (!self) {
+ return wuffs_base__utility__empty_range_ii_u64();
+ }
+ if ((self->private_impl.magic != WUFFS_BASE__MAGIC) &&
+ (self->private_impl.magic != WUFFS_BASE__DISABLED)) {
+ return wuffs_base__utility__empty_range_ii_u64();
+ }
+
+ return wuffs_base__utility__empty_range_ii_u64();
+}
+
// -------- func json.decoder.decode_tokens
WUFFS_BASE__MAYBE_STATIC wuffs_base__status //
wuffs_json__decoder__decode_tokens(wuffs_json__decoder* self,
wuffs_base__token_buffer* a_dst,
- wuffs_base__io_buffer* a_src) {
+ wuffs_base__io_buffer* a_src,
+ wuffs_base__slice_u8 a_workbuf) {
if (!self) {
return wuffs_base__make_status(wuffs_base__error__bad_receiver);
}
diff --git a/script/print-json-token-debug-format.c b/script/print-json-token-debug-format.c
index ede793c..1a370ba 100644
--- a/script/print-json-token-debug-format.c
+++ b/script/print-json-token-debug-format.c
@@ -84,6 +84,17 @@
// program to generate a stand-alone C++ file.
#include "../release/c/wuffs-unsupported-snapshot.c"
+// Wuffs allows either statically or dynamically allocated work buffers. This
+// program exercises static allocation.
+#define WORK_BUFFER_ARRAY_SIZE \
+ WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+#if WORK_BUFFER_ARRAY_SIZE > 0
+uint8_t work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
+#else
+// Not all C/C++ compilers support 0-length arrays.
+uint8_t work_buffer_array[1];
+#endif
+
#ifndef SRC_BUFFER_ARRAY_SIZE
#define SRC_BUFFER_ARRAY_SIZE (64 * 1024 * 1024)
#endif
@@ -251,8 +262,9 @@
uint64_t pos = 0;
while (true) {
- wuffs_base__status status =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src);
+ wuffs_base__status status = wuffs_json__decoder__decode_tokens(
+ &dec, &tok, &src,
+ wuffs_base__make_slice_u8(work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
while (tok.meta.ri < tok.meta.wi) {
wuffs_base__token* t = &tok.data.ptr[tok.meta.ri++];
diff --git a/std/json/common_consts.wuffs b/std/json/common_consts.wuffs
index f92383d..10c7efe 100644
--- a/std/json/common_consts.wuffs
+++ b/std/json/common_consts.wuffs
@@ -21,6 +21,8 @@
pri status "#internal error: inconsistent I/O"
+pub const decoder_workbuf_len_max_incl_worst_case base.u64 = 0
+
// decoder_depth_max_incl is the maximum supported recursion depth: how deeply
// nested [] arrays and {} objects can be.
//
diff --git a/std/json/decode_json.wuffs b/std/json/decode_json.wuffs
index c3db53c..ddae591 100644
--- a/std/json/decode_json.wuffs
+++ b/std/json/decode_json.wuffs
@@ -32,6 +32,8 @@
allow_leading_ubom : base.bool,
end_of_data : base.bool,
+
+ util : base.utility,
)(
// stack is conceptually an array of bits, implemented as an array of u32.
// The N'th bit being 0 or 1 means that we're in an array or object, where
@@ -100,7 +102,11 @@
}
}
-pub func decoder.decode_tokens?(dst: base.token_writer, src: base.io_reader) {
+pub func decoder.workbuf_len() base.range_ii_u64 {
+ return this.util.empty_range_ii_u64()
+}
+
+pub func decoder.decode_tokens?(dst: base.token_writer, src: base.io_reader, workbuf: slice base.u8) {
var vminor : base.u32[..= 0xFF_FFFF]
var number_length : base.u32[..= 0x3FF]
var number_status : base.u32[..= 0x3]
diff --git a/test/c/std/json.c b/test/c/std/json.c
index 7ec5525..f54a1ed 100644
--- a/test/c/std/json.c
+++ b/test/c/std/json.c
@@ -870,8 +870,8 @@
make_limited_token_writer(*tok, wlimit);
wuffs_base__io_buffer limited_src = make_limited_reader(*src, rlimit);
- wuffs_base__status status =
- wuffs_json__decoder__decode_tokens(&dec, &limited_tok, &limited_src);
+ wuffs_base__status status = wuffs_json__decoder__decode_tokens(
+ &dec, &limited_tok, &limited_src, global_work_slice);
tok->meta.wi += limited_tok.meta.wi;
src->meta.ri += limited_src.meta.ri;
@@ -905,14 +905,15 @@
wuffs_base__make_token_buffer_writer(global_have_token_slice);
wuffs_base__io_buffer src = wuffs_base__make_io_buffer_reader(
wuffs_base__make_slice_u8(src_ptr, src_len), true);
- CHECK_STATUS("decode_tokens",
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src));
+ CHECK_STATUS("decode_tokens", wuffs_json__decoder__decode_tokens(
+ &dec, &tok, &src, global_work_slice));
if (src.meta.ri != 3) {
RETURN_FAIL("src.meta.ri: have %zu, want 3", src.meta.ri);
}
const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ wuffs_json__decoder__decode_tokens(&dec, &tok, &src, global_work_slice)
+ .repr;
if (have != wuffs_base__note__end_of_data) {
RETURN_FAIL("decode_tokens: have \"%s\", want \"%s\"", have,
wuffs_base__note__end_of_data);
@@ -1016,8 +1017,9 @@
wuffs_base__make_token_buffer_writer(global_have_token_slice);
wuffs_base__io_buffer src =
wuffs_base__make_io_buffer_reader(src_data, closed != 0);
- const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have = wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice)
+ .repr;
size_t total_length = 0;
while (tok.meta.ri < tok.meta.wi) {
@@ -1161,7 +1163,8 @@
wuffs_base__make_token_buffer_writer(global_have_token_slice);
wuffs_base__io_buffer src =
wuffs_base__make_io_buffer_reader(src_data, closed != 0);
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src);
+ wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice);
size_t have = 0;
while (tok.meta.ri < tok.meta.wi) {
@@ -1257,8 +1260,9 @@
strlen(test_cases[tc].str)),
true);
- const char* have_status_repr =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have_status_repr = wuffs_json__decoder__decode_tokens(
+ &dec, &tok, &src, global_work_slice)
+ .repr;
const char* want_status_repr =
q ? NULL : wuffs_json__error__bad_backslash_escape;
if (have_status_repr != want_status_repr) {
@@ -1331,7 +1335,8 @@
wuffs_base__io_buffer src =
wuffs_base__make_io_buffer_reader(src_slice, true);
const char* have_status_repr =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ wuffs_json__decoder__decode_tokens(&dec, &tok, &src, global_work_slice)
+ .repr;
if (have_status_repr != test_cases[tc].want_status_repr) {
RETURN_FAIL("tc=%d: decode_tokens: have \"%s\", want \"%s\"", tc,
have_status_repr, test_cases[tc].want_status_repr);
@@ -1404,8 +1409,9 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have = wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice)
+ .repr;
const char* want =
(test_cases[tc].want[q] != '-') ? NULL : wuffs_json__error__bad_input;
if (have != want) {
@@ -1480,8 +1486,9 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have = wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice)
+ .repr;
const char* want =
(test_cases[tc].want[q] != '-') ? NULL : wuffs_json__error__bad_input;
if (have != want) {
@@ -1552,8 +1559,9 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have = wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice)
+ .repr;
const char* want =
(test_cases[tc].want[q] != '-') ? NULL : wuffs_json__error__bad_input;
if (have != want) {
@@ -1630,8 +1638,9 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have = wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice)
+ .repr;
const char* want =
(test_cases[tc].want[q] != '-') ? NULL : wuffs_json__error__bad_input;
if (have != want) {
@@ -1708,8 +1717,9 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- const char* have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src).repr;
+ const char* have = wuffs_json__decoder__decode_tokens(&dec, &tok, &src,
+ global_work_slice)
+ .repr;
const char* want =
(test_cases[tc].want[q] != '-') ? NULL : wuffs_json__error__bad_input;
if (have != want) {
@@ -1807,8 +1817,8 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- CHECK_STATUS("decode_tokens",
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src));
+ CHECK_STATUS("decode_tokens", wuffs_json__decoder__decode_tokens(
+ &dec, &tok, &src, global_work_slice));
uint64_t src_index = 0;
while (tok.meta.ri < tok.meta.wi) {
@@ -1941,7 +1951,7 @@
wuffs_base__make_slice_u8((void*)(test_cases[tc].str),
strlen(test_cases[tc].str)),
true);
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src);
+ wuffs_json__decoder__decode_tokens(&dec, &tok, &src, global_work_slice);
uint32_t have = fail;
uint64_t total_length = 0;
@@ -2033,8 +2043,8 @@
&dec, sizeof dec, WUFFS_VERSION,
WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
- wuffs_base__status have =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src);
+ wuffs_base__status have = wuffs_json__decoder__decode_tokens(
+ &dec, &tok, &src, global_work_slice);
const char* want =
(i > WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL)
? wuffs_json__error__unsupported_number_length
@@ -2134,7 +2144,7 @@
strlen(test_cases[tc].str)),
true);
wuffs_base__status have_status =
- wuffs_json__decoder__decode_tokens(&dec, &tok, &src);
+ wuffs_json__decoder__decode_tokens(&dec, &tok, &src, global_work_slice);
uint64_t total_length = 0;
size_t i;
diff --git a/test/c/testlib/testlib.c b/test/c/testlib/testlib.c
index 7a4ac1a..88da6a2 100644
--- a/test/c/testlib/testlib.c
+++ b/test/c/testlib/testlib.c
@@ -1124,8 +1124,8 @@
src.meta.closed = true;
}
- CHECK_STATUS("decode_tokens",
- wuffs_base__token_decoder__decode_tokens(b, &tok, &src));
+ CHECK_STATUS("decode_tokens", wuffs_base__token_decoder__decode_tokens(
+ b, &tok, &src, global_work_slice));
uint64_t pos = 0;
while (tok.meta.ri < tok.meta.wi) {