pidl/Python: avoid generation of dead code in FromUnionToPythonFunction()
authorStefan Metzmacher <metze@samba.org>
Tue, 9 May 2017 14:01:39 +0000 (16:01 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 18 Feb 2019 11:48:38 +0000 (12:48 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
pidl/lib/Parse/Pidl/Samba4/Python.pm

index a46bebe51d0814ab0f6dec0bcf5252536b0818dc..b313980968765eeec74c209acaa0ba1204898418 100644 (file)
@@ -123,14 +123,16 @@ sub FromUnionToPythonFunction($$$$)
 {
        my ($self, $mem_ctx, $type, $switch, $name) = @_;
 
-       $self->pidl("PyObject *ret;");
+       my $has_default = 0;
+
+       $self->pidl("PyObject *ret = NULL;");
        $self->pidl("");
 
        $self->pidl("switch ($switch) {");
-       $self->indent;
 
        foreach my $e (@{$type->{ELEMENTS}}) {
                $self->pidl("$e->{CASE}:");
+               if ($e->{CASE} eq "default") { $has_default = 1; }
 
                $self->indent;
 
@@ -141,17 +143,24 @@ sub FromUnionToPythonFunction($$$$)
                        $self->pidl("Py_INCREF(ret);");
                }
 
-               $self->pidl("return ret;");
+               $self->pidl("break;");
                $self->pidl("");
 
                $self->deindent;
        }
 
-       $self->deindent;
-       $self->pidl("}");
+       if (!$has_default) {
+               $self->pidl("default:");
+               $self->indent;
+               $self->pidl("PyErr_SetString(PyExc_TypeError, \"unknown union level\");");
+               $self->pidl("ret = NULL;");
+               $self->pidl("break;");
+               $self->deindent;
+       }
 
-       $self->pidl("PyErr_SetString(PyExc_TypeError, \"unknown union level\");");
-       $self->pidl("return NULL;");
+       $self->pidl("}");
+       $self->pidl("");
+       $self->pidl("return ret;");
 }
 
 sub FromPythonToUnionFunction($$$$$)