mirror of
https://github.com/samba-team/samba.git
synced 2025-01-25 06:04:04 +03:00
pidl: Add function for determining whether a type has a body.
(This used to be commit 893f4102c93c1c2cd6b836f12644d06d9e31800c)
This commit is contained in:
parent
532154af9b
commit
ad55958140
@ -633,7 +633,7 @@ sub FindNestedTypes($$)
|
||||
sub FindNestedTypes($$);
|
||||
my ($l, $t) = @_;
|
||||
|
||||
return if not defined($t->{ELEMENTS});
|
||||
return unless defined($t->{ELEMENTS});
|
||||
return if ($t->{TYPE} eq "ENUM");
|
||||
return if ($t->{TYPE} eq "BITMAP");
|
||||
|
||||
|
@ -12,7 +12,7 @@ require Exporter;
|
||||
@EXPORT_OK = qw(check_null_pointer GenerateFunctionInEnv GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv NeededFunction NeededElement NeededType $res NeededInterface TypeFunctionName ParseElementPrint);
|
||||
|
||||
use strict;
|
||||
use Parse::Pidl::Typelist qw(hasType getType mapTypeName);
|
||||
use Parse::Pidl::Typelist qw(hasType getType mapTypeName typeHasBody);
|
||||
use Parse::Pidl::Util qw(has_property ParseExpr ParseExprExt print_uuid);
|
||||
use Parse::Pidl::CUtil qw(get_pointer_to get_value_of);
|
||||
use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
|
||||
@ -2543,6 +2543,7 @@ sub ParseInterface($$$)
|
||||
|
||||
# Typedefs
|
||||
foreach my $d (@{$interface->{TYPES}}) {
|
||||
next unless typeHasBody($d);
|
||||
($needed->{TypeFunctionName("ndr_push", $d)}) && $self->ParseTypePushFunction($d, "r");
|
||||
($needed->{TypeFunctionName("ndr_pull", $d)}) && $self->ParseTypePullFunction($d, "r");
|
||||
($needed->{TypeFunctionName("ndr_print", $d)}) && $self->ParseTypePrintFunction($d, "r");
|
||||
|
@ -9,7 +9,7 @@ require Exporter;
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT_OK = qw(hasType getType mapTypeName scalar_is_reference expandAlias
|
||||
mapScalarType addType typeIs is_scalar enum_type_fn
|
||||
bitmap_type_fn mapType
|
||||
bitmap_type_fn mapType typeHasBody
|
||||
);
|
||||
use vars qw($VERSION);
|
||||
$VERSION = '0.01';
|
||||
@ -207,6 +207,19 @@ sub bitmap_type_fn($)
|
||||
return "uint32";
|
||||
}
|
||||
|
||||
sub typeHasBody($)
|
||||
{
|
||||
sub typeHasBody($);
|
||||
my ($e) = @_;
|
||||
|
||||
if ($e->{TYPE} eq "TYPEDEF") {
|
||||
return 0 unless(defined($e->{DATA}));
|
||||
return typeHasBody($e->{DATA});
|
||||
}
|
||||
|
||||
return defined($e->{ELEMENTS});
|
||||
}
|
||||
|
||||
sub mapType($$)
|
||||
{
|
||||
sub mapType($$);
|
||||
|
@ -4,7 +4,7 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More tests => 37;
|
||||
use Test::More tests => 39;
|
||||
use FindBin qw($RealBin);
|
||||
use lib "$RealBin";
|
||||
use Util;
|
||||
@ -275,3 +275,7 @@ ok(not can_contain_deferred({ TYPE => "TYPEDEF",
|
||||
ELEMENTS => [ { TYPE => "uint32" } ]}}));
|
||||
ok(can_contain_deferred({ TYPE => "STRUCT",
|
||||
ELEMENTS => [ { TYPE => "someunknowntype" } ]}));
|
||||
# Make sure the elements for a enum without body aren't filled in
|
||||
ok(not defined(ParseType({TYPE => "ENUM", NAME => "foo" }, "ref")->{ELEMENTS}));
|
||||
# Make sure the elements for a bitmap without body aren't filled in
|
||||
ok(not defined(ParseType({TYPE => "BITMAP", NAME => "foo" }, "ref")->{ELEMENTS}));
|
||||
|
@ -4,11 +4,11 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More tests => 52;
|
||||
use Test::More tests => 54;
|
||||
use FindBin qw($RealBin);
|
||||
use lib "$RealBin";
|
||||
use Util;
|
||||
use Parse::Pidl::Typelist qw(hasType getType mapTypeName expandAlias
|
||||
use Parse::Pidl::Typelist qw(hasType typeHasBody getType mapTypeName expandAlias
|
||||
mapScalarType addType typeIs is_scalar scalar_is_reference
|
||||
enum_type_fn bitmap_type_fn mapType);
|
||||
|
||||
@ -80,3 +80,6 @@ is("uint32_t", mapType({TYPE => "TYPEDEF", DATA => {TYPE => "SCALAR"}}, "uint32"
|
||||
is("void", mapTypeName(undef));
|
||||
is("uint32_t", mapTypeName("uint32"));
|
||||
is("int32_t", mapTypeName("int"));
|
||||
|
||||
ok(not typeHasBody({TYPE => "TYPEDEF", DATA => { TYPE => "STRUCT" }}));
|
||||
ok(typeHasBody({TYPE => "TYPEDEF", DATA => { TYPE => "STRUCT", ELEMENTS => [] }}));
|
||||
|
Loading…
x
Reference in New Issue
Block a user