Mercurial > python-compiler.rs
comparison src/ast_dump.rs @ 56:c3cc16b933d2
Implement function arguments of all kinds.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 12 Jun 2016 03:48:24 +0100 |
parents | 32c78b275d5a |
children | e5a808ec31c0 |
comparison
equal
deleted
inserted
replaced
55:32c78b275d5a | 56:c3cc16b933d2 |
---|---|
161 expr::Ellipsis => format!("..."), | 161 expr::Ellipsis => format!("..."), |
162 } | 162 } |
163 } | 163 } |
164 } | 164 } |
165 | 165 |
166 impl to_string_able for arg { | |
167 fn to_string(&self) -> String { | |
168 match self.annotation { | |
169 None => self.arg.clone(), | |
170 Some(ref annotation) => format!("{}: {}", self.arg, annotation.to_string()) | |
171 } | |
172 } | |
173 } | |
174 | |
166 impl to_string_able for arguments { | 175 impl to_string_able for arguments { |
167 fn to_string(&self) -> String { | 176 fn to_string(&self) -> String { |
168 let mut args = vec!(); | 177 let mut args = vec!(); |
169 for arg in self.args.clone() { | 178 let num_args = self.args.len(); |
170 args.push(arg.arg); | 179 let num_defaults = self.defaults.len(); |
180 | |
181 let mut normal_args = self.args.clone(); | |
182 let defaulted_args = normal_args.split_off(num_args - num_defaults); | |
183 for arg in normal_args { | |
184 args.push(arg.to_string()); | |
185 } | |
186 for (arg, default) in defaulted_args.iter().zip(self.defaults.iter()) { | |
187 args.push(format!("{}={}", arg.to_string(), default.to_string())); | |
188 } | |
189 | |
190 if !self.kwonlyargs.is_empty() { | |
191 match self.vararg { | |
192 None => args.push("*".to_string()), | |
193 Some(ref vararg) => args.push(format!("*{}", vararg.to_string())), | |
194 } | |
195 } | |
196 for (arg, default) in self.kwonlyargs.iter().zip(self.kw_defaults.iter()) { | |
197 let arg = arg.to_string(); | |
198 match *default { | |
199 Some(ref default) => args.push(format!("{}={}", arg, default.to_string())), | |
200 None => args.push(arg) | |
201 } | |
202 } | |
203 match self.kwarg { | |
204 Some(ref kwarg) => args.push(format!("**{}", kwarg.to_string())), | |
205 None => () | |
171 } | 206 } |
172 args.join(", ") | 207 args.join(", ") |
173 } | 208 } |
174 } | 209 } |
175 | 210 |