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)
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);
}
# 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;
'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}
});
}
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}");
}