Skip to content

Commit a0e72bc

Browse files
RReverserBurntSushi
authored andcommitted
compile: remove c_literal and c_bytes methods
These seem obsolete and invoke expensive allocations when in fact a direct call to c_char or c_byte would suffice. PR #512
1 parent 7f29401 commit a0e72bc

File tree

1 file changed

+2
-38
lines changed

1 file changed

+2
-38
lines changed

src/compile.rs

+2-38
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,11 @@ impl Compiler {
263263
match *expr.kind() {
264264
Empty => Ok(Patch { hole: Hole::None, entry: self.insts.len() }),
265265
Literal(hir::Literal::Unicode(c)) => {
266-
self.c_literal(&[c])
266+
self.c_char(c)
267267
}
268268
Literal(hir::Literal::Byte(b)) => {
269269
assert!(self.compiled.uses_bytes());
270-
self.c_bytes(&[b])
270+
self.c_byte(b)
271271
}
272272
Class(hir::Class::Unicode(ref cls)) => {
273273
self.c_class(cls.ranges())
@@ -395,24 +395,6 @@ impl Compiler {
395395
})
396396
}
397397

398-
fn c_literal(&mut self, chars: &[char]) -> Result {
399-
debug_assert!(!chars.is_empty());
400-
let mut chars: Box<Iterator<Item=&char>> =
401-
if self.compiled.is_reverse {
402-
Box::new(chars.iter().rev())
403-
} else {
404-
Box::new(chars.iter())
405-
};
406-
let first = *chars.next().expect("non-empty literal");
407-
let Patch { mut hole, entry } = self.c_char(first)?;
408-
for &c in chars {
409-
let p = self.c_char(c)?;
410-
self.fill(hole, p.entry);
411-
hole = p.hole;
412-
}
413-
Ok(Patch { hole: hole, entry: entry })
414-
}
415-
416398
fn c_char(&mut self, c: char) -> Result {
417399
self.c_class(&[hir::ClassUnicodeRange::new(c, c)])
418400
}
@@ -436,24 +418,6 @@ impl Compiler {
436418
}
437419
}
438420

439-
fn c_bytes(&mut self, bytes: &[u8]) -> Result {
440-
debug_assert!(!bytes.is_empty());
441-
let mut bytes: Box<Iterator<Item=&u8>> =
442-
if self.compiled.is_reverse {
443-
Box::new(bytes.iter().rev())
444-
} else {
445-
Box::new(bytes.iter())
446-
};
447-
let first = *bytes.next().expect("non-empty literal");
448-
let Patch { mut hole, entry } = self.c_byte(first)?;
449-
for &b in bytes {
450-
let p = self.c_byte(b)?;
451-
self.fill(hole, p.entry);
452-
hole = p.hole;
453-
}
454-
Ok(Patch { hole: hole, entry: entry })
455-
}
456-
457421
fn c_byte(&mut self, b: u8) -> Result {
458422
self.c_class_bytes(&[hir::ClassBytesRange::new(b, b)])
459423
}

0 commit comments

Comments
 (0)