Add a Function::clear() method.

This makes it possible to clear out a Function data structure so it can
be reused for compiling multiple functions.

Also add clear() methods to various sub-structures.
This commit is contained in:
Jakob Stoklund Olesen
2017-09-08 14:53:55 -07:00
parent 439a40e5e4
commit 0c16f13c6b
4 changed files with 41 additions and 0 deletions

View File

@@ -74,6 +74,17 @@ impl DataFlowGraph {
}
}
/// Clear everything.
pub fn clear(&mut self) {
self.insts.clear();
self.results.clear();
self.ebbs.clear();
self.value_lists.clear();
self.values.clear();
self.signatures.clear();
self.ext_funcs.clear();
}
/// Get the total number of instructions created in this function, whether they are currently
/// inserted in the layout or not.
///

View File

@@ -47,6 +47,14 @@ impl Signature {
}
}
/// Clear the signature so it is identical to a fresh one returned by `new()`.
pub fn clear(&mut self, call_conv: CallConv) {
self.argument_types.clear();
self.return_types.clear();
self.call_conv = call_conv;
self.argument_bytes = None;
}
/// Compute the size of the stack arguments and mark signature as legalized.
///
/// Even if there are no stack arguments, this will set `argument_types` to `Some(0)` instead

View File

@@ -74,6 +74,20 @@ impl Function {
}
}
/// Clear all data structures in this function.
pub fn clear(&mut self) {
self.signature.clear(ir::CallConv::Native);
self.stack_slots.clear();
self.global_vars.clear();
self.heaps.clear();
self.jump_tables.clear();
self.dfg.clear();
self.layout.clear();
self.encodings.clear();
self.locations.clear();
self.offsets.clear();
}
/// Create a new empty, anonymous function with a native calling convention.
pub fn new() -> Function {
Self::with_name_signature(FunctionName::default(), Signature::new(CallConv::Native))

View File

@@ -51,6 +51,14 @@ impl Layout {
last_ebb: None,
}
}
/// Clear the layout.
pub fn clear(&mut self) {
self.ebbs.clear();
self.insts.clear();
self.first_ebb = None;
self.last_ebb = None;
}
}
// Sequence numbers.