$length = ParseExpr($length, $env, $e);
$self->pidl("$py_var = PyList_New($length);");
$self->fail_on_null($py_var, $fail);
+ my $fail2 = "Py_DECREF($py_var); $fail";
$self->pidl("{");
$self->indent;
my $counter = "$e->{NAME}_cntr_$l->{LEVEL_INDEX}";
$self->pidl("for ($counter = 0; $counter < ($length); $counter++) {");
$self->indent;
my $member_var = "py_$e->{NAME}_$l->{LEVEL_INDEX}";
+ my $ret_var = "ret_$e->{NAME}_$l->{LEVEL_INDEX}";
$self->pidl("PyObject *$member_var;");
- $self->ConvertObjectToPythonLevel($var_name, $env, $e, $nl, $var_name."[$counter]", $member_var, $fail, $recurse);
- $self->pidl("PyList_SetItem($py_var, $counter, $member_var);");
+ $self->pidl("int $ret_var;");
+ $self->ConvertObjectToPythonLevel($var_name, $env, $e, $nl, $var_name."[$counter]", $member_var, $fail2, $recurse);
+ $self->pidl("$ret_var = PyList_SetItem($py_var, $counter, $member_var);");
+ $self->pidl("if ($ret_var != 0) {");
+ $self->indent;
+ $self->pidl($fail2);
+ $self->deindent;
+ $self->pidl("}");
$self->deindent;
$self->pidl("}");
$self->deindent;