|
1 | 1 | use std::{ |
2 | 2 | fmt::{self, Display}, |
3 | 3 | mem::replace, |
| 4 | + vec::Vec as StdVec, |
4 | 5 | }; |
5 | 6 |
|
6 | 7 | use ahash::RandomState; |
@@ -117,6 +118,14 @@ impl Interpreter<'_> { |
117 | 118 | OpCode::Subtract => lhs - rhs, |
118 | 119 | OpCode::Multiply => lhs * rhs, |
119 | 120 | OpCode::Divide => lhs / rhs, |
| 121 | + OpCode::Concat => { |
| 122 | + let mut buf = StdVec::with_capacity( |
| 123 | + lhs.string_size_hint() + rhs.string_size_hint(), |
| 124 | + ); |
| 125 | + lhs.write_string(&mut buf); |
| 126 | + rhs.write_string(&mut buf); |
| 127 | + Value::String(buf.into()) |
| 128 | + } |
120 | 129 | _ => todo!(), |
121 | 130 | } |
122 | 131 | }; |
@@ -203,23 +212,23 @@ impl Display for Registers<'_> { |
203 | 212 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
204 | 213 | write!(f, "Registers:")?; |
205 | 214 | let n = self.0.len().checked_ilog10().unwrap_or(0) as usize + 1; |
206 | | - fmt_list(f, self.0.iter(), |f, i, e| write!(f, "r{i:0n$} = {e:?}")) |
| 215 | + fmt_list(f, self.0.iter(), |f, i, e| write!(f, "r{i:0n$} = {e}")) |
207 | 216 | } |
208 | 217 | } |
209 | 218 |
|
210 | 219 | impl Display for SymbolTable<'_> { |
211 | 220 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
212 | 221 | write!(f, "Symbols:")?; |
213 | 222 | fmt_list(f, self.user.iter(), |f, i, (k, v)| { |
214 | | - write!(f, "user[{i}] @ {k} = {v:?}") |
| 223 | + write!(f, "user[{i}] @ {k} = {v}") |
215 | 224 | }) |
216 | 225 | } |
217 | 226 | } |
218 | 227 |
|
219 | 228 | impl Display for Consts<'_> { |
220 | 229 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
221 | 230 | write!(f, "Consts:")?; |
222 | | - fmt_list(f, self.0.iter(), |f, i, e| write!(f, "mem[{i}] = {e:?}")) |
| 231 | + fmt_list(f, self.0.iter(), |f, i, e| write!(f, "mem[{i}] = {e}")) |
223 | 232 | } |
224 | 233 | } |
225 | 234 |
|
|
0 commit comments