MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / process_label

Method process_label

crates/cranelift/src/debug/transform/expression.rs:758–824  ·  view source on GitHub ↗
(&mut self, label: ValueLabel)

Source from the content-addressed store, hash-verified

756 }
757
758 fn process_label(&mut self, label: ValueLabel) {
759 if self.processed_labels.contains(&label) {
760 return;
761 }
762 dbi_log!("Intersecting with {:?}", log_get_value_name(label));
763 self.processed_labels.insert(label);
764
765 let value_ranges = match self.frame_info.and_then(|fi| fi.value_ranges.get(&label)) {
766 Some(value_ranges) => value_ranges,
767 None => {
768 return;
769 }
770 };
771
772 let ranges = &mut self.ranges;
773 for value_range in value_ranges {
774 let range_start = value_range.start as usize;
775 let range_end = value_range.end as usize;
776 let loc = value_range.loc;
777 if range_start == range_end {
778 continue;
779 }
780 assert!(range_start < range_end);
781
782 // Find acceptable scope of ranges to intersect with.
783 let i = match ranges.binary_search_by(|s| s.start.cmp(&range_start)) {
784 Ok(i) => i,
785 Err(i) => {
786 if i > 0 && range_start < ranges[i - 1].end {
787 i - 1
788 } else {
789 i
790 }
791 }
792 };
793 let j = match ranges.binary_search_by(|s| s.start.cmp(&range_end)) {
794 Ok(i) | Err(i) => i,
795 };
796 // Starting from the end, intersect (range_start..range_end) with
797 // self.ranges array.
798 for i in (i..j).rev() {
799 if range_end <= ranges[i].start || ranges[i].end <= range_start {
800 continue;
801 }
802 if range_end < ranges[i].end {
803 // Cutting some of the range from the end.
804 let mut tail = ranges[i].clone();
805 ranges[i].end = range_end;
806 tail.start = range_end;
807 ranges.insert(i + 1, tail);
808 self.covers_entire_scope = false;
809 }
810 assert!(ranges[i].end <= range_end);
811 if range_start <= ranges[i].start {
812 ranges[i].label_location.insert(label, loc);
813 continue;
814 }
815 // Cutting some of the range from the start.

Callers 2

build_with_localsMethod · 0.80

Calls 6

binary_search_byMethod · 0.80
containsMethod · 0.45
insertMethod · 0.45
getMethod · 0.45
cmpMethod · 0.45
cloneMethod · 0.45

Tested by 1