Mercurial > python-compiler.rs
diff src/ast_dump.rs @ 53:1a815946c2e5
Implement keywords in expr::Call, and add some tests.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 12 Jun 2016 02:37:28 +0100 |
parents | d9838e8b3ec5 |
children | ad2453a55820 |
line wrap: on
line diff
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -59,6 +59,14 @@ impl cmpop { } } +fn args_to_strings(args: Vec<expr>) -> Vec<String> { + let mut arguments = vec!(); + for arg in args { + arguments.push(arg.to_string()); + } + arguments +} + fn args_to_string(args: Vec<expr>) -> String { let mut arguments = vec!(); for arg in args { @@ -67,15 +75,21 @@ fn args_to_string(args: Vec<expr>) -> St arguments.join(", ") } -fn kwargs_to_string(kwargs: Vec<keyword>) -> String { - let mut arguments = vec!(); - for arg in kwargs { - match arg.arg { - Some(arg) => arguments.push(arg), - None => arguments.push("**kwarg".to_string()) +impl keyword { + fn to_string(&self) -> String { + match self.arg.clone() { + Some(arg) => format!("{}={}", arg, self.value.to_string()), + None => format!("**{}", self.value.to_string()) } } - arguments.join(", ") +} + +fn kwargs_to_strings(kwargs: Vec<keyword>) -> Vec<String> { + let mut arguments = vec!(); + for kwarg in kwargs { + arguments.push(kwarg.to_string()); + } + arguments } fn arguments_to_string(args: arguments) -> String { @@ -146,7 +160,14 @@ impl expr { arguments.join(" ") }), - expr::Call(func, args, keywords) => format!("{}({}{})", func.to_string(), args_to_string(args), kwargs_to_string(keywords)), + expr::Call(func, args, keywords) => format!("{}({})", func.to_string(), { + let mut arguments = vec!(); + let args = args_to_strings(args); + let keywords = kwargs_to_strings(keywords); + arguments.extend(args); + arguments.extend(keywords); + arguments.join(", ") + }), expr::Num(n) => format!("{}", n), expr::Str(s) => format!("\"{}\"", s), expr::NameConstant(name) => format!("{}", name),