Add support for double type in pidl.
[sfrench/samba-autobuild/.git] / pidl / lib / Parse / Pidl / Typelist.pm
index c5c458ac6b9cc1b8f99a6ed14cbf788539513c76..e63b3c990f302271ccdcf78473243212d00f1207 100644 (file)
@@ -8,7 +8,7 @@ package Parse::Pidl::Typelist;
 require Exporter;
 @ISA = qw(Exporter);
 @EXPORT_OK = qw(hasType getType resolveType mapTypeName scalar_is_reference expandAlias
-                           mapScalarType addType typeIs is_scalar enum_type_fn
+                           mapScalarType addType typeIs is_signed is_scalar enum_type_fn
                                bitmap_type_fn mapType typeHasBody
 );
 use vars qw($VERSION);
@@ -38,6 +38,7 @@ my %scalars = (
        "dlong"         => "int64_t",
        "udlong"        => "uint64_t",
        "udlongr"       => "uint64_t",
+       "double"        => "double",
        "pointer"       => "void*",
        "DATA_BLOB"     => "DATA_BLOB",
        "string"        => "const char *",
@@ -145,6 +146,19 @@ sub hasType($)
        return 0;
 }
 
+sub is_signed($)
+{
+    my $t = shift;
+
+    return ($t eq "int8"
+           or $t eq "int16"
+           or $t eq "int32"
+           or $t eq "dlong"
+           or $t eq "int"
+           or $t eq "long"
+           or $t eq "short");
+}
+
 sub is_scalar($)
 {
        sub is_scalar($);
@@ -177,6 +191,7 @@ sub RegisterScalars()
                addType({
                        NAME => $_,
                        TYPE => "TYPEDEF",
+                       BASEFILE => "<builtin>",
                        DATA => {
                                TYPE => "SCALAR",
                                NAME => $_
@@ -266,9 +281,10 @@ sub mapTypeName($)
        return mapType($dt, $dt->{NAME});
 }
 
-sub LoadIdl($)
+sub LoadIdl($;$)
 {
-       my ($idl) = @_;
+       my $idl = shift;
+       my $basename = shift;
 
        foreach my $x (@{$idl}) {
                next if $x->{TYPE} ne "INTERFACE";
@@ -277,16 +293,19 @@ sub LoadIdl($)
                addType({
                        NAME => $x->{NAME},
                        TYPE => "TYPEDEF",
-                       DATA => $x
+                       DATA => $x,
+                       BASEFILE => $basename,
                        }) if (has_property($x, "object"));
 
                foreach my $y (@{$x->{DATA}}) {
-                       addType($y) if (
-                               $y->{TYPE} eq "TYPEDEF" 
-                                or $y->{TYPE} eq "UNION"
-                                or $y->{TYPE} eq "STRUCT"
-                        or $y->{TYPE} eq "ENUM"
-                        or $y->{TYPE} eq "BITMAP");
+                       if ($y->{TYPE} eq "TYPEDEF" 
+                               or $y->{TYPE} eq "UNION"
+                               or $y->{TYPE} eq "STRUCT"
+                       or $y->{TYPE} eq "ENUM"
+                       or $y->{TYPE} eq "BITMAP") {
+                               $y->{BASEFILE} = $basename;
+                               addType($y);
+                       }
                }
        }
 }