Skip to main content

luaur_reduce_cli/methods/
reducer_pruned_span.rs

1use alloc::vec::Vec;
2use luaur_ast::records::ast_stat::AstStat;
3use luaur_ast::records::ast_stat_block::AstStatBlock;
4
5use crate::records::reducer::Reducer;
6use crate::type_aliases::span::Span;
7
8impl Reducer {
9    pub fn pruned_span(
10        &self,
11        block: *mut AstStatBlock,
12        span1: Span,
13        span2: Span,
14    ) -> Vec<*mut AstStat> {
15        let mut result: Vec<*mut AstStat> = Vec::new();
16
17        unsafe {
18            if block.is_null() {
19                return result;
20            }
21
22            // AstArray fields are private; use the begin() method to get the data pointer.
23            let data = (*block).body.begin();
24            if data.is_null() {
25                return result;
26            }
27
28            for i in span1.0..span1.1 {
29                result.push(*data.add(i));
30            }
31
32            for i in span2.0..span2.1 {
33                result.push(*data.add(i));
34            }
35        }
36
37        result
38    }
39}
40
41pub fn reducer_pruned_span(
42    this: &Reducer,
43    block: *mut AstStatBlock,
44    span1: Span,
45    span2: Span,
46) -> Vec<*mut AstStat> {
47    this.pruned_span(block, span1, span2)
48}