Mercurial > python-compiler.rs
comparison 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 |
comparison
equal
deleted
inserted
replaced
52:d9838e8b3ec5 | 53:1a815946c2e5 |
---|---|
57 cmpop::NotIn => "not in", | 57 cmpop::NotIn => "not in", |
58 } | 58 } |
59 } | 59 } |
60 } | 60 } |
61 | 61 |
62 fn args_to_string(args: Vec<expr>) -> String { | 62 fn args_to_strings(args: Vec<expr>) -> Vec<String> { |
63 let mut arguments = vec!(); | 63 let mut arguments = vec!(); |
64 for arg in args { | 64 for arg in args { |
65 arguments.push(arg.to_string()); | 65 arguments.push(arg.to_string()); |
66 } | 66 } |
67 arguments | |
68 } | |
69 | |
70 fn args_to_string(args: Vec<expr>) -> String { | |
71 let mut arguments = vec!(); | |
72 for arg in args { | |
73 arguments.push(arg.to_string()); | |
74 } | |
67 arguments.join(", ") | 75 arguments.join(", ") |
68 } | 76 } |
69 | 77 |
70 fn kwargs_to_string(kwargs: Vec<keyword>) -> String { | 78 impl keyword { |
71 let mut arguments = vec!(); | 79 fn to_string(&self) -> String { |
72 for arg in kwargs { | 80 match self.arg.clone() { |
73 match arg.arg { | 81 Some(arg) => format!("{}={}", arg, self.value.to_string()), |
74 Some(arg) => arguments.push(arg), | 82 None => format!("**{}", self.value.to_string()) |
75 None => arguments.push("**kwarg".to_string()) | 83 } |
76 } | 84 } |
77 } | 85 } |
78 arguments.join(", ") | 86 |
87 fn kwargs_to_strings(kwargs: Vec<keyword>) -> Vec<String> { | |
88 let mut arguments = vec!(); | |
89 for kwarg in kwargs { | |
90 arguments.push(kwarg.to_string()); | |
91 } | |
92 arguments | |
79 } | 93 } |
80 | 94 |
81 fn arguments_to_string(args: arguments) -> String { | 95 fn arguments_to_string(args: arguments) -> String { |
82 let mut arguments = vec!(); | 96 let mut arguments = vec!(); |
83 for arg in args.args { | 97 for arg in args.args { |
144 } | 158 } |
145 */ | 159 */ |
146 | 160 |
147 arguments.join(" ") | 161 arguments.join(" ") |
148 }), | 162 }), |
149 expr::Call(func, args, keywords) => format!("{}({}{})", func.to_string(), args_to_string(args), kwargs_to_string(keywords)), | 163 expr::Call(func, args, keywords) => format!("{}({})", func.to_string(), { |
164 let mut arguments = vec!(); | |
165 let args = args_to_strings(args); | |
166 let keywords = kwargs_to_strings(keywords); | |
167 arguments.extend(args); | |
168 arguments.extend(keywords); | |
169 arguments.join(", ") | |
170 }), | |
150 expr::Num(n) => format!("{}", n), | 171 expr::Num(n) => format!("{}", n), |
151 expr::Str(s) => format!("\"{}\"", s), | 172 expr::Str(s) => format!("\"{}\"", s), |
152 expr::NameConstant(name) => format!("{}", name), | 173 expr::NameConstant(name) => format!("{}", name), |
153 expr::Attribute(value, attr, ctx) => format!("{}.{}", value.to_string(), attr), | 174 expr::Attribute(value, attr, ctx) => format!("{}.{}", value.to_string(), attr), |
154 expr::Name(name, ctx) => format!("{}", name), | 175 expr::Name(name, ctx) => format!("{}", name), |