Skip to content
This repository was archived by the owner on Feb 22, 2024. It is now read-only.

Commit 81d4d2c

Browse files
committed
Address review comments
1 parent 4099d13 commit 81d4d2c

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

src/ast.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -101,21 +101,7 @@ impl UnionElement {
101101
UnionElement::Name(name) => Box::new(v.get(name).into_iter()),
102102
UnionElement::Slice(slice) => {
103103
if let Value::Array(arr) = v {
104-
let step = slice.step.unwrap_or(1);
105-
106-
let len = arr.len();
107-
108-
let start = slice
109-
.start
110-
.map(|s| if s < 0 { s + (len as isize) } else { s })
111-
.unwrap_or(if step > 0 { 0 } else { (len as isize) - 1 });
112-
113-
let end = slice
114-
.end
115-
.map(|e| if e < 0 { e + (len as isize) } else { e })
116-
.unwrap_or(if step > 0 { len as isize } else { -1 });
117-
118-
Box::new(array_slice(arr, start, end, step))
104+
Box::new(array_slice(arr, slice.start, slice.end, slice.step))
119105
} else {
120106
Box::new(iter::empty())
121107
}
@@ -125,8 +111,24 @@ impl UnionElement {
125111
}
126112
}
127113

128-
fn array_slice(arr: &[Value], start: isize, end: isize, step: isize) -> Iter<'_> {
114+
fn array_slice(
115+
arr: &[Value],
116+
optional_start: Option<isize>,
117+
optional_end: Option<isize>,
118+
optional_step: Option<isize>,
119+
) -> Iter<'_> {
120+
let step = optional_step.unwrap_or(1);
121+
129122
let len = arr.len();
123+
124+
let start = optional_start
125+
.map(|s| if s < 0 { s + (len as isize) } else { s })
126+
.unwrap_or(if step > 0 { 0 } else { (len as isize) - 1 });
127+
128+
let end = optional_end
129+
.map(|e| if e < 0 { e + (len as isize) } else { e })
130+
.unwrap_or(if step > 0 { len as isize } else { -1 });
131+
130132
let mut sl = vec![];
131133
match step.cmp(&0) {
132134
Ordering::Greater => {

0 commit comments

Comments
 (0)