mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
r21573: Remove more code that assumed all types are typedefs.
This commit is contained in:
parent
4d28396f09
commit
bbbfbfa870
@ -35,7 +35,7 @@ use vars qw($VERSION);
|
||||
$VERSION = '0.01';
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(GetPrevLevel GetNextLevel ContainsDeferred ContainsString);
|
||||
@EXPORT_OK = qw(GetElementLevelTable ParseElement ValidElement align_type);
|
||||
@EXPORT_OK = qw(GetElementLevelTable ParseElement ValidElement align_type mapToScalar);
|
||||
|
||||
use strict;
|
||||
use Parse::Pidl qw(warning fatal);
|
||||
@ -880,17 +880,19 @@ sub ValidProperties($$)
|
||||
|
||||
sub mapToScalar($)
|
||||
{
|
||||
sub mapToScalar($);
|
||||
my $t = shift;
|
||||
return $t->{NAME} if (ref($t) eq "HASH" and $t->{TYPE} eq "SCALAR");
|
||||
my $ti = getType($t);
|
||||
|
||||
if (not defined ($ti)) {
|
||||
return undef;
|
||||
} elsif ($ti->{DATA}->{TYPE} eq "ENUM") {
|
||||
return Parse::Pidl::Typelist::enum_type_fn($ti->{DATA});
|
||||
} elsif ($ti->{DATA}->{TYPE} eq "BITMAP") {
|
||||
return Parse::Pidl::Typelist::enum_type_fn($ti->{DATA});
|
||||
} elsif ($ti->{DATA}->{TYPE} eq "SCALAR") {
|
||||
return $t;
|
||||
} elsif ($ti->{TYPE} eq "TYPEDEF") {
|
||||
return mapToScalar($ti->{DATA});
|
||||
} elsif ($ti->{TYPE} eq "ENUM") {
|
||||
return Parse::Pidl::Typelist::enum_type_fn($ti);
|
||||
} elsif ($ti->{TYPE} eq "BITMAP") {
|
||||
return Parse::Pidl::Typelist::bitmap_type_fn($ti);
|
||||
}
|
||||
|
||||
return undef;
|
||||
|
@ -107,8 +107,13 @@ sub getType($)
|
||||
sub typeIs($$)
|
||||
{
|
||||
my ($t,$tt) = @_;
|
||||
|
||||
return 1 if (hasType($t) and getType($t)->{DATA}->{TYPE} eq $tt);
|
||||
|
||||
if (ref($t) eq "HASH") {
|
||||
return 1 if ($t->{TYPE} eq $tt);
|
||||
return 0;
|
||||
}
|
||||
return 1 if (hasType($t) and getType($t)->{TYPE} eq "TYPEDEF" and
|
||||
getType($t)->{DATA}->{TYPE} eq $tt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -116,6 +121,7 @@ sub hasType($)
|
||||
{
|
||||
my $t = shift;
|
||||
if (ref($t) eq "HASH") {
|
||||
return 1 if (not defined($t->{NAME}));
|
||||
return 1 if (defined($types{$t->{NAME}}) and
|
||||
$types{$t->{NAME}}->{TYPE} eq $t->{TYPE});
|
||||
return 0;
|
||||
@ -128,10 +134,12 @@ sub is_scalar($)
|
||||
{
|
||||
my $type = shift;
|
||||
|
||||
return 0 unless(hasType($type));
|
||||
return 1 if (ref($type) eq "HASH" and $type->{TYPE} eq "SCALAR");
|
||||
|
||||
if (my $dt = getType($type)->{DATA}->{TYPE}) {
|
||||
return 1 if ($dt eq "SCALAR" or $dt eq "ENUM" or $dt eq "BITMAP");
|
||||
if (my $dt = getType($type)) {
|
||||
return is_scalar($dt->{DATA}) if ($dt->{TYPE} eq "TYPEDEF");
|
||||
return 1 if ($dt->{TYPE} eq "SCALAR" or $dt->{TYPE} eq "ENUM" or
|
||||
$dt->{TYPE} eq "BITMAP");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -4,12 +4,12 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More tests => 17;
|
||||
use Test::More tests => 22;
|
||||
use FindBin qw($RealBin);
|
||||
use lib "$RealBin";
|
||||
use Util;
|
||||
use Parse::Pidl::Util qw(MyDumper);
|
||||
use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type);
|
||||
use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type mapToScalar);
|
||||
|
||||
# Case 1
|
||||
|
||||
@ -211,3 +211,10 @@ is(align_type({ TYPE => "STRUCT", "NAME" => "bla",
|
||||
ELEMENTS => [ { TYPE => "uint16" } ] }), 4);
|
||||
is(align_type({ TYPE => "STRUCT", "NAME" => "bla",
|
||||
ELEMENTS => [ { TYPE => "uint8" } ] }), 4);
|
||||
|
||||
is(mapToScalar("someverymuchnotexistingtype"), undef);
|
||||
is(mapToScalar("uint32"), "uint32");
|
||||
is(mapToScalar({TYPE => "ENUM", PARENT => { PROPERTIES => { enum8bit => 1 } } }), "uint8");
|
||||
is(mapToScalar({TYPE => "BITMAP", PROPERTIES => { bitmap64bit => 1 } }),
|
||||
"hyper");
|
||||
is(mapToScalar({TYPE => "TYPEDEF", DATA => {TYPE => "ENUM", PARENT => { PROPERTIES => { enum8bit => 1 } } }}), "uint8");
|
||||
|
@ -4,7 +4,7 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Test::More tests => 38;
|
||||
use Test::More tests => 50;
|
||||
use FindBin qw($RealBin);
|
||||
use lib "$RealBin";
|
||||
use Util;
|
||||
@ -34,14 +34,27 @@ is_deeply(getType("uint16"), {
|
||||
DATA => { NAME => "uint16", TYPE => "SCALAR" }});
|
||||
|
||||
is(0, typeIs("someUnknownType", "ENUM"));
|
||||
is(0, typeIs("foo", "ENUM"));
|
||||
addType({NAME => "mytypedef", TYPE => "TYPEDEF", DATA => { TYPE => "ENUM" }});
|
||||
is(1, typeIs("mytypedef", "ENUM"));
|
||||
is(0, typeIs("mytypedef", "BITMAP"));
|
||||
is(1, typeIs({ TYPE => "ENUM"}, "ENUM"));
|
||||
is(0, typeIs({ TYPE => "BITMAP"}, "ENUM"));
|
||||
is(1, typeIs("uint32", "SCALAR"));
|
||||
is(0, typeIs("uint32", "ENUM"));
|
||||
|
||||
is(1, hasType("foo"));
|
||||
is(0, hasType("nonexistant"));
|
||||
is(0, hasType({TYPE => "ENUM", NAME => "someUnknownType"}));
|
||||
is(1, hasType({TYPE => "ENUM", NAME => "foo"}));
|
||||
is(1, hasType({TYPE => "ENUM"}));
|
||||
is(1, hasType({TYPE => "STRUCT"}));
|
||||
|
||||
is(1, is_scalar("uint32"));
|
||||
is(0, is_scalar("nonexistant"));
|
||||
is(1, is_scalar({TYPE => "ENUM"}));
|
||||
is(0, is_scalar({TYPE => "STRUCT"}));
|
||||
is(1, is_scalar({TYPE => "TYPEDEF", DATA => {TYPE => "ENUM" }}));
|
||||
|
||||
is(1, scalar_is_reference("string"));
|
||||
is(0, scalar_is_reference("uint32"));
|
||||
|
Loading…
Reference in New Issue
Block a user