summaryrefslogtreecommitdiff
path: root/source4/pidl/lib/Parse/Pidl/Typelist.pm
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-02-18 18:44:56 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:48:33 -0500
commit0515f728e64dde0c197aee6180dce79ad281d5f8 (patch)
treea90230e7c7bf5b93a8922852163291f729e39f39 /source4/pidl/lib/Parse/Pidl/Typelist.pm
parentd425796fff07b8bc7b9eb49bc8db71aff9c1161f (diff)
downloadsamba-0515f728e64dde0c197aee6180dce79ad281d5f8.tar.gz
samba-0515f728e64dde0c197aee6180dce79ad281d5f8.tar.bz2
samba-0515f728e64dde0c197aee6180dce79ad281d5f8.zip
r21433: Get rid of the COM support code - it's not used and unmaintained. We can
always bring it back if we need to. This code was getting in the way while refactoring. Add some tests for TDR. Get rid of typedef in lib/registry/tdr_regf.idl and fix the TDR code to be able to deal with it. (This used to be commit 1ad0f99a439f0d52a735b391bf9900d50171aca5)
Diffstat (limited to 'source4/pidl/lib/Parse/Pidl/Typelist.pm')
-rw-r--r--source4/pidl/lib/Parse/Pidl/Typelist.pm51
1 files changed, 27 insertions, 24 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/Typelist.pm b/source4/pidl/lib/Parse/Pidl/Typelist.pm
index 7be7e5a5c3..a098f1ab05 100644
--- a/source4/pidl/lib/Parse/Pidl/Typelist.pm
+++ b/source4/pidl/lib/Parse/Pidl/Typelist.pm
@@ -7,14 +7,14 @@ package Parse::Pidl::Typelist;
require Exporter;
@ISA = qw(Exporter);
-@EXPORT_OK = qw(hasType getType mapType scalar_is_reference expandAlias);
+@EXPORT_OK = qw(hasType getType mapTypeName scalar_is_reference expandAlias);
use vars qw($VERSION);
$VERSION = '0.01';
use Parse::Pidl::Util qw(has_property);
use strict;
-my %typedefs = ();
+my %types = ();
my @reference_scalars = (
"string", "string_array", "nbt_string",
@@ -89,14 +89,14 @@ sub mapScalarType($)
sub addType($)
{
my $t = shift;
- $typedefs{$t->{NAME}} = $t;
+ $types{$t->{NAME}} = $t;
}
sub getType($)
{
my $t = shift;
return undef if not hasType($t);
- return $typedefs{$t};
+ return $types{$t};
}
sub typeIs($$)
@@ -110,7 +110,7 @@ sub typeIs($$)
sub hasType($)
{
my $t = shift;
- return 1 if defined($typedefs{$t});
+ return 1 if defined($types{$t});
return 0;
}
@@ -178,7 +178,22 @@ sub bitmap_type_fn($)
return "uint32";
}
-sub mapType($)
+sub mapType($$)
+{
+ sub mapType($$);
+ my ($t, $n) = @_;
+
+ return mapType($t->{DATA}, $n) if ($t->{TYPE} eq "TYPEDEF");
+ return mapType($t->{DATA}, $n) if ($t->{TYPE} eq "DECLARE");
+ return mapScalarType($n) if ($t->{TYPE} eq "SCALAR");
+ return "enum $n" if ($t->{TYPE} eq "ENUM");
+ return "struct $n" if ($t->{TYPE} eq "STRUCT");
+ return "union $n" if ($t->{TYPE} eq "UNION");
+ return mapScalarType(bitmap_type_fn($t)) if ($t->{TYPE} eq "BITMAP");
+ die("Unknown type $t->{TYPE}");
+}
+
+sub mapTypeName($)
{
my $t = shift;
return "void" unless defined($t);
@@ -189,17 +204,8 @@ sub mapType($)
# Best guess
return "struct $t";
}
- return mapScalarType($t) if ($dt->{DATA}->{TYPE} eq "SCALAR");
- return "enum $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "ENUM");
- return "struct $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "STRUCT");
- return "struct $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "INTERFACE");
- return "union $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "UNION");
-
- if ($dt->{DATA}->{TYPE} eq "BITMAP") {
- return mapScalarType(bitmap_type_fn($dt->{DATA}));
- }
- die("Unknown type $dt->{DATA}->{TYPE}");
+ return mapType($dt, $dt->{NAME});
}
sub LoadIdl($)
@@ -209,17 +215,14 @@ sub LoadIdl($)
foreach my $x (@{$idl}) {
next if $x->{TYPE} ne "INTERFACE";
- # DCOM interfaces can be types as well
- addType({
- NAME => $x->{NAME},
- TYPE => "TYPEDEF",
- DATA => $x
- }) if (has_property($x, "object"));
-
foreach my $y (@{$x->{DATA}}) {
addType($y) if (
$y->{TYPE} eq "TYPEDEF"
- or $y->{TYPE} eq "DECLARE");
+ or $y->{TYPE} eq "DECLARE"
+ or $y->{TYPE} eq "UNION"
+ or $y->{TYPE} eq "STRUCT"
+ or $y->{TYPE} eq "ENUM"
+ or $y->{TYPE} eq "BITMAP");
}
}
}