From 840551a154be8e6d8a1fda05d8afaf7dacd62c55 Mon Sep 17 00:00:00 2001 From: Wilfried Chauveau Date: Fri, 24 Mar 2017 07:03:56 +0100 Subject: [PATCH] use regex.replace_all instead of loops --- Cargo.toml | 2 +- src/main.rs | 17 +++-------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 561674a..cddfe6c 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargo-demangle" -version = "0.1.0" +version = "0.1.1" authors = ["Wilfried C. "] license = "MIT" keywords = ["cargo", "demangle", "subcommand"] diff --git a/src/main.rs b/src/main.rs index 5cdeade..6dc9a46 100755 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ extern crate regex; use std::io::{Read, Write}; use std::fs::File; -use regex::Regex; +use regex::{Regex, Captures}; use rustc_demangle::demangle; const CARGO: &'static str = "cargo"; @@ -28,8 +28,6 @@ fn main() { } fn do_demangle(filename: String) { - let mut symbols = std::collections::BTreeMap::new(); - let re = Regex::new(r"(?m)(?P(_ZN[0-9]+.*E))").unwrap(); let mut txt = String::new(); @@ -37,18 +35,9 @@ fn do_demangle(filename: String) { file.read_to_string(&mut txt).unwrap(); drop(file); - for cap in re.captures_iter(&txt) { - let symbol = &cap["symbol"]; - if !symbols.contains_key(symbol) { - symbols.insert(symbol.to_string(), format!("{}", demangle(symbol))); - } - } - - for (mangled, demangled) in symbols.iter() { - txt = txt.replace(mangled, demangled); - } + let result = re.replace_all(&txt, |caps: &Captures| format!("{}", demangle(&caps["symbol"]))); let mut file = File::create(&filename).unwrap(); - file.write_all(txt.as_bytes()).unwrap(); + file.write_all(result.as_bytes()).unwrap(); drop(file); }