oxc icon indicating copy to clipboard operation
oxc copied to clipboard

feat(data_structures): add `CodeBuffer::*_unchecked_cap` methods

Open overlookmotel opened this issue 9 months ago • 4 comments

Add 3 methods to CodeBuffer:

  • print_byte_unchecked_cap
  • print_bytes_unchecked_cap
  • print_str_unchecked_cap

All 3 are unsafe methods which require caller to ensure there is sufficient capacity in the buffer. This allows minimizing bounds checks when pushing multiple bytes sequences to the buffer.

let mut buf = CodeBuffer::new();

let s: &str = "Hello, ";
let b: &[u8] = b"world";
let c: u8 = b'!';

buf.reserve(s.len() + b.len() + 1);

// No bounds checks.
// SAFETY: Have reserved sufficient capacity
unsafe {
    buf.print_str_unchecked_cap(s);
    buf.print_bytes_unchecked_cap(b);
    buf.print_byte_unchecked_cap(c);
}

overlookmotel avatar Mar 27 '25 10:03 overlookmotel


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • 0-merge - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

overlookmotel avatar Mar 27 '25 10:03 overlookmotel

CodSpeed Instrumentation Performance Report

Merging #10075 will not alter performance

Comparing 03-27-feat_data_structures_add_codebuffer__unchecked_cap_methods (d53e323) with main (5e14fe9)

Summary

✅ 33 untouched benchmarks

codspeed-hq[bot] avatar Mar 27 '25 10:03 codspeed-hq[bot]

I wrote these originally to use in #10046, but turns out they're unnecessary there. But these are still useful APIs, so I think worthwhile adding them.

overlookmotel avatar Mar 27 '25 16:03 overlookmotel

I'm not keen to add code that's never going to be used though. Do we have scenarios for these 3 methods?

Boshen avatar Mar 28 '25 04:03 Boshen