Mercurial > python-compiler.rs
comparison src/ast_dump.rs @ 65:ce5e27a3f277
Add ClassDef.decorator_list support.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Mon, 13 Jun 2016 01:27:10 +0100 |
parents | 53817b39f139 |
children | 32550e12aedf |
comparison
equal
deleted
inserted
replaced
64:53817b39f139 | 65:ce5e27a3f277 |
---|---|
219 | 219 |
220 fn make_indent(indent: usize) -> String { | 220 fn make_indent(indent: usize) -> String { |
221 iter::repeat(" ").take(indent).collect() | 221 iter::repeat(" ").take(indent).collect() |
222 } | 222 } |
223 | 223 |
224 fn decorator_list_to_string(decorator_list: Vec<expr>, indent: usize) -> String { | |
225 let current_indent = make_indent(indent); | |
226 let decorators = vec_to_strings_vec(decorator_list); | |
227 if decorators.is_empty() { | |
228 String::new() | |
229 } else { | |
230 format!("{}@{}\n", | |
231 current_indent, | |
232 decorators.join(format!("\n{}@", current_indent).as_str()) | |
233 ) | |
234 } | |
235 } | |
236 | |
224 impl stmt { | 237 impl stmt { |
225 fn to_string(&self, indent: usize) -> String { | 238 fn to_string(&self, indent: usize) -> String { |
226 let current_indent = make_indent(indent); | 239 let current_indent = make_indent(indent); |
227 match self.clone() { | 240 match self.clone() { |
228 stmt::ClassDef(name, bases, keywords, body, decorator_list) => format!("{}class {}({}):\n{}", current_indent, name, vec_to_strings_vec(bases).join(", "), statements_to_string(indent, body)), | 241 stmt::ClassDef(name, bases, keywords, body, decorator_list) => { |
242 format!("{}{}class {}({}):\n{}", | |
243 decorator_list_to_string(decorator_list, indent), | |
244 current_indent, | |
245 name, | |
246 vec_to_strings_vec(bases).join(", "), | |
247 statements_to_string(indent, body) | |
248 ) | |
249 }, | |
229 stmt::FunctionDef(name, arguments, body, decorator_list, returns) => { | 250 stmt::FunctionDef(name, arguments, body, decorator_list, returns) => { |
230 format!("{}{}def {}({}){}:\n{}", | 251 format!("{}{}def {}({}){}:\n{}", |
231 { | 252 decorator_list_to_string(decorator_list, indent), |
232 let decorators = vec_to_strings_vec(decorator_list); | |
233 if decorators.is_empty() { | |
234 String::new() | |
235 } else { | |
236 format!("{}@{}\n", current_indent, decorators.join(format!("\n{}@", current_indent).as_str())) | |
237 } | |
238 }, | |
239 current_indent, | 253 current_indent, |
240 name, | 254 name, |
241 arguments.to_string(), | 255 arguments.to_string(), |
242 match returns { | 256 match returns { |
243 None => String::new(), | 257 None => String::new(), |