pidl: Remove declare tests, add more tests for typedef.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 12 Jan 2008 20:21:14 +0000 (21:21 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 12 Jan 2008 20:21:14 +0000 (21:21 +0100)
source/pidl/lib/Parse/Pidl/IDL.pm
source/pidl/lib/Parse/Pidl/NDR.pm
source/pidl/tests/ndr.pl
source/pidl/tests/typelist.pl

index 5956c43e43b8c1e08ca9bf3e93f60ce45ad7566d..35e1d7bcd75ee4ded7f24cd0b903aa63cf3a415f 100644 (file)
@@ -1744,43 +1744,43 @@ sub new {
        [#Rule 2
                 'idl', 2,
 sub
-#line 19 "pidl/idl.yp"
+#line 19 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 3
                 'idl', 2,
 sub
-#line 20 "pidl/idl.yp"
+#line 20 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 4
                 'idl', 2,
 sub
-#line 21 "pidl/idl.yp"
+#line 21 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 5
                 'idl', 2,
 sub
-#line 22 "pidl/idl.yp"
+#line 22 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 6
                 'idl', 2,
 sub
-#line 23 "pidl/idl.yp"
+#line 23 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 7
                 'idl', 2,
 sub
-#line 24 "pidl/idl.yp"
+#line 24 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 8
                 'import', 3,
 sub
-#line 27 "pidl/idl.yp"
+#line 27 "idl.yp"
 {{
                        "TYPE" => "IMPORT", 
                        "PATHS" => $_[2],
@@ -1791,7 +1791,7 @@ sub
        [#Rule 9
                 'include', 3,
 sub
-#line 34 "pidl/idl.yp"
+#line 34 "idl.yp"
 {{ 
                        "TYPE" => "INCLUDE", 
                        "PATHS" => $_[2],
@@ -1802,7 +1802,7 @@ sub
        [#Rule 10
                 'importlib', 3,
 sub
-#line 41 "pidl/idl.yp"
+#line 41 "idl.yp"
 {{ 
                        "TYPE" => "IMPORTLIB", 
                        "PATHS" => $_[2],
@@ -1813,19 +1813,19 @@ sub
        [#Rule 11
                 'commalist', 1,
 sub
-#line 50 "pidl/idl.yp"
+#line 50 "idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 12
                 'commalist', 3,
 sub
-#line 51 "pidl/idl.yp"
+#line 51 "idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
        [#Rule 13
                 'coclass', 7,
 sub
-#line 55 "pidl/idl.yp"
+#line 55 "idl.yp"
 {{
                "TYPE" => "COCLASS", 
               "PROPERTIES" => $_[1],
@@ -1841,13 +1841,13 @@ sub
        [#Rule 15
                 'interface_names', 4,
 sub
-#line 67 "pidl/idl.yp"
+#line 67 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 16
                 'interface', 7,
 sub
-#line 71 "pidl/idl.yp"
+#line 71 "idl.yp"
 {{
                "TYPE" => "INTERFACE", 
               "PROPERTIES" => $_[1],
@@ -1860,7 +1860,7 @@ sub
        [#Rule 17
                 'cpp_quote', 4,
 sub
-#line 82 "pidl/idl.yp"
+#line 82 "idl.yp"
 {{
                 "TYPE" => "CPP_QUOTE",
                 "FILE" => $_[0]->YYData->{FILE},
@@ -1871,13 +1871,13 @@ sub
        [#Rule 18
                 'definitions', 1,
 sub
-#line 91 "pidl/idl.yp"
+#line 91 "idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 19
                 'definitions', 2,
 sub
-#line 92 "pidl/idl.yp"
+#line 92 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 20
@@ -1895,7 +1895,7 @@ sub
        [#Rule 24
                 'const', 7,
 sub
-#line 100 "pidl/idl.yp"
+#line 100 "idl.yp"
 {{
                      "TYPE"  => "CONST", 
                     "DTYPE"  => $_[2],
@@ -1909,7 +1909,7 @@ sub
        [#Rule 25
                 'const', 8,
 sub
-#line 110 "pidl/idl.yp"
+#line 110 "idl.yp"
 {{
                      "TYPE"  => "CONST", 
                     "DTYPE"  => $_[2],
@@ -1924,7 +1924,7 @@ sub
        [#Rule 26
                 'function', 7,
 sub
-#line 124 "pidl/idl.yp"
+#line 124 "idl.yp"
 {{
                "TYPE" => "FUNCTION",
                "NAME" => $_[3],
@@ -1938,7 +1938,7 @@ sub
        [#Rule 27
                 'typedef', 6,
 sub
-#line 136 "pidl/idl.yp"
+#line 136 "idl.yp"
 {{
                     "TYPE" => "TYPEDEF", 
                      "PROPERTIES" => $_[1],
@@ -1964,7 +1964,7 @@ sub
        [#Rule 32
                 'typedecl', 2,
 sub
-#line 149 "pidl/idl.yp"
+#line 149 "idl.yp"
 { $_[1] }
        ],
        [#Rule 33
@@ -1976,7 +1976,7 @@ sub
        [#Rule 35
                 'existingtype', 2,
 sub
-#line 154 "pidl/idl.yp"
+#line 154 "idl.yp"
 { ($_[1]?$_[1]:"signed") ." $_[2]" }
        ],
        [#Rule 36
@@ -1991,13 +1991,13 @@ sub
        [#Rule 39
                 'type', 1,
 sub
-#line 158 "pidl/idl.yp"
+#line 158 "idl.yp"
 { "void" }
        ],
        [#Rule 40
                 'enum_body', 3,
 sub
-#line 160 "pidl/idl.yp"
+#line 160 "idl.yp"
 { $_[2] }
        ],
        [#Rule 41
@@ -2009,7 +2009,7 @@ sub
        [#Rule 43
                 'enum', 4,
 sub
-#line 163 "pidl/idl.yp"
+#line 163 "idl.yp"
 {{
              "TYPE" => "ENUM", 
                         "PROPERTIES" => $_[1],
@@ -2020,13 +2020,13 @@ sub
        [#Rule 44
                 'enum_elements', 1,
 sub
-#line 172 "pidl/idl.yp"
+#line 172 "idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 45
                 'enum_elements', 3,
 sub
-#line 173 "pidl/idl.yp"
+#line 173 "idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
        [#Rule 46
@@ -2035,13 +2035,13 @@ sub
        [#Rule 47
                 'enum_element', 3,
 sub
-#line 177 "pidl/idl.yp"
+#line 177 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 48
                 'bitmap_body', 3,
 sub
-#line 180 "pidl/idl.yp"
+#line 180 "idl.yp"
 { $_[2] }
        ],
        [#Rule 49
@@ -2053,7 +2053,7 @@ sub
        [#Rule 51
                 'bitmap', 4,
 sub
-#line 183 "pidl/idl.yp"
+#line 183 "idl.yp"
 {{
              "TYPE" => "BITMAP", 
                     "PROPERTIES" => $_[1],
@@ -2064,13 +2064,13 @@ sub
        [#Rule 52
                 'bitmap_elements', 1,
 sub
-#line 192 "pidl/idl.yp"
+#line 192 "idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 53
                 'bitmap_elements', 3,
 sub
-#line 193 "pidl/idl.yp"
+#line 193 "idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
        [#Rule 54
@@ -2082,13 +2082,13 @@ sub
        [#Rule 56
                 'bitmap_element', 3,
 sub
-#line 198 "pidl/idl.yp"
+#line 198 "idl.yp"
 { "$_[1] ( $_[3] )" }
        ],
        [#Rule 57
                 'struct_body', 3,
 sub
-#line 201 "pidl/idl.yp"
+#line 201 "idl.yp"
 { $_[2] }
        ],
        [#Rule 58
@@ -2100,7 +2100,7 @@ sub
        [#Rule 60
                 'struct', 4,
 sub
-#line 205 "pidl/idl.yp"
+#line 205 "idl.yp"
 {{
              "TYPE" => "STRUCT", 
                         "PROPERTIES" => $_[1],
@@ -2111,7 +2111,7 @@ sub
        [#Rule 61
                 'empty_element', 2,
 sub
-#line 214 "pidl/idl.yp"
+#line 214 "idl.yp"
 {{
                 "NAME" => "",
                 "TYPE" => "EMPTY",
@@ -2131,7 +2131,7 @@ sub
        [#Rule 64
                 'optional_base_element', 2,
 sub
-#line 228 "pidl/idl.yp"
+#line 228 "idl.yp"
 { $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
        ],
        [#Rule 65
@@ -2140,13 +2140,13 @@ sub
        [#Rule 66
                 'union_elements', 2,
 sub
-#line 233 "pidl/idl.yp"
+#line 233 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 67
                 'union_body', 3,
 sub
-#line 236 "pidl/idl.yp"
+#line 236 "idl.yp"
 { $_[2] }
        ],
        [#Rule 68
@@ -2158,7 +2158,7 @@ sub
        [#Rule 70
                 'union', 4,
 sub
-#line 240 "pidl/idl.yp"
+#line 240 "idl.yp"
 {{
              "TYPE" => "UNION", 
                         "PROPERTIES" => $_[1],
@@ -2169,7 +2169,7 @@ sub
        [#Rule 71
                 'base_element', 5,
 sub
-#line 249 "pidl/idl.yp"
+#line 249 "idl.yp"
 {{
                           "NAME" => $_[4],
                           "TYPE" => $_[2],
@@ -2183,25 +2183,25 @@ sub
        [#Rule 72
                 'pointers', 0,
 sub
-#line 263 "pidl/idl.yp"
+#line 263 "idl.yp"
 { 0 }
        ],
        [#Rule 73
                 'pointers', 2,
 sub
-#line 264 "pidl/idl.yp"
+#line 264 "idl.yp"
 { $_[1]+1 }
        ],
        [#Rule 74
                 'element_list1', 0,
 sub
-#line 268 "pidl/idl.yp"
+#line 268 "idl.yp"
 { [] }
        ],
        [#Rule 75
                 'element_list1', 3,
 sub
-#line 269 "pidl/idl.yp"
+#line 269 "idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 76
@@ -2213,13 +2213,13 @@ sub
        [#Rule 78
                 'element_list2', 1,
 sub
-#line 275 "pidl/idl.yp"
+#line 275 "idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 79
                 'element_list2', 3,
 sub
-#line 276 "pidl/idl.yp"
+#line 276 "idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
        [#Rule 80
@@ -2228,13 +2228,13 @@ sub
        [#Rule 81
                 'array_len', 3,
 sub
-#line 281 "pidl/idl.yp"
+#line 281 "idl.yp"
 { push(@{$_[3]}, "*"); $_[3] }
        ],
        [#Rule 82
                 'array_len', 4,
 sub
-#line 282 "pidl/idl.yp"
+#line 282 "idl.yp"
 { push(@{$_[4]}, "$_[2]"); $_[4] }
        ],
        [#Rule 83
@@ -2243,31 +2243,31 @@ sub
        [#Rule 84
                 'property_list', 4,
 sub
-#line 288 "pidl/idl.yp"
+#line 288 "idl.yp"
 { FlattenHash([$_[1],$_[3]]); }
        ],
        [#Rule 85
                 'properties', 1,
 sub
-#line 291 "pidl/idl.yp"
+#line 291 "idl.yp"
 { $_[1] }
        ],
        [#Rule 86
                 'properties', 3,
 sub
-#line 292 "pidl/idl.yp"
+#line 292 "idl.yp"
 { FlattenHash([$_[1], $_[3]]); }
        ],
        [#Rule 87
                 'property', 1,
 sub
-#line 295 "pidl/idl.yp"
+#line 295 "idl.yp"
 {{ "$_[1]" => "1"     }}
        ],
        [#Rule 88
                 'property', 4,
 sub
-#line 296 "pidl/idl.yp"
+#line 296 "idl.yp"
 {{ "$_[1]" => "$_[3]" }}
        ],
        [#Rule 89
@@ -2276,7 +2276,7 @@ sub
        [#Rule 90
                 'listtext', 3,
 sub
-#line 301 "pidl/idl.yp"
+#line 301 "idl.yp"
 { "$_[1] $_[3]" }
        ],
        [#Rule 91
@@ -2285,13 +2285,13 @@ sub
        [#Rule 92
                 'commalisttext', 3,
 sub
-#line 306 "pidl/idl.yp"
+#line 306 "idl.yp"
 { "$_[1],$_[3]" }
        ],
        [#Rule 93
                 'anytext', 0,
 sub
-#line 310 "pidl/idl.yp"
+#line 310 "idl.yp"
 { "" }
        ],
        [#Rule 94
@@ -2306,91 +2306,91 @@ sub
        [#Rule 97
                 'anytext', 3,
 sub
-#line 312 "pidl/idl.yp"
+#line 312 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 98
                 'anytext', 3,
 sub
-#line 313 "pidl/idl.yp"
+#line 313 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 99
                 'anytext', 3,
 sub
-#line 314 "pidl/idl.yp"
+#line 314 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 100
                 'anytext', 3,
 sub
-#line 315 "pidl/idl.yp"
+#line 315 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 101
                 'anytext', 3,
 sub
-#line 316 "pidl/idl.yp"
+#line 316 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 102
                 'anytext', 3,
 sub
-#line 317 "pidl/idl.yp"
+#line 317 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 103
                 'anytext', 3,
 sub
-#line 318 "pidl/idl.yp"
+#line 318 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 104
                 'anytext', 3,
 sub
-#line 319 "pidl/idl.yp"
+#line 319 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 105
                 'anytext', 3,
 sub
-#line 320 "pidl/idl.yp"
+#line 320 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 106
                 'anytext', 3,
 sub
-#line 321 "pidl/idl.yp"
+#line 321 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 107
                 'anytext', 3,
 sub
-#line 322 "pidl/idl.yp"
+#line 322 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 108
                 'anytext', 3,
 sub
-#line 323 "pidl/idl.yp"
+#line 323 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 109
                 'anytext', 3,
 sub
-#line 324 "pidl/idl.yp"
+#line 324 "idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
        [#Rule 110
                 'anytext', 5,
 sub
-#line 325 "pidl/idl.yp"
+#line 325 "idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
        [#Rule 111
                 'anytext', 5,
 sub
-#line 326 "pidl/idl.yp"
+#line 326 "idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
        [#Rule 112
@@ -2408,7 +2408,7 @@ sub
        [#Rule 116
                 'text', 1,
 sub
-#line 340 "pidl/idl.yp"
+#line 340 "idl.yp"
 { "\"$_[1]\"" }
        ],
        [#Rule 117
@@ -2422,7 +2422,7 @@ sub
     bless($self,$class);
 }
 
-#line 351 "pidl/idl.yp"
+#line 351 "idl.yp"
 
 
 use Parse::Pidl qw(error);
index 8e7cf40d9026924f24a20008a0c68fc61cb7d4c9..80ecec938aad694765229a1ce86737b70a8f7713 100644 (file)
@@ -352,9 +352,11 @@ sub align_type($)
                return $scalar_alignment->{$e->{NAME}};
        }
 
+       return 0 if ($e eq "EMPTY");
+
        unless (hasType($e)) {
            # it must be an external type - all we can do is guess 
-               # print "Warning: assuming alignment of unknown type '$e' is 4\n";
+               # warning($e, "assuming alignment of unknown type '$e' is 4");
            return 4;
        }
 
@@ -367,6 +369,8 @@ sub align_type($)
        } elsif ($dt->{TYPE} eq "BITMAP") {
                return align_type(Parse::Pidl::Typelist::bitmap_type_fn($dt));
        } elsif (($dt->{TYPE} eq "STRUCT") or ($dt->{TYPE} eq "UNION")) {
+               # Struct/union without body: assume 4
+               return 4 unless (defined($dt->{ELEMENTS}));
                return find_largest_alignment($dt);
        }
 
index 1512f19d525d981bd8b188a36f2c3234770da206..09f1d4969babe44430f2c1fbdffd2d08200cf3e6 100755 (executable)
@@ -4,7 +4,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 34;
+use Test::More tests => 37;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
@@ -212,9 +212,16 @@ is(align_type({ TYPE => "STRUCT", "NAME" => "bla",
                            ELEMENTS => [ { TYPE => "uint16" } ] }), 4);
 is(align_type({ TYPE => "STRUCT", 
                            ELEMENTS => [ { TYPE => "hyper" } ] }), 8);
-is(align_type({ TYPE => "DECLARE", DATA => { 
+is(align_type({ TYPE => "TYPEDEF", DATA => { 
                                TYPE => "STRUCT", 
                            ELEMENTS => [ { TYPE => "hyper" } ] }}), 8);
+# typedef of struct without body
+is(align_type({ TYPE => "TYPEDEF", DATA => { 
+                               TYPE => "STRUCT", ELEMENTS => undef }}), 4);
+# struct without body
+is(align_type({ TYPE => "STRUCT", ELEMENTS => undef }), 4);
+# empty struct
+is(align_type({ TYPE => "STRUCT", ELEMENTS => [] }), 1);
 is(align_type({ TYPE => "STRUCT", "NAME" => "bla", 
                            ELEMENTS => [ { TYPE => "uint8" } ] }), 4);
 
index c5c409a5259b9a72adef1338b718f2992848bb24..90cb853a5256291578b849d0b8921abe9e634a5b 100755 (executable)
@@ -4,7 +4,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 53;
+use Test::More tests => 52;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
@@ -56,7 +56,6 @@ is(1, is_scalar({TYPE => "ENUM"}));
 is(0, is_scalar({TYPE => "STRUCT"}));
 is(1, is_scalar({TYPE => "TYPEDEF", DATA => {TYPE => "ENUM" }}));
 is(1, is_scalar("mytypedef"));
-is(1, is_scalar({TYPE => "DECLARE", DATA => {TYPE => "ENUM" }}));
 
 is(1, scalar_is_reference("string"));
 is(0, scalar_is_reference("uint32"));