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

Commit 82a630f

Browse files
committed
Prefer isize to i64
1 parent 3ee433e commit 82a630f

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

src/ast.rs

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ pub enum UnionElement {
6565

6666
#[derive(Debug)]
6767
pub struct Slice {
68-
pub start: Option<i64>, // FIXME: usize?
69-
pub end: Option<i64>, // FIXME: usize?
70-
pub step: Option<i64>, // FIXME: usize?
68+
pub start: Option<isize>,
69+
pub end: Option<isize>,
70+
pub step: Option<isize>,
7171
}
7272

7373
type Iter<'a> = Box<dyn Iterator<Item = &'a Value> + 'a>;
@@ -103,17 +103,17 @@ impl UnionElement {
103103
if let Value::Array(arr) = v {
104104
let step = slice.step.unwrap_or(1);
105105

106-
let len = arr.len() as i64;
106+
let len = arr.len();
107107

108108
let start = slice
109109
.start
110-
.map(|s| if s < 0 { s + len } else { s })
111-
.unwrap_or(if step > 0 { 0 } else { len - 1 });
110+
.map(|s| if s < 0 { s + (len as isize) } else { s })
111+
.unwrap_or(if step > 0 { 0 } else { (len as isize) - 1 });
112112

113113
let end = slice
114114
.end
115-
.map(|e| if e < 0 { e + len } else { e })
116-
.unwrap_or(if step > 0 { len } else { -1 });
115+
.map(|e| if e < 0 { e + (len as isize) } else { e })
116+
.unwrap_or(if step > 0 { len as isize } else { -1 });
117117

118118
Box::new(array_slice(arr, start, end, step, len))
119119
} else {
@@ -125,24 +125,32 @@ impl UnionElement {
125125
}
126126
}
127127

128-
fn array_slice(arr: &[Value], start: i64, end: i64, step: i64, len: i64) -> Iter<'_> {
128+
fn array_slice(arr: &[Value], start: isize, end: isize, step: isize, len: usize) -> Iter<'_> {
129129
let mut sl = vec![];
130130
match step.cmp(&0) {
131131
Ordering::Greater => {
132-
let st = if start < 0 { 0 } else { start }; // avoid CPU attack
133-
let e = if end > len { len } else { end }; // avoid CPU attack
134-
for i in (st..e).step_by(step as usize) {
135-
if 0 <= i && i < len {
136-
sl.push(&arr[i as usize]);
132+
let strt = if start < 0 { 0 } else { start as usize }; // avoid CPU attack
133+
let e = if end > (len as isize) {
134+
len
135+
} else {
136+
end as usize
137+
}; // avoid CPU attack
138+
for i in (strt..e).step_by(step as usize) {
139+
if i < len {
140+
sl.push(&arr[i]);
137141
}
138142
}
139143
}
140144

141145
Ordering::Less => {
142-
let strt = if start > len { len } else { start }; // avoid CPU attack
146+
let strt = if start > (len as isize) {
147+
len as isize
148+
} else {
149+
start
150+
}; // avoid CPU attack
143151
let e = if end < -1 { -1 } else { end }; // avoid CPU attack
144152
for i in (-strt..-e).step_by(-step as usize) {
145-
if 0 <= -i && -i < len {
153+
if 0 <= -i && -i < (len as isize) {
146154
sl.push(&arr[-i as usize]);
147155
}
148156
}

src/parser.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ fn parse_union_array_index(matcher_rule: pest::iterators::Pair<Rule>) -> UnionEl
7373
}
7474

7575
fn parse_union_array_slice(matcher_rule: pest::iterators::Pair<Rule>) -> UnionElement {
76-
let mut start: Option<i64> = None;
77-
let mut end: Option<i64> = None;
78-
let mut step: Option<i64> = None;
76+
let mut start: Option<isize> = None;
77+
let mut end: Option<isize> = None;
78+
let mut step: Option<isize> = None;
7979
for r in matcher_rule.into_inner() {
8080
match r.as_rule() {
8181
Rule::sliceStart => {

0 commit comments

Comments
 (0)