@@ -632,29 +632,38 @@ def visitField(self, field, name, sum=None, prod=None, depth=0):
632632 self .emit (line % field .name , depth )
633633 self .emit ("return 1;" , depth + 1 )
634634 self .emit ("}" , depth )
635- if not field .opt :
635+ if field .seq :
636636 self .emit ("if (tmp == NULL) {" , depth )
637- message = "required field \\ \" %s\\ \" missing from %s" % (field .name , name )
638- format = "PyErr_SetString(PyExc_TypeError, \" %s\" );"
639- self .emit (format % message , depth + 1 , reflow = False )
640- self .emit ("return 1;" , depth + 1 )
637+ self .emit ("tmp = PyList_New(0);" , depth + 1 )
638+ self .emit ("if (tmp == NULL) {" , depth + 1 )
639+ self .emit ("return 1;" , depth + 2 )
640+ self .emit ("}" , depth + 1 )
641+ self .emit ("}" , depth )
642+ self .emit ("{" , depth )
641643 else :
642- self .emit ("if (tmp == NULL || tmp == Py_None) {" , depth )
643- self .emit ("Py_CLEAR(tmp);" , depth + 1 )
644- if self .isNumeric (field ):
645- if field .name in self .attribute_special_defaults :
646- self .emit (
647- "%s = %s;" % (field .name , self .attribute_special_defaults [field .name ]),
648- depth + 1 ,
649- )
650- else :
651- self .emit ("%s = 0;" % field .name , depth + 1 )
652- elif not self .isSimpleType (field ):
653- self .emit ("%s = NULL;" % field .name , depth + 1 )
644+ if not field .opt :
645+ self .emit ("if (tmp == NULL) {" , depth )
646+ message = "required field \\ \" %s\\ \" missing from %s" % (field .name , name )
647+ format = "PyErr_SetString(PyExc_TypeError, \" %s\" );"
648+ self .emit (format % message , depth + 1 , reflow = False )
649+ self .emit ("return 1;" , depth + 1 )
654650 else :
655- raise TypeError ("could not determine the default value for %s" % field .name )
656- self .emit ("}" , depth )
657- self .emit ("else {" , depth )
651+ self .emit ("if (tmp == NULL || tmp == Py_None) {" , depth )
652+ self .emit ("Py_CLEAR(tmp);" , depth + 1 )
653+ if self .isNumeric (field ):
654+ if field .name in self .attribute_special_defaults :
655+ self .emit (
656+ "%s = %s;" % (field .name , self .attribute_special_defaults [field .name ]),
657+ depth + 1 ,
658+ )
659+ else :
660+ self .emit ("%s = 0;" % field .name , depth + 1 )
661+ elif not self .isSimpleType (field ):
662+ self .emit ("%s = NULL;" % field .name , depth + 1 )
663+ else :
664+ raise TypeError ("could not determine the default value for %s" % field .name )
665+ self .emit ("}" , depth )
666+ self .emit ("else {" , depth )
658667
659668 self .emit ("int res;" , depth + 1 )
660669 if field .seq :
0 commit comments