[Cython] Beginner-friendly tickets
Dag Sverre Seljebotn
dagss at student.matnat.uio.no
Wed Mar 11 21:59:40 CET 2009
Dag Sverre Seljebotn wrote:
> Kurt Smith wrote:
>> On Wed, Mar 11, 2009 at 4:27 AM, Dag Sverre Seljebotn
>> <dagss at student.matnat.uio.no> wrote:
>>> Since there's been some interest in how to get started coding on Cython
>>> on the mailing list lately, I thought I'd call attention to these two
>>> tickets:
>>>
>>> http://trac.cython.org/cython_trac/ticket/158
>>> http://trac.cython.org/cython_trac/ticket/203
>>>
>>> These seems to fit the sweet spot of not being too hard to fix for
>>> beginners (with some mentoring), but not being completely trivial either.
>>>
>>> I'm happy to provide an attack strategy/small amount of mentoring for
>>> these tickets if anybody's interested.
>> Hi Dag,
>>
>> I'm interested in working on #158 if it isn't already claimed.
>
> Nice! I haven't heard anything on #158 yet, so consider it yours. I've
> assigned both tickets now in trac.
>
> You may want to get Trac accounts if you haven't already BTW, send an
> .htpasswd-file to Robert for that.
>
>> One solution (as mentioned in the ticket comments) would be to raise a
>> compilation error since the s variable is declared after it's used. I
>> imagine some checks would be in order to ensure this, but I don't have
>> ideas about where to start.
>
> Yep, that's the solution I'm thinking about.
>
> The Cython "parse tree" is processed in stages. Two of those are
> analyse_declarations and analyse_expressions. The problem here is that
> "cdef str s" is handled in the analyse_declarations step and then
> disappears; while the analyse_expressions happen afterwards, and cannot
> know at which point in the source the declaration happened.
>
> So the analyse declarations phase must do this check.
>
> You will need to do your work in AnalyseDeclarationsTransform, in
> ParseTreeTransforms.py. It is a "filter" on the parse tree, and each
> method is called as you go according to the type of the node. Read some
> of the different transforms in that file to get the idea (to see the
> parse tree, insert e.g. "print node.dump()" at the beginning of
> visit_ModuleNode).
>
> Now:
>
> a) Keep a dict in self containing the names that has been referenced up
> to that point in the given scope (i.e. in visit_ModuleNode and
> visit_FuncDefNode you need to push/pop which dict one is using
> before/after processing the contents).
Actually I meant to say "set" everywhere I said "dict".
--
Dag Sverre
More information about the Cython-dev
mailing list