Re: Assign nodes
[email protected] (Jeremy Hylton) Tue, 16 Apr 2002 12:47:11 -0400
| Newsgroups | gmane.comp.python.compiler |
|---|---|
| Message-ID | <[email protected]> |
It looks like the code generator, as you mentioned, has to distinguish
between store and del anyway. So getting rid of the special case for
load, just means making it a three part default test.
As it happens, the case of names is handled by three separate methods
-- loadName(), storeName(), and delName() -- that are called from the
visitor. So the separate node types doesn't really buy anything.
Does the following patch look good?
Jeremy
Index: python.asdl
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/ast/python.asdl,v
retrieving revision 1.12
diff -c -c -r1.12 python.asdl
*** python.asdl 16 Apr 2002 03:20:45 -0000 1.12
--- python.asdl 16 Apr 2002 16:43:55 -0000
***************
*** 8,16 ****
| ClassDef(identifier name, expr* bases, stmt* body)
| Return(expr value) | Yield(expr value)
! | Del(assign* targets)
! | Assign(assign* targets, expr value)
! | AugAssign(assign target, operator op, expr value)
-- not sure if bool is allowed, can always use int
| Print(expr? dest, expr* value, bool nl)
--- 8,16 ----
| ClassDef(identifier name, expr* bases, stmt* body)
| Return(expr value) | Yield(expr value)
! | Del(expr* targets)
! | Assign(expr* targets, expr value)
! | AugAssign(expr target, operator op, expr value)
-- not sure if bool is allowed, can always use int
| Print(expr? dest, expr* value, bool nl)
***************
*** 55,71 ****
| Num(string n) -- string representation of a number
| Str(string s) -- need to specify raw, unicode, etc?
-- other literals? bools?
! | Attribute(expr value, identifier attr)
! | Subscript(expr value, slice slice)
! | Name(identifier id)
! | List(expr* elts) | Tuple(expr *elts)
!
! -- the subset of expressions that are valid as the target of
! -- assignments.
! assign = AssignAttribute(expr value, identifier attr)
! | AssignSubscript(expr value, slice slice)
! | AssignName(identifier id)
! | AssignList(expr* elts) | AssignTuple(expr *elts)
slice = Ellipsis | Slice(expr? lower, expr? upper)
-- maybe Slice and ExtSlice should be merged...
--- 55,69 ----
| Num(string n) -- string representation of a number
| Str(string s) -- need to specify raw, unicode, etc?
-- other literals? bools?
!
! -- the following expression can appear in assignment context
! | Attribute(expr value, identifier attr, expr_context ctx)
! | Subscript(expr value, slice slice, expr_context ctx)
! | Name(identifier id, expr_context ctx)
! | List(expr* elts, expr_context ctx)
! | Tuple(expr *elts, expr_context ctx)
!
! expr_context = Load | Store | Del
slice = Ellipsis | Slice(expr? lower, expr? upper)
-- maybe Slice and ExtSlice should be merged...
***************
*** 84,90 ****
-- not sure what to call the first argument for raise and except
! except = (expr? type, assign? name, stmt* body)
-- XXX need to handle 'def f((a, b)):'
arguments = (identifier* args, identifier? vararg,
--- 82,88 ----
-- not sure what to call the first argument for raise and except
! except = (expr? type, expr? name, stmt* body)
-- XXX need to handle 'def f((a, b)):'
arguments = (identifier* args, identifier? vararg,