mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-13 06:20:02 -04:00
slight cleanup
This commit is contained in:
parent
652ca15d62
commit
3948171dc6
2 changed files with 22 additions and 20 deletions
|
@ -49,7 +49,7 @@ enum RewriteType {
|
||||||
Replace { start: u32, end: u32, str: Bytes },
|
Replace { start: u32, end: u32, str: Bytes },
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dounrewrite(res: RewriteResult) -> Vec<u8> {
|
fn dounrewrite(res: &RewriteResult) -> Vec<u8> {
|
||||||
let js = res.js.as_slice();
|
let js = res.js.as_slice();
|
||||||
let mut map = Bytes::from(res.sourcemap.to_vec());
|
let mut map = Bytes::from(res.sourcemap.to_vec());
|
||||||
let rewrite_cnt = map.get_u32_le();
|
let rewrite_cnt = map.get_u32_le();
|
||||||
|
@ -80,23 +80,23 @@ fn dounrewrite(res: RewriteResult) -> Vec<u8> {
|
||||||
|
|
||||||
let mut out = BytesMut::with_capacity(res.js.len());
|
let mut out = BytesMut::with_capacity(res.js.len());
|
||||||
|
|
||||||
let mut lastpos: u32 = 0;
|
let mut cursor: u32 = 0;
|
||||||
|
|
||||||
for rewrite in rewrites {
|
for rewrite in rewrites {
|
||||||
match rewrite {
|
match rewrite {
|
||||||
RewriteType::Insert { pos, size } => {
|
RewriteType::Insert { pos, size } => {
|
||||||
out.extend_from_slice(&js[lastpos as usize..pos as usize]);
|
out.extend_from_slice(&js[cursor as usize..pos as usize]);
|
||||||
lastpos = pos + size;
|
cursor = pos + size;
|
||||||
}
|
}
|
||||||
RewriteType::Replace { start, end, str } => {
|
RewriteType::Replace { start, end, str } => {
|
||||||
out.extend_from_slice(&js[lastpos as usize..start as usize]);
|
out.extend_from_slice(&js[cursor as usize..start as usize]);
|
||||||
out.extend_from_slice(&str);
|
out.extend_from_slice(&str);
|
||||||
lastpos = end;
|
cursor = end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out.extend_from_slice(&js[lastpos as usize..]);
|
out.extend_from_slice(&js[cursor as usize..]);
|
||||||
|
|
||||||
out.to_vec()
|
out.to_vec()
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ fn main() -> Result<()> {
|
||||||
str::from_utf8(&res.js).context("failed to parse rewritten js")?
|
str::from_utf8(&res.js).context("failed to parse rewritten js")?
|
||||||
);
|
);
|
||||||
|
|
||||||
let unrewritten = dounrewrite(res);
|
let unrewritten = dounrewrite(&res);
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"unrewritten matches orig: {}",
|
"unrewritten matches orig: {}",
|
||||||
|
|
|
@ -426,8 +426,8 @@ impl<'alloc: 'data, 'data> JsChanges<'alloc, 'data> {
|
||||||
{
|
{
|
||||||
// using wrapping adds for perf, 4gb large files is really an edge case
|
// using wrapping adds for perf, 4gb large files is really an edge case
|
||||||
|
|
||||||
let mut offset = 0;
|
let mut cursor = 0;
|
||||||
let mut added = 0i32;
|
let mut offset = 0i32;
|
||||||
let mut buffer = Vec::with_capacity_in(js.len() * 2, self.alloc);
|
let mut buffer = Vec::with_capacity_in(js.len() * 2, self.alloc);
|
||||||
|
|
||||||
macro_rules! tryget {
|
macro_rules! tryget {
|
||||||
|
@ -452,7 +452,9 @@ impl<'alloc: 'data, 'data> JsChanges<'alloc, 'data> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut map = Vec::with_capacity_in(js.len() * 2, self.alloc);
|
// insert has a 9 byte size, replace has a 13 byte minimum and usually it's like 5 bytes
|
||||||
|
// for the old str added on so use 16 as a really rough estimate
|
||||||
|
let mut map = Vec::with_capacity_in(self.inner.len() * 16, self.alloc);
|
||||||
map.extend_from_slice(&(self.inner.len() as u32).to_le_bytes());
|
map.extend_from_slice(&(self.inner.len() as u32).to_le_bytes());
|
||||||
|
|
||||||
self.inner.sort();
|
self.inner.sort();
|
||||||
|
@ -462,9 +464,9 @@ impl<'alloc: 'data, 'data> JsChanges<'alloc, 'data> {
|
||||||
let start = span.start;
|
let start = span.start;
|
||||||
let end = span.end;
|
let end = span.end;
|
||||||
|
|
||||||
buffer.extend_from_slice(tryget!(offset..start).as_bytes());
|
buffer.extend_from_slice(tryget!(cursor..start).as_bytes());
|
||||||
|
|
||||||
match change.to_inner(cfg, offset) {
|
match change.to_inner(cfg, cursor) {
|
||||||
JsChangeInner::Insert { loc, str } => {
|
JsChangeInner::Insert { loc, str } => {
|
||||||
let mut len = 0u32;
|
let mut len = 0u32;
|
||||||
buffer.extend_from_slice(tryget!(start..loc).as_bytes());
|
buffer.extend_from_slice(tryget!(start..loc).as_bytes());
|
||||||
|
@ -476,11 +478,11 @@ impl<'alloc: 'data, 'data> JsChanges<'alloc, 'data> {
|
||||||
// INSERT op
|
// INSERT op
|
||||||
map.push(0);
|
map.push(0);
|
||||||
// pos
|
// pos
|
||||||
map.extend_from_slice(&loc.wrapping_add_signed(added).to_le_bytes());
|
map.extend_from_slice(&loc.wrapping_add_signed(offset).to_le_bytes());
|
||||||
// size
|
// size
|
||||||
map.extend_from_slice(&len.to_le_bytes());
|
map.extend_from_slice(&len.to_le_bytes());
|
||||||
|
|
||||||
added = added.wrapping_add_unsigned(len);
|
offset = offset.wrapping_add_unsigned(len);
|
||||||
}
|
}
|
||||||
JsChangeInner::Replace { str } => {
|
JsChangeInner::Replace { str } => {
|
||||||
let mut len = 0u32;
|
let mut len = 0u32;
|
||||||
|
@ -493,25 +495,25 @@ impl<'alloc: 'data, 'data> JsChanges<'alloc, 'data> {
|
||||||
// len
|
// len
|
||||||
map.extend_from_slice(&(span.end - span.start).to_le_bytes());
|
map.extend_from_slice(&(span.end - span.start).to_le_bytes());
|
||||||
// start
|
// start
|
||||||
map.extend_from_slice(&(span.start.wrapping_add_signed(added)).to_le_bytes());
|
map.extend_from_slice(&(span.start.wrapping_add_signed(offset)).to_le_bytes());
|
||||||
// end
|
// end
|
||||||
map.extend_from_slice(
|
map.extend_from_slice(
|
||||||
&((span.start + len).wrapping_add_signed(added)).to_le_bytes(),
|
&((span.start + len).wrapping_add_signed(offset)).to_le_bytes(),
|
||||||
);
|
);
|
||||||
// oldstr
|
// oldstr
|
||||||
map.extend_from_slice(tryget!(start..end).as_bytes());
|
map.extend_from_slice(tryget!(start..end).as_bytes());
|
||||||
|
|
||||||
let len = i32::try_from(len).map_err(|_| RewriterError::AddedTooLarge)?;
|
let len = i32::try_from(len).map_err(|_| RewriterError::AddedTooLarge)?;
|
||||||
let diff = len.wrapping_sub_unsigned(span.end - span.start);
|
let diff = len.wrapping_sub_unsigned(span.end - span.start);
|
||||||
added = added.wrapping_add(diff);
|
offset = offset.wrapping_add(diff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = end;
|
cursor = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
let js_len = js.len() as u32;
|
let js_len = js.len() as u32;
|
||||||
buffer.extend_from_slice(tryget!(offset..js_len).as_bytes());
|
buffer.extend_from_slice(tryget!(cursor..js_len).as_bytes());
|
||||||
|
|
||||||
Ok(JsChangeResult {
|
Ok(JsChangeResult {
|
||||||
js: buffer,
|
js: buffer,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue