2010/11/7 Vitja Makarov <[email protected]>:
> 2010/11/7 Stefan Behnel <[email protected]>:
>> Vitja Makarov, 06.11.2010 21:37:
>>> I'm now trying to implement this:
>>>
>>> Is it correct:
>>>
>>> If parser detect use of kwargs in class definition it creates
>>> Py3ClassDefNode
>>>
>>> I add this classes:
>>> Nodes.Py3ClassDefNode - ClassDefNode replacement for python3 style classes
>>> ExprNodes.Py3ClassNode - ClassNode replacement for python3 style classes
>>>
>>> ExprNdoes.Py3MetaclassNode - contains metaclass
>>> Holds value returned by __Pyx_Py3MetaclassGet(bases, mkw)
>>>
>>> ExprNodes.Py3NamespaceNode - contains namespace object
>>> Value returned by __Pyx_Py3MetaclassPrepare(metaclass, base, name,
>>> mkw), that calls __prepare__ if any.
>>
>> Why do you think these new classes are necessary?
>>
>
> I think this objects are required to represent metaclass and namespace.
> If we want real support for __prepare__ (simple version is attached in trac)
>
> 1. extract metaclass from bases and keywordargs
> 2. create namespace by calling metaclass __preapre__
> 3. fill namespace with class body
> 4. create class
>
> I don't want to reuse ClassDefNode as it differs too much. To many if/else.
> So Py3ClassNode should hold metaclass and namespace objects, I add
> Py3MetaclassNode and Py3NamespaceNode.
>
> Can I use PyTempNode for metaclass and namespace?
>
> Is there another way?
>
Another way:
if py3_metaclass:
mkw = keyword_args.copy()
mkw.update(starstar_args)
metaclass = py3_metaclass_get(bases, mkw)
dict = py3_namespace_prepare(metaclass, bases, name, mkw)
else:
dict = dict()
# construct class body here...
dict['foo'] = 'bar'
if py3_metaclass:
classobj = py3_metaclass_new(metaclass, name, bases, dict, mkw, modname)
else:
classobj = create_class(bases, dict, name, modname)
2 new object types here: metaclass, namespace.
How can this all be done without creating new Node types for metaclass and dict?
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev