Add perf comment to json.decoder.decode_string
diff --git a/std/json/decode_json.wuffs b/std/json/decode_json.wuffs
index 7ad5da4..c69bfc4 100644
--- a/std/json/decode_json.wuffs
+++ b/std/json/decode_json.wuffs
@@ -107,6 +107,13 @@
}
pub func decoder.decode_tokens?(dst: base.token_writer, src: base.io_reader, workbuf: slice base.u8) {
+ // This is a very, very long function, and it is tempting to refactor it.
+ // Be careful of performance impacts when doing so. For example, commit
+ // 86d3b89f "Factor out json.decoder.decode_string" pulled out a 500 line
+ // decode_string function, which was certainly cleaner structurally, but
+ // also regressed performance by 1.1x to 1.2x. For details, see
+ // https://github.com/google/wuffs/commit/86d3b89f9a6578d964a4b6d71e21dfc9bb702b44
+
var vminor : base.u32[..= 0xFF_FFFF]
var number_length : base.u32[..= 0x3FF]
var number_status : base.u32[..= 0x3]