don't copy variables that are the same in every subs

This commit is contained in:
Folkert 2021-11-20 02:15:26 +01:00
parent 594e754e1e
commit 3ab09322e0

View file

@ -2857,7 +2857,7 @@ impl StorageSubs {
}; };
let offsets = StorageSubsOffsets { let offsets = StorageSubsOffsets {
utable: target.utable.len() as u32, utable: (target.utable.len() - Variable::NUM_RESERVED_VARS) as u32,
variables: target.variables.len() as u32, variables: target.variables.len() as u32,
tag_names: target.tag_names.len() as u32, tag_names: target.tag_names.len() as u32,
field_names: target.field_names.len() as u32, field_names: target.field_names.len() as u32,
@ -2865,7 +2865,9 @@ impl StorageSubs {
variable_slices: target.variable_slices.len() as u32, variable_slices: target.variable_slices.len() as u32,
}; };
let range = 0..self.subs.utable.len(); // The first Variable::NUM_RESERVED_VARS are the same in every subs,
// so we can skip copying them!
let range = Variable::NUM_RESERVED_VARS..self.subs.utable.len();
// fill new slots with empty values // fill new slots with empty values
target.extend_by(range.len()); target.extend_by(range.len());
@ -2880,8 +2882,6 @@ impl StorageSubs {
let new_descriptor = Descriptor { let new_descriptor = Descriptor {
rank: descriptor.rank, rank: descriptor.rank,
mark: descriptor.mark, mark: descriptor.mark,
// rank: Rank::NONE,
// mark: Mark::NONE,
copy: OptVariable::NONE, copy: OptVariable::NONE,
content: new_content, content: new_content,
}; };
@ -3018,8 +3018,12 @@ impl StorageSubs {
} }
fn offset_variable(offsets: &StorageSubsOffsets, variable: Variable) -> Variable { fn offset_variable(offsets: &StorageSubsOffsets, variable: Variable) -> Variable {
let new_index = variable.0 + offsets.utable; if variable.index() < Variable::FIRST_USER_SPACE_VAR.index() {
Variable(new_index) variable
} else {
let new_index = variable.0 + offsets.utable;
Variable(new_index)
}
} }
fn offset_variable_slice( fn offset_variable_slice(