From d410dfa668b2540e7a312d8422c8aab4b61a094e Mon Sep 17 00:00:00 2001 From: Siim Kallas Date: Mon, 7 Jul 2014 18:50:28 +0300 Subject: [PATCH] Build fix for latest Rust --- src/codegen/branchify.rs | 69 ++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/src/codegen/branchify.rs b/src/codegen/branchify.rs index 0c9df2c0..1ac9e960 100644 --- a/src/codegen/branchify.rs +++ b/src/codegen/branchify.rs @@ -93,9 +93,8 @@ pub fn generate_branchified_method( unknown: &str) { // Write Formatted - macro_rules! wf(($($x:tt)*) => ({ + let mut wf = |s: String| { let indentstr = " ".repeat(indent * 4); - let s = format!($($x)*); let result = writer.write(indentstr.as_bytes()) .and(writer.write(s.as_bytes())) .and(writer.write(b"\n")); @@ -104,47 +103,49 @@ pub fn generate_branchified_method( Ok(_) => {}, Err(e) => fail!("write error: {:s}", e.desc), } - })) + }; + + fn r(branch: &ParseBranch, prefix: &str, read_call: &str, + valid: &str, unknown: &str, write_fmt: &mut |String|) { - fn r(writer: &mut BufferedWriter, branch: &ParseBranch, prefix: &str, indent: uint, read_call: &str, - end: &str, max_len: &str, valid: &str, unknown: &str) { for &c in branch.matches.iter() { let next_prefix = format!("{}{}", prefix, c as char); - wf!("Some(b) if b == '{}' as u8 => match {} {{", c as char, read_call); + (*write_fmt)(format!("Some(b) if b == '{}' as u8 => match {} {{", c as char, read_call)); for b in branch.children.iter() { - r(writer, b, next_prefix.as_slice(), indent + 1, read_call, end, max_len, valid, unknown); + r(b, next_prefix.as_slice(), read_call, valid, unknown, write_fmt); } match branch.result { - Some(ref result) => wf!(" Some(b) if b == SP => return Some({}),", *result), - None => wf!(" Some(b) if b == SP => return Some({}),", - unknown.replace("{}", format!("~\"{}\"", next_prefix.as_slice()).as_slice())), + Some(ref result) => (*write_fmt)(format!(" Some(b) if b == SP => return Some({}),", *result)), + None => (*write_fmt)(format!(" Some(b) if b == SP => return Some({}),", + unknown.replace("{}", format!("~\"{}\"", next_prefix.as_slice()).as_slice()))), } - wf!(" Some(b) if {} => (\"{}\", b),", valid, next_prefix.as_slice()); - wf!(" _ => return None,"); - wf!("}},"); + (*write_fmt)(format!(" Some(b) if {} => (\"{}\", b),", valid, next_prefix.as_slice())); + (*write_fmt)(format!(" _ => return None,")); + (*write_fmt)(format!("}},")); } } - wf!("let (s, next_byte) = match {} {{", read_call); + + wf(format!("let (s, next_byte) = match {} {{", read_call)); for b in branches.iter() { - r(writer, b, "", indent + 1, read_call, end, max_len, valid, unknown); + r(b, "", read_call, valid, unknown, &mut wf); } - wf!(" Some(b) if {} => (\"\", b),", valid); - wf!(" _ => return None,"); - wf!("}};"); - wf!("// OK, that didn't pan out. Let's read the rest and see what we get."); - wf!("let mut s = s.to_string();"); - wf!("s.push_char(next_byte as char);"); - wf!("loop {{"); - wf!(" match {} {{", read_call); - wf!(" Some(b) if b == {} => return Some({}),", end, unknown.replace("{}", "s")); - wf!(" Some(b) if {} => {{", valid); - wf!(" if s.len() == {} {{", max_len); - wf!(" // Too long; bad request"); - wf!(" return None;"); - wf!(" }}"); - wf!(" s.push_char(b as char);"); - wf!(" }},"); - wf!(" _ => return None,"); - wf!(" }}"); - wf!("}}"); + wf(format!(" Some(b) if {} => (\"\", b),", valid)); + wf(format!(" _ => return None,")); + wf(format!("}};")); + wf(format!("// OK, that didn't pan out. Let's read the rest and see what we get.")); + wf(format!("let mut s = s.to_string();")); + wf(format!("s.push_char(next_byte as char);")); + wf(format!("loop {{")); + wf(format!(" match {} {{", read_call)); + wf(format!(" Some(b) if b == {} => return Some({}),", end, unknown.replace("{}", "s"))); + wf(format!(" Some(b) if {} => {{", valid)); + wf(format!(" if s.len() == {} {{", max_len)); + wf(format!(" // Too long; bad request")); + wf(format!(" return None;")); + wf(format!(" }}")); + wf(format!(" s.push_char(b as char);")); + wf(format!(" }},")); + wf(format!(" _ => return None,")); + wf(format!(" }}")); + wf(format!("}}")); }