Skip to content

Commit 235c481

Browse files
committed
Make things ever so slightly faster :)
1 parent bc285fc commit 235c481

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/codegen.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use JsonValue;
22

33
pub trait Generator {
4+
fn current_index(&self) -> usize;
5+
46
fn new_line(&mut self) {}
57

68
fn write(&mut self, slice: &[u8]);
@@ -34,16 +36,13 @@ pub trait Generator {
3436
self.write_char(b'"');
3537
}
3638

37-
fn write_digits_from_u64(&mut self, mut num: u64) -> u8 {
39+
fn write_digits_from_u64(&mut self, mut num: u64) {
3840
let digit = (num % 10) as u8;
3941
if num > 9 {
4042
num /= 10;
41-
let length = self.write_digits_from_u64(num) + 1;
42-
self.write_char(digit + b'0');
43-
return length;
43+
self.write_digits_from_u64(num);
4444
}
4545
self.write_char(digit + b'0');
46-
1
4746
}
4847

4948
fn write_number(&mut self, mut num: f64) {
@@ -52,13 +51,18 @@ pub trait Generator {
5251
self.write_char(b'-');
5352
}
5453

55-
let mut length = self.write_digits_from_u64(num as u64);
54+
let start = self.current_index();
55+
56+
self.write_digits_from_u64(num as u64);
57+
5658
let mut fract = num.fract();
5759

5860
if fract < 1e-16 {
5961
return;
6062
}
6163

64+
let mut length = self.current_index() - start;
65+
6266
fract *= 10.0;
6367

6468
self.write_char(b'.');
@@ -138,6 +142,10 @@ impl DumpGenerator {
138142
}
139143

140144
impl Generator for DumpGenerator {
145+
fn current_index(&self) -> usize {
146+
self.code.len()
147+
}
148+
141149
fn write(&mut self, slice: &[u8]) {
142150
self.code.extend_from_slice(slice);
143151
}
@@ -172,6 +180,10 @@ impl PrettyGenerator {
172180
}
173181

174182
impl Generator for PrettyGenerator {
183+
fn current_index(&self) -> usize {
184+
self.code.len()
185+
}
186+
175187
fn new_line(&mut self) {
176188
self.code.push(b'\n');
177189
for _ in 0..(self.dent * self.spaces_per_indent) {

src/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ impl<'a> Parser<'a> {
283283
}
284284

285285
fn array(&mut self) -> JsonResult<JsonValue> {
286-
let mut array = Vec::new();
286+
let mut array = Vec::with_capacity(20);
287287

288288
match try!(self.tokenizer.next()) {
289289
Token::BracketOff => return Ok(JsonValue::Array(array)),

0 commit comments

Comments
 (0)