diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2005-06-01 00:00:50 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:17:21 -0500 |
commit | 03c2d642a620380d96a9e745ceb1cd19ffea2160 (patch) | |
tree | 351938707b57f8f3ed29a966d48d858f562d250d /source4/build/pidl/validator.pm | |
parent | 5ec5e7aa29ef4abf6b60a0de4947693d3e587f74 (diff) | |
download | samba-03c2d642a620380d96a9e745ceb1cd19ffea2160.tar.gz samba-03c2d642a620380d96a9e745ceb1cd19ffea2160.tar.bz2 samba-03c2d642a620380d96a9e745ceb1cd19ffea2160.zip |
r7159: Improve the messages from pidl's validator module.
Change the IDL file for the echo interface to match the one we use for
Windows. The only thing different between the two files currently is the
names of the scalar types and the handling of strings.
(This used to be commit b264c61061d222347919837600adf809fbadfb13)
Diffstat (limited to 'source4/build/pidl/validator.pm')
-rw-r--r-- | source4/build/pidl/validator.pm | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/source4/build/pidl/validator.pm b/source4/build/pidl/validator.pm index ec4ad4503b..8fedef5ce8 100644 --- a/source4/build/pidl/validator.pm +++ b/source4/build/pidl/validator.pm @@ -149,6 +149,25 @@ sub ValidProperties($$) } } +sub mapToScalar($) +{ + my $t = shift; + my $ti = typelist::getType($t); + + if (not defined ($ti)) { + return undef; + } elsif ($ti->{DATA}->{TYPE} eq "ENUM") { + return typelist::enum_type_fn($ti->{DATA}); + } elsif ($ti->{DATA}->{TYPE} eq "BITMAP") { + return typelist::enum_type_fn($ti->{DATA}); + } elsif ($ti->{DATA}->{TYPE} eq "SCALAR") { + return $t; + } + + return undef; +} + + ##################################################################### # parse a struct sub ValidElement($) @@ -174,8 +193,19 @@ sub ValidElement($) my $discriminator_type = util::has_property($type, "switch_type"); $discriminator_type = "uint32" unless defined ($discriminator_type); - if ($e2->{TYPE} ne $discriminator_type) { - print el_name($e) . ": Warning: switch_is() is of type $e2->{TYPE}, while discriminator type for union $type->{NAME} is $discriminator_type\n"; + my $t1 = mapToScalar($discriminator_type); + + if (not defined($t1)) { + fatal($e, el_name($e) . ": unable to map discriminator type '$discriminator_type' to scalar"); + } + + my $t2 = mapToScalar($e2->{TYPE}); + if (not defined($t2)) { + fatal($e, el_name($e) . ": unable to map variable used for switch_is() to scalar"); + } + + if ($t1 ne $t2) { + nonfatal($e, el_name($e) . ": switch_is() is of type $e2->{TYPE} ($t2), while discriminator type for union $type->{NAME} is $discriminator_type ($t1)"); } } } |