Port of `stripCStyle(src, /*allowSingleQuoteStrings*/ false)`: `/* */` and `//` comments blanked to spaces (newlines preserved), `"` and backtick string interiors skipped verbatim (backtick spans lines — the JS helper treats it as a template literal even for C), `'` NOT special. Blanking is per UTF-16 CODE UNIT (one space per BMP char, two per astral char), so the result equals the JS stripper's
(src: &[u8])
| 208 | /// see, and the strip differential oracle pins byte equality directly. |
| 209 | /// (Comment boundaries — `/*`, `*/`, `//`, quotes, `\n` — are all ASCII, so |
| 210 | /// the state machine's byte positions always land on char boundaries.) |
| 211 | pub fn strip_c(src: &[u8]) -> Vec<u8> { |
| 212 | let n = src.len(); |
| 213 | let mut out = Vec::with_capacity(n); |
| 214 | let mut copied = 0usize; // src[..copied] already emitted |
| 215 | let mut i = 0; |
| 216 | { |
| 217 | let mut blank_to = |out: &mut Vec<u8>, start: usize, end: usize| { |
| 218 | out.extend_from_slice(&src[copied..start]); |
| 219 | emit_blank(out, &src[start..end]); |
| 220 | copied = end; |
| 221 | }; |
| 222 | while i < n { |
| 223 | let c = src[i]; |
| 224 | let c2 = if i + 1 < n { src[i + 1] } else { 0 }; |
| 225 | if c == b'/' && c2 == b'*' { |
| 226 | let start = i; |
| 227 | i += 2; |
| 228 | while i < n && !(src[i] == b'*' && i + 1 < n && src[i + 1] == b'/') { |
| 229 | i += 1; |
| 230 | } |
| 231 | if i < n { |
| 232 | i += 2; |
| 233 | } |
| 234 | blank_to(&mut out, start, i.min(n)); |
| 235 | continue; |
| 236 | } |
| 237 | if c == b'/' && c2 == b'/' { |
| 238 | let start = i; |
| 239 | while i < n && src[i] != b'\n' { |
| 240 | i += 1; |
| 241 | } |
| 242 | blank_to(&mut out, start, i); |
| 243 | continue; |
| 244 | } |
| 245 | if c == b'"' || c == b'`' { |
| 246 | let quote = c; |
| 247 | i += 1; |
| 248 | while i < n && src[i] != quote { |
| 249 | if src[i] == b'\\' && i + 1 < n { |
| 250 | i += 2; |
| 251 | continue; |
| 252 | } |
| 253 | if quote != b'`' && src[i] == b'\n' { |
| 254 | break; |
| 255 | } |
| 256 | i += 1; |
| 257 | } |
| 258 | if i < n && src[i] == quote { |
| 259 | i += 1; |
| 260 | } |
| 261 | continue; |
| 262 | } |
| 263 | i += 1; |
| 264 | } |
| 265 | } |
| 266 | out.extend_from_slice(&src[copied..]); |
| 267 | out |