summaryrefslogtreecommitdiff
path: root/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
diff options
context:
space:
mode:
Diffstat (limited to 'source4/pidl/lib/Parse/Pidl/Samba4/Python.pm')
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/Python.pm17
1 files changed, 10 insertions, 7 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm b/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
index 60d0dafc8a..74cec5a827 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -9,8 +9,9 @@ use Exporter;
@ISA = qw(Exporter);
use strict;
+use Parse::Pidl qw(warning fatal);
use Parse::Pidl::Typelist qw(hasType resolveType getType mapTypeName expandAlias);
-use Parse::Pidl::Util qw(has_property ParseExpr);
+use Parse::Pidl::Util qw(has_property ParseExpr unmake_str);
use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred is_charset_array);
use Parse::Pidl::CUtil qw(get_value_of get_pointer_to);
use Parse::Pidl::Samba4::Header qw(GenerateFunctionInEnv GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv);
@@ -59,8 +60,8 @@ sub Import
my $self = shift;
my @imports = @_;
foreach (@imports) {
- s/\.idl\"$//;
- s/^\"//;
+ $_ = unmake_str($_);
+ s/\.idl$//;
$self->pidl_hdr("#include \"librpc/gen_ndr/py_$_\.h\"\n");
}
}
@@ -846,7 +847,7 @@ sub ConvertObjectFromPythonData($$$$$$)
return;
}
- if ($actual_ctype->{TYPE} eq "STRUCT") {
+ if ($actual_ctype->{TYPE} eq "STRUCT" or $actual_ctype->{TYPE} eq "INTERFACE") {
$self->pidl("PY_CHECK_TYPE($ctype->{NAME}, $cvar, $fail);");
$self->assign($target, "py_talloc_get_ptr($cvar)");
return;
@@ -889,7 +890,7 @@ sub ConvertObjectFromPythonData($$$$$$)
return;
}
- die("unknown type ".mapTypeName($ctype) . ": $cvar");
+ fatal($ctype, "unknown type $actual_ctype->{TYPE} for ".mapTypeName($ctype) . ": $cvar");
}
@@ -1025,11 +1026,13 @@ sub ConvertObjectToPythonData($$$$$)
return $self->ConvertScalarToPython(Parse::Pidl::Typelist::bitmap_type_fn($actual_ctype), $cvar);
} elsif ($actual_ctype->{TYPE} eq "SCALAR") {
return $self->ConvertScalarToPython($actual_ctype->{NAME}, $cvar);
- } elsif ($actual_ctype->{TYPE} eq "STRUCT") {
+ } elsif ($actual_ctype->{TYPE} eq "UNION") {
+ fatal($ctype, "union without discriminant: " . mapTypeName($ctype) . ": $cvar");
+ } elsif ($actual_ctype->{TYPE} eq "STRUCT" or $actual_ctype->{TYPE} eq "INTERFACE") {
return "py_talloc_import_ex(&$ctype->{NAME}_Type, $mem_ctx, $cvar)";
}
- die("unknown type ".mapTypeName($ctype) . ": $cvar");
+ fatal($ctype, "unknown type $actual_ctype->{TYPE} for ".mapTypeName($ctype) . ": $cvar");
}
sub fail_on_null($$$)