@@ -632,29 +632,38 @@ def visitField(self, field, name, sum=None, prod=None, depth=0):
632
632
self .emit (line % field .name , depth )
633
633
self .emit ("return 1;" , depth + 1 )
634
634
self .emit ("}" , depth )
635
- if not field .opt :
635
+ if field .seq :
636
636
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 )
641
643
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 )
654
650
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 )
658
667
659
668
self .emit ("int res;" , depth + 1 )
660
669
if field .seq :
0 commit comments