Patches item #1686487, was opened at 2007-03-22 23:27 Message generated for change (Comment added) made by belopolsky You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1686487&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Core (C code) Group: Python 2.6 Status: Open Resolution: None Priority: 5 Private: No Submitted By: Alexander Belopolsky (belopolsky) Assigned to: Nobody/Anonymous (nobody) Summary: Allow any mapping after ** in calls Initial Comment: Python allows arbitrary sequences after * in calls, but an expression following ** must be a (subclass of) dict. The attached patch makes Python accept arbitrary mappings after **. ---------------------------------------------------------------------- >Comment By: Alexander Belopolsky (belopolsky) Date: 2007-04-18 15:53 Message: Logged In: YES user_id=835142 Originator: YES File Added: star-star-mapping.patch ---------------------------------------------------------------------- Comment By: Alexander Belopolsky (belopolsky) Date: 2007-04-18 15:38 Message: Logged In: YES user_id=835142 Originator: YES The proposed patch handles ** arguments similar to the way * arguments are treated. If the expression following ** evaluates to an object that is not a dictionary, the new code attempts to update a new dictionary with that object. This procedure is closely similar to what PySequence_Tuple does with * arguments. (Python API does not provide PyMapping_Dict.) If new dictionary is succesfully created and updated, it replaces the original ** argument. If that attempt fails because kwdict is not a mapping (does not have a 'keys' attribute, a type error is raised explaining that a mapping is expected. All other errors, e.g. MemoryError are percolated up. (I am am removing the previous versions of the patch.) File Added: star-star-mapping.patch ---------------------------------------------------------------------- Comment By: Alexander Belopolsky (belopolsky) Date: 2007-04-18 14:34 Message: Logged In: YES user_id=835142 Originator: YES Georg, Thanks for reposting my proposal. Since BDFL is +1 on the idea, I feel motivated to polish the patch. In your early comment you noted that kwdict == NULL check may be superficial. I agree. It does not look like it is possible that ext_do_call is called with CALL_FLAG_KW set and a null pointer at the top of the stack. It looks like this may only happen if the stack is corrupted by a misbehaving c extension. In this case, however, throwing a type error is too gentle. PyErr_BadInternalCall() seems to be more appropriate if anything at all. I propose to eliminate the null check for kwdict alltogether. This would be consistent with the way stararg is handled later in this function. I am going to run the testsuit without the null check and will post a revised patch shortly. ---------------------------------------------------------------------- Comment By: Alexander Belopolsky (belopolsky) Date: 2007-04-18 12:02 Message: Logged In: YES user_id=835142 Originator: YES I have asked on python-dev almost a month ago, but did not get any response: http://mail.python.org/pipermail/python-dev/2007-March/072321.html I have recently posted another message that got no response as well: http://mail.python.org/pipermail/python-dev/2007-April/072653.html Is it possible that my messages are not being delivered to the list? ---------------------------------------------------------------------- Comment By: Alexander Belopolsky (belopolsky) Date: 2007-03-23 15:44 Message: Logged In: YES user_id=835142 Originator: YES I've fixed the flaws in star-star-mapping-1.patch . I will ask on python-dev about the feature. If the proposal is accepted, I will probably refactor the code to avoid using the second goto label. File Added: star-star-mapping-1.patch ---------------------------------------------------------------------- Comment By: Georg Brandl (gbrandl) Date: 2007-03-23 14:45 Message: Logged In: YES user_id=849994 Originator: NO Two flaws: - what if kwdict is NULL? Shouldn't happen, but the old version raises an error in this case. - if PyDict_Update fails, tmpdict is leaked. Please ask on python-dev whether to include this feature. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1686487&group_id=5470 _______________________________________________ Patches mailing list Patches@python.org http://mail.python.org/mailman/listinfo/patches