From 2a9407fad39a472a356adbcdac3c0fa0a4d69a5f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 14 May 2006 00:22:24 +0000 Subject: r15593: Warn about [out] arguments that are not pointers. These can all be fixed by adding [ref] pointers. This will cause a lot of warnings to be outputted by pidl for now. I will fix these gradually over the next few days. We need to avoid [out] arguments that are not pointers because they are not understood by other IDL compilers and don't work with some of our output modules (Samba3, Samba3NDR and ethereal) (This used to be commit c4ab021ee8d93aa74f15deebf64a366b33b7bb9f) --- source4/pidl/lib/Parse/Pidl/NDR.pm | 5 +++++ source4/pidl/lib/Parse/Pidl/ODL.pm | 15 +++++++++------ source4/pidl/lib/Parse/Pidl/Samba3/Client.pm | 5 ----- 3 files changed, 14 insertions(+), 11 deletions(-) (limited to 'source4/pidl') diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm index a4008a1545..3cbf416488 100644 --- a/source4/pidl/lib/Parse/Pidl/NDR.pm +++ b/source4/pidl/lib/Parse/Pidl/NDR.pm @@ -540,6 +540,11 @@ sub ParseFunction($$$) my $e = ParseElement($x); push (@{$e->{DIRECTION}}, "in") if (has_property($x, "in")); push (@{$e->{DIRECTION}}, "out") if (has_property($x, "out")); + + nonfatal($x, "`$e->{NAME}' is [out] argument but not a pointer") + if ($e->{LEVELS}[0]->{TYPE} ne "POINTER") and + grep(/out/, @{$e->{DIRECTION}}); + push (@elements, $e); } diff --git a/source4/pidl/lib/Parse/Pidl/ODL.pm b/source4/pidl/lib/Parse/Pidl/ODL.pm index 082deaea1d..b5d65b6239 100644 --- a/source4/pidl/lib/Parse/Pidl/ODL.pm +++ b/source4/pidl/lib/Parse/Pidl/ODL.pm @@ -15,11 +15,10 @@ $VERSION = '0.01'; # find an interface in an array of interfaces sub get_interface($$) { - my($if) = shift; - my($n) = shift; + my($if,$n) = @_; - foreach(@{$if}) { - if($_->{NAME} eq $n) { return $_; } + foreach(@$if) { + return $_ if($_->{NAME} eq $n); } return 0; @@ -33,13 +32,17 @@ sub FunctionAddObjArgs($) 'NAME' => 'ORPCthis', 'POINTERS' => 0, 'PROPERTIES' => { 'in' => '1' }, - 'TYPE' => 'ORPCTHIS' + 'TYPE' => 'ORPCTHIS', + 'FILE' => $e->{FILE}, + 'LINE' => $e->{LINE} }); unshift(@{$e->{ELEMENTS}}, { 'NAME' => 'ORPCthat', 'POINTERS' => 0, 'PROPERTIES' => { 'out' => '1' }, - 'TYPE' => 'ORPCTHAT' + 'TYPE' => 'ORPCTHAT', + 'FILE' => $e->{FILE}, + 'LINE' => $e->{LINE} }); } diff --git a/source4/pidl/lib/Parse/Pidl/Samba3/Client.pm b/source4/pidl/lib/Parse/Pidl/Samba3/Client.pm index 59f0341d02..9e26e9a21e 100644 --- a/source4/pidl/lib/Parse/Pidl/Samba3/Client.pm +++ b/source4/pidl/lib/Parse/Pidl/Samba3/Client.pm @@ -85,11 +85,6 @@ sub ParseFunction($$) foreach my $e (@{$fn->{ELEMENTS}}) { next unless (grep(/out/, @{$e->{DIRECTION}})); - if ($e->{LEVELS}[0]->{TYPE} ne "POINTER") { - warning($e->{ORIGINAL}, "First element not a pointer for [out] argument"); - next; - } - CopyLevel($e, $e->{LEVELS}[1], $e->{NAME}, "r.$e->{NAME}"); } -- cgit