Skip to content

Commit e7860c4

Browse files
committed
Fix some awkward APIs
1 parent 17cf9ea commit e7860c4

File tree

8 files changed

+29
-29
lines changed

8 files changed

+29
-29
lines changed

jingle/src/context.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ impl ArchInfoProvider for JingleContext<'_> {
2424
self.info.default_code_space
2525
}
2626

27-
fn get_register(&self, name: &str) -> Option<VarNode> {
27+
fn get_register(&self, name: &str) -> Option<&VarNode> {
2828
self.info
2929
.registers
3030
.iter()
3131
.find(|(_, reg_name)| reg_name.as_str() == name)
32-
.map(|(vn, _)| vn.clone())
32+
.map(|(vn, _)| vn)
3333
}
3434

3535
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
@@ -40,8 +40,8 @@ impl ArchInfoProvider for JingleContext<'_> {
4040
.map(|(_, name)| name.as_str())
4141
}
4242

43-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)> {
44-
self.info.registers.iter()
43+
fn get_registers(&self) -> impl Iterator<Item = (&VarNode, &str)> {
44+
self.info.registers.iter().map(|(a,b)| (a,b.as_str()))
4545
}
4646
}
4747

@@ -67,7 +67,7 @@ impl<'ctx> JingleContext<'ctx> {
6767
z3,
6868
info: CachedArchInfo {
6969
spaces: r.get_all_space_info().cloned().collect(),
70-
registers: r.get_registers().cloned().collect(),
70+
registers: r.get_registers().map(|(a,b)|(a.clone(),b.to_string())).collect(),
7171
default_code_space: r.get_code_space_idx(),
7272
},
7373
}))

jingle/src/modeling/block.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,16 @@ impl ArchInfoProvider for ModeledBlock<'_> {
135135
self.jingle.get_code_space_idx()
136136
}
137137

138-
fn get_register(&self, name: &str) -> Option<VarNode> {
138+
fn get_register(&self, name: &str) -> Option<&VarNode> {
139139
self.jingle.get_register(name)
140140
}
141141

142142
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
143143
self.jingle.get_register_name(location)
144144
}
145145

146-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)> {
147-
self.jingle.get_registers()
146+
fn get_registers(&self) -> impl Iterator<Item = (&VarNode, &str)> {
147+
self.jingle.get_registers().map(|(a, b)| (a, b))
148148
}
149149
}
150150

jingle/src/modeling/instruction.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,16 @@ impl ArchInfoProvider for ModeledInstruction<'_> {
6464
self.jingle.get_code_space_idx()
6565
}
6666

67-
fn get_register(&self, name: &str) -> Option<VarNode> {
67+
fn get_register(&self, name: &str) -> Option<&VarNode> {
6868
self.jingle.get_register(name)
6969
}
7070

7171
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
7272
self.jingle.get_register_name(location)
7373
}
7474

75-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)> {
76-
self.jingle.get_registers()
75+
fn get_registers(&self) -> impl Iterator<Item = (&VarNode, &str)> {
76+
self.jingle.get_registers().map(|(a, b)| (a, b))
7777
}
7878
}
7979

jingle/src/modeling/state/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ impl ArchInfoProvider for State<'_> {
3636
self.jingle.get_code_space_idx()
3737
}
3838

39-
fn get_register(&self, name: &str) -> Option<VarNode> {
39+
fn get_register(&self, name: &str) -> Option<&VarNode> {
4040
self.jingle.get_register(name)
4141
}
4242

4343
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
4444
self.jingle.get_register_name(location)
4545
}
4646

47-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)> {
48-
self.jingle.get_registers()
47+
fn get_registers(&self) -> impl Iterator<Item = (&VarNode, &str)> {
48+
self.jingle.get_registers().map(|(a, b)| (a, b))
4949
}
5050
}
5151

jingle/src/translator.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ impl ArchInfoProvider for SleighTranslator<'_> {
5959
self.jingle.get_code_space_idx()
6060
}
6161

62-
fn get_register(&self, name: &str) -> Option<VarNode> {
62+
fn get_register(&self, name: &str) -> Option<&VarNode> {
6363
self.jingle.get_register(name)
6464
}
6565

6666
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
6767
self.jingle.get_register_name(location)
6868
}
6969

70-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)> {
70+
fn get_registers(&self) -> impl Iterator<Item = (&VarNode, &str)> {
7171
self.jingle.get_registers()
7272
}
7373
}

jingle_sleigh/src/context/loaded.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,16 @@ impl ArchInfoProvider for LoadedSleighContext<'_> {
166166
self.sleigh.get_code_space_idx()
167167
}
168168

169-
fn get_register(&self, name: &str) -> Option<VarNode> {
169+
fn get_register(&self, name: &str) -> Option<&VarNode> {
170170
self.sleigh.get_register(name)
171171
}
172172

173173
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
174174
self.sleigh.get_register_name(location)
175175
}
176176

177-
fn get_registers(&self) -> impl Iterator<Item=&(VarNode, String)> {
178-
self.sleigh.get_registers()
177+
fn get_registers(&self) -> impl Iterator<Item=(&VarNode, &str)> {
178+
self.sleigh.get_registers().map(|(a, b)| (a, b))
179179
}
180180
}
181181

jingle_sleigh/src/context/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ impl ArchInfoProvider for SleighContext {
5050
.getIndex() as usize
5151
}
5252

53-
fn get_register(&self, name: &str) -> Option<VarNode> {
53+
fn get_register(&self, name: &str) -> Option<&VarNode> {
5454
self.registers
5555
.iter()
5656
.find(|(_, reg_name)| reg_name.as_str() == name)
57-
.map(|(vn, _)| vn.clone())
57+
.map(|(vn, _)| vn)
5858
}
5959

6060
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
@@ -64,8 +64,8 @@ impl ArchInfoProvider for SleighContext {
6464
.map(|(_, name)| name.as_str())
6565
}
6666

67-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)> {
68-
self.registers.iter()
67+
fn get_registers(&self) -> impl Iterator<Item=(&VarNode, &str)> {
68+
self.registers.iter().map(|(a,b)| (a,b.as_str()))
6969
}
7070
}
7171

@@ -154,7 +154,7 @@ mod test {
154154
let sleigh = ctx_builder.build(SLEIGH_ARCH).unwrap();
155155
for (vn, name) in sleigh.get_registers() {
156156
let addr = sleigh.get_register(&name);
157-
assert_eq!(addr.as_ref(), Some(vn));
157+
assert_eq!(addr, Some(vn));
158158
}
159159
}
160160

jingle_sleigh/src/space.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ impl<T: ArchInfoProvider> ArchInfoProvider for &[T] {
100100
self[0].get_code_space_idx()
101101
}
102102

103-
fn get_register(&self, name: &str) -> Option<VarNode> {
103+
fn get_register(&self, name: &str) -> Option<&VarNode> {
104104
self[0].get_register(name)
105105
}
106106

107107
fn get_register_name(&self, location: &VarNode) -> Option<&str> {
108108
self[0].get_register_name(location)
109109
}
110110

111-
fn get_registers(&self) -> impl Iterator<Item=&(VarNode, String)> {
111+
fn get_registers(&self) -> impl Iterator<Item=(&VarNode, &str)> {
112112
self[0].get_registers()
113113
}
114114
}
@@ -118,19 +118,19 @@ pub trait ArchInfoProvider {
118118
fn get_space_info(&self, idx: usize) -> Option<&SpaceInfo>;
119119

120120
/// Retrieve a listing of all [`SpaceInfo`] associated with this `SLEIGH` context
121-
fn get_all_space_info(&self) -> impl Iterator<Item = &SpaceInfo>;
121+
fn get_all_space_info(&self) -> impl Iterator<Item=&SpaceInfo>;
122122

123123
/// Returns the index that `SLEIGH` claims is the "main" space in which instructions reside
124124
fn get_code_space_idx(&self) -> usize;
125125

126126
/// Given a register name, get a corresponding [`VarNode`], if one exists
127-
fn get_register(&self, name: &str) -> Option<VarNode>;
127+
fn get_register(&self, name: &str) -> Option<&VarNode>;
128128

129129
/// Given a [`VarNode`], get the name of the corresponding architectural register, if one exists
130130
fn get_register_name(&self, location: &VarNode) -> Option<&str>;
131131

132132
/// Get a listing of all register name/[`VarNode`] pairs
133-
fn get_registers(&self) -> impl Iterator<Item = &(VarNode, String)>;
133+
fn get_registers(&self) -> impl Iterator<Item=(&VarNode, &str)>;
134134

135135
fn varnode(&self, name: &str, offset: u64, size: usize) -> Result<VarNode, JingleSleighError> {
136136
for (space_index, space) in self.get_all_space_info().enumerate() {

0 commit comments

Comments
 (0)