[Patches] [ python-Patches-979728 ] Implementation for PEP 318 using java-style syntax

SourceForge.net noreply at sourceforge.net
Wed Jul 28 05:39:32 CEST 2004


Patches item #979728, was opened at 2004-06-25 09:26
Message generated for change (Comment added) made by gvanrossum
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=979728&group_id=5470

Category: Parser/Compiler
Group: Python 2.4
Status: Open
Resolution: None
Priority: 5
Submitted By: Mark Russell (mark_t_russell)
Assigned to: Nobody/Anonymous (nobody)
>Summary: Implementation for PEP 318 using java-style syntax

Initial Comment:
This implements function decorators using the
Java-style syntax described in
http://mail.python.org/pipermail/python-dev/2004-June/045516.html

As the patch changes the grammar, you'll need to
make sure Include/graminit.h and Python/graminit.c
are writable after applying the patch but before
compiling (after a standard CVS checkout they are
read-only, which stops pgen from working).

Changes: 

   - adding @ as a token
   - changing the grammer for funcdef
   - adding com_decorator in compile.c
   - adding test_decorator.py (based on Guido's version)


----------------------------------------------------------------------

>Comment By: Guido van Rossum (gvanrossum)
Date: 2004-07-27 23:39

Message:
Logged In: YES 
user_id=6380

There's some non-standard C: in compile.c line 5641 there's a 
char* declaration that isn't at the start of a block. Easily 
fixed but should definitely be fixed before releasing a2.

----------------------------------------------------------------------

Comment By: Guido van Rossum (gvanrossum)
Date: 2004-07-27 23:22

Message:
Logged In: YES 
user_id=6380

Before 2.4final I'd like to see some changes to the syntax:

- Instead of @test, it should be somewhat more restricted, 
preferably @ followed by a dotted name followed by an 
optional argument list. @1+2 or @[1,2,3] just doesn't make 
sense IMO.

- I'd like there to always be a newline between the last 
decorator and the 'def' keyword. (This in the sake 
of "greppability" per python-dev discussion.)

----------------------------------------------------------------------

Comment By: Michael Hudson (mwh)
Date: 2004-07-26 10:20

Message:
Logged In: YES 
user_id=6656

Well, PEP 306 is the reference for this sort of thing: also
needed (before 2.4 final) are changes to Lib/compiler and
tokenize.py.  Mark, are you willing/able to work on these?

----------------------------------------------------------------------

Comment By: Anthony Baxter (anthonybaxter)
Date: 2004-07-26 10:09

Message:
Logged In: YES 
user_id=29957

Argh. Our Makefile's ability to Do The Right Thing... is not
good. Rebuilding Lib/symbol.py and Lib/token.py makes this
better. The setup.py really should do this automatically.

So - all tests pass. As far as I can see, things still to be
done for this to be in a2:

- Documentation (can wait until a3, I guess)
- More coverage in test_decorator (ditto)



----------------------------------------------------------------------

Comment By: Anthony Baxter (anthonybaxter)
Date: 2004-07-26 09:58

Message:
Logged In: YES 
user_id=29957

I still get a failure in test_transformer after a make
distclean and rebuild and make distclean and rebuild.

FAILED (errors=1)
Traceback (most recent call last):
  File "Lib/test/test_transformer.py", line 37, in ?
    test_main()
  File "Lib/test/test_transformer.py", line 32, in test_main
    test_support.run_unittest(
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/test/test_support.py",
line 290, in run_unittest
    run_suite(suite, testclass)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/test/test_support.py",
line 275, in run_suite
    raise TestFailed(err)
test.test_support.TestFailed: Traceback (most recent call last):
  File "Lib/test/test_transformer.py", line 16, in
testMultipleLHS
    a = transformer.parse(s)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 50, in parse
    return Transformer().parsesuite(buf)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 120, in parsesuite
    return self.transform(parser.suite(text))
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 113, in transform
    return self.compile_node(tree)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 149, in compile_node
    return self.file_input(node[1:])
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 180, in file_input
    self.com_append_stmt(stmts, node)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 1025, in com_append_stmt
    result = self.com_node(node)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 768, in com_node
    return self._dispatch[node[0]](node[1:])
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 252, in stmt
    return self.com_stmt(nodelist[0])
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 1018, in com_stmt
    result = self.lookup_node(node)(node[1:])
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 312, in expr_stmt
    lval = self.com_augassign(nodelist[0])
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 922, in com_augassign
    l = self.com_node(node)
  File
"/home/anthony/src/py/pyhead/dist/src/Lib/compiler/transformer.py",
line 768, in com_node
    return self._dispatch[node[0]](node[1:])
KeyError: 268


----------------------------------------------------------------------

Comment By: Anthony Baxter (anthonybaxter)
Date: 2004-07-26 09:41

Message:
Logged In: YES 
user_id=29957

Hm. Pilot error on my part. I had to build once to get
graminit.h and graminit.c rebuilt, then rebuild again (after
nuking all .o files) to get it to work properly. *sigh*


----------------------------------------------------------------------

Comment By: Anthony Baxter (anthonybaxter)
Date: 2004-07-26 09:30

Message:
Logged In: YES 
user_id=29957

After applying this patch, any attempts to use the
newly-built python (I deleted graminit.c and graminit.h, to
make sure they were rebuilt) gives the following on any
'import':

*-s*)  CC='gcc -pthread' LDSHARED='gcc -pthread -shared'
OPT='-DNDEBUG -g -O3 -Wall -Wstrict-prototypes' ./python -E
./setup.py -q build;; *)  CC='gcc -pthread' LDSHARED='gcc -pthread -shared'
OPT='-DNDEBUG -g -O3 -Wall -Wstrict-prototypes' ./python -E
./setup.py build;; esac
Traceback (most recent call last):
  File "./setup.py", line 6, in ?
    import sys, os, getopt, imp, re
SystemError: compile_node: unexpected node type
make: *** [sharedmods] Error 1


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=979728&group_id=5470


More information about the Patches mailing list