On 2/12/07, Collin Winter <[EMAIL PROTECTED]> wrote: > I've been working this past week at converting the stdlib's compiler > package to use 2.5's new _ast module instead of the package's own AST. > Overall, _ast was a joy to work with, save for the following nitpicks: > > 1) There are times when the _fields attribute on some AST nodes is > None; if this was done to indicate that a given node has no > AST-related attributes, it would be much easier if _fields was [] in > this case. As it is, I had to special-case "node._fields is None" in > the visitor so that I don't accidentally iterate over it. >
That makes total sense to me. > 2) {BinOp,AugAssign,BoolOp,etc}.op is an instance of, eg, Add, Sub, > Mult, Mod, meaning you have to dispatch based on tests like > "isinstance(node.op, x)" or "type(node.op) is x". I would much, much > prefer to spell this "node.op is x", ie, use "node.op = Add" rather > than the current "node.op = Add()" when constructing the nodes. > I can't think of a reason, off the top of my head, why they can't be singletons. It actually makes sense since they are basically an enumeration value in the AST grammar. > 3) I'd like there to be an Else() node for If.orelse, While.orelse, > etc. My motivation is that I need the lineno and col_offset values of > the "else" statement for a code-coverage utility; as it is, I have to > find the last lineno of the if/while/etc suite and the first lineno of > the "else" suite and then search between those two for the "else" > statement. > Ouch. I don't know how much work it would be to make this change, but it seems reasonable to want. > Thoughts? > They all sound reasonable. And it's nice to have a wanted feature be found from actual use. =) -Brett _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com