Per #67's win: V8 inlining of parse() into callers matters. Can we go further? Try combining cache-lookup into the return path so parse() body is just 'return cache.get(s) || parseSlow(s)'. This keeps the wrapper at 1-2 AST nodes. Risk: || does wrong thing for NaN. Use conditional ? :. Must maintain fingerprints. Target: 0.5-1.5ms additional.
Per #67's win: V8 inlining of parse() into callers matters. Can we go further? Try combining cache-lookup into the return path so parse() body is just 'return cache.get(s) || parseSlow(s)'. This keeps the wrapper at 1-2 AST nodes. Risk: || does wrong thing for NaN. Use conditional ? :. Must maintain fingerprints. Target: 0.5-1.5ms additional.