]> granicus.if.org Git - python/commitdiff
Issue #20390: Final fix, for generating NoPositional/NoKeyword for __init__ calls.
authorLarry Hastings <larry@hastings.org>
Sun, 26 Jan 2014 06:01:12 +0000 (22:01 -0800)
committerLarry Hastings <larry@hastings.org>
Sun, 26 Jan 2014 06:01:12 +0000 (22:01 -0800)
Misc/NEWS
Modules/clinic/_bz2module.c.h
Tools/clinic/clinic.py

index f9ff1bef297a5ac774f87630ec97f9cb82992579..2f7bdaeb9eb11f9714f9115ccdf707683c957331 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -133,7 +133,7 @@ Library
 IDLE
 ----
 
---Issue #17390: Add Python version to Idle editor window title bar.
+- Issue #17390: Add Python version to Idle editor window title bar.
   Original patches by Edmond Burnett and Kent Johnson.
 
 - Issue #18960: IDLE now ignores the source encoding declaration on the second
index 68250af86ca4a5415dce55ce17335fd60449066f..161100234cf48e9b8668b7d84ec2f749de64c795 100644 (file)
@@ -75,7 +75,8 @@ _bz2_BZ2Compressor___init__(PyObject *self, PyObject *args, PyObject *kwargs)
     int return_value = -1;
     int compresslevel = 9;
 
-    if (!_PyArg_NoKeywords("BZ2Compressor", kwargs))
+    if ((Py_TYPE(self) == &BZ2Compressor_Type) &&
+        !_PyArg_NoKeywords("BZ2Compressor", kwargs))
         goto exit;
     if (!PyArg_ParseTuple(args,
         "|i:BZ2Compressor",
@@ -137,13 +138,15 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs)
 {
     int return_value = -1;
 
-    if (!_PyArg_NoPositional("BZ2Decompressor", args))
+    if ((Py_TYPE(self) == &BZ2Decompressor_Type) &&
+        !_PyArg_NoPositional("BZ2Decompressor", args))
         goto exit;
-    if (!_PyArg_NoKeywords("BZ2Decompressor", kwargs))
+    if ((Py_TYPE(self) == &BZ2Decompressor_Type) &&
+        !_PyArg_NoKeywords("BZ2Decompressor", kwargs))
         goto exit;
     return_value = _bz2_BZ2Decompressor___init___impl((BZ2Decompressor *)self);
 
 exit:
     return return_value;
 }
-/*[clinic end generated code: checksum=9bb33ae7d35494b7a5365f03f390e4b5b8b1bc49]*/
+/*[clinic end generated code: checksum=4ade1dba3921a8bd8a614e5417f7654d8fb10be5]*/
index 184bb39057fdd87c7b63e33a48dd4e5f827c03b5..f3fe3c140deb9adfbd6cd474858b37bf87663e9b 100755 (executable)
@@ -2593,11 +2593,21 @@ class self_converter(CConverter):
     def set_template_dict(self, template_dict):
         template_dict['self_name'] = self.name
         template_dict['self_type'] = self.parser_type
-        if ((self.function.kind == METHOD_NEW) and
-            self.function.cls and
-            self.function.cls.typedef):
-            template_dict['self_type_object'] = self.function.cls.type_object
-            template_dict['self_type_check'] = '({self_name} == {self_type_object}) &&\n        '.format_map(template_dict)
+        kind = self.function.kind
+        cls = self.function.cls
+
+        if ((kind in (METHOD_NEW, METHOD_INIT)) and cls and cls.typedef):
+            if kind == METHOD_NEW:
+                passed_in_type = self.name
+            else:
+                passed_in_type = 'Py_TYPE({})'.format(self.name)
+
+            line = '({passed_in_type} == {type_object}) &&\n        '
+            d = {
+                'type_object': self.function.cls.type_object,
+                'passed_in_type': passed_in_type
+                }
+            template_dict['self_type_check'] = line.format_map(d)