aboutsummaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/lib.rs1
-rw-r--r--rust/src/reader.rs23
2 files changed, 7 insertions, 17 deletions
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index 04eda85..63fab44 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -1,7 +1,6 @@
#![feature(io, fs, core, std_misc, collections)]
extern crate libc;
-extern crate pcre;
extern crate regex;
extern crate time;
diff --git a/rust/src/reader.rs b/rust/src/reader.rs
index 4750c46..94093db 100644
--- a/rust/src/reader.rs
+++ b/rust/src/reader.rs
@@ -1,8 +1,8 @@
+use std::borrow::ToOwned;
use types::MalError::{ErrString, ErrMalVal};
use types::{MalVal, MalRet,
_nil, _true, _false, _int, symbol, string, list, vector, hash_mapv,
err_str, err_string, err_val};
-use pcre::Pcre;
use super::printer::unescape_str;
#[derive(Debug, Clone)]
@@ -31,21 +31,12 @@ impl Reader {
fn tokenize(str: String) -> Vec<String> {
let mut results = vec![];
-
- let re = match Pcre::compile(r###"[\s,]*(~@|[\[\]{}()'`~^@]|"(?:\\.|[^\\"])*"|;.*|[^\s\[\]{}('"`,;)]*)"###) {
- Err(_) => { panic!("failed to compile regex") },
- Ok(re) => re
- };
-
- let mut it = re.matches(&str);
- loop {
- let opt_m = it.next();
- if opt_m.is_none() { break; }
- let m = opt_m.unwrap();
- if m.group(1) == "" { break; }
- if m.group(1).starts_with(";") { continue; }
-
- results.push((*m.group(1)).to_string());
+ let re = regex!(r###"[\s,]*(~@|[\[\]{}()'`~^@]|"(?:\\.|[^\\"])*"|;.*|[^\s\[\]{}('"`,;)]*)"###);
+ for cap in re.captures_iter(&str) {
+ let group = cap.at(1).unwrap_or("");
+ if group == "" { break; }
+ if group.starts_with(";") { continue; }
+ results.push(group.to_owned());
}
results
}