r4540: sync enum and bitmap code
authorStefan Metzmacher <metze@samba.org>
Wed, 5 Jan 2005 16:31:05 +0000 (16:31 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:08:19 +0000 (13:08 -0500)
metze
(This used to be commit 2f3aea72ee7d9d90f7b910d11bdd1e96f9f0ebe1)

source4/build/pidl/header.pm
source4/build/pidl/parser.pm
source4/build/pidl/util.pm

index 15a0bd427618a1651ab6c8dd52a8d158488373ea..10adf94dba41fd9a8145108dc2b3e70247e180d4 100644 (file)
@@ -98,7 +98,7 @@ sub HeaderEnum($$)
     my($enum) = shift;
     my($name) = shift;
 
-    util::register_enum($name);
+    util::register_enum($enum, $name);
 
     $res .= "\nenum $name {\n";
     $tab_depth++;
index 00d48270deb81ef3a85d953090bc02d5dfaac420..2aa7dfc3d6667bb7f2c9928a97fe3f4d692da6b8 100644 (file)
@@ -469,17 +469,14 @@ sub ParseElementPullSwitch($$$$)
            !util::has_property($utype, "nodiscriminant")) {
                my $e2 = find_sibling($e, $switch);
                my $type_decl = $e2->{TYPE};
-               my $type_fn = $e2->{TYPE};
                pidl "\tif (($ndr_flags) & NDR_SCALARS) {\n";
                if (util::is_enum($e2->{TYPE})) {
                        $type_decl = util::enum_type_decl($e2);
-                       $type_fn = util::enum_type_fn($e2);
                } elsif (util::is_bitmap($e2->{TYPE})) {
                        $type_decl = util::bitmap_type_decl($e2);
-                       $type_fn = util::bitmap_type_fn($e2);
                }
                pidl "\t\t$type_decl _level;\n";
-               pidl "\t\tNDR_CHECK(ndr_pull_$type_fn(ndr, &_level));\n";
+               pidl "\t\tNDR_CHECK(ndr_pull_$e2->{TYPE}(ndr, &_level));\n";
                if ($switch_var =~ /r->in/) {
                        pidl "\t\tif (!(ndr->flags & LIBNDR_FLAG_REF_ALLOC) && _level != $switch_var) {\n";
                } else {
@@ -804,16 +801,11 @@ sub ParseStructPush($)
 sub ParseEnumPush($)
 {
        my($enum) = shift;
+       my($type_fn) = util::enum_type_fn($enum);
 
        start_flags($enum);
 
-       if (util::has_property($enum->{PARENT}, "v1_enum")) {
-               pidl "\tNDR_CHECK(ndr_push_uint32(ndr, r));\n";
-       } elsif (util::has_property($enum->{PARENT}, "enum8bit")) {
-               pidl "\tNDR_CHECK(ndr_push_uint8(ndr, r));\n";
-       } else {
-               pidl "\tNDR_CHECK(ndr_push_uint16(ndr, r));\n";
-       }
+       pidl "\tNDR_CHECK(ndr_push_$type_fn(ndr, r));\n";
 
        end_flags($enum);
 }
@@ -823,19 +815,12 @@ sub ParseEnumPush($)
 sub ParseEnumPull($)
 {
        my($enum) = shift;
+       my($type_fn) = util::enum_type_fn($enum);
 
        start_flags($enum);
 
-       if (util::has_property($enum->{PARENT}, "v1_enum")) {
-               pidl "\tuint32_t v;\n";
-               pidl "\tNDR_CHECK(ndr_pull_uint32(ndr, &v));\n";
-       } elsif (util::has_property($enum->{PARENT}, "enum8bit")) {
-               pidl "\tuint8_t v;\n";
-               pidl "\tNDR_CHECK(ndr_pull_uint8(ndr, &v));\n";
-       } else {
-               pidl "\tuint16_t v;\n";
-               pidl "\tNDR_CHECK(ndr_pull_uint16(ndr, &v));\n";
-       }
+       pidl "\t$type_fn v;\n";
+       pidl "\tNDR_CHECK(ndr_pull_$type_fn(ndr, &v));\n";
        pidl "\t*r = v;\n";
 
        end_flags($enum);
@@ -873,7 +858,6 @@ sub ParseEnumPrint($)
 sub ParseBitmapPush($)
 {
        my($bitmap) = shift;
-       my($type_decl) = util::bitmap_type_decl($bitmap);
        my($type_fn) = util::bitmap_type_fn($bitmap);
 
        start_flags($bitmap);
@@ -888,12 +872,11 @@ sub ParseBitmapPush($)
 sub ParseBitmapPull($)
 {
        my($bitmap) = shift;
-       my($type_decl) = util::bitmap_type_decl($bitmap);
        my($type_fn) = util::bitmap_type_fn($bitmap);
 
        start_flags($bitmap);
 
-       pidl "\t$type_decl v;\n";
+       pidl "\t$type_fn v;\n";
        pidl "\tNDR_CHECK(ndr_pull_$type_fn(ndr, &v));\n";
        pidl "\t*r = v;\n";
 
index 1b00bdea1bd597d1dad364fba85f3bb42dd4a601..e3ec3d613852821c269bf9ae904ae443ecc0037c 100644 (file)
@@ -202,10 +202,11 @@ sub property_matches($$$)
 
 my %enum_list;
 
-sub register_enum($)
+sub register_enum($$)
 {
+       my $enum = shift;
        my $name = shift;
-       $enum_list{$name} = 1;
+       $enum_list{$name} = $enum;
 }
 
 sub is_enum($)
@@ -214,16 +215,27 @@ sub is_enum($)
        return defined $enum_list{$name}
 }
 
+sub get_enum($)
+{
+       my $name = shift;
+       return $enum_list{$name};
+}
+
 sub enum_type_decl($)
 {
-       my $e = shift;
-       return "enum $e->{TYPE}";
+       my $enum = shift;
+       return "enum $enum->{TYPE}";
 }
 
 sub enum_type_fn($)
 {
-       my $e = shift;
-       return "$e->{TYPE}";
+       my $enum = shift;
+       if (util::has_property($enum->{PARENT}, "enum8bit")) {
+               return "uint8";
+       } elsif (util::has_property($enum->{PARENT}, "v1_enum")) {
+               return "uint32";
+       }
+       return "uint16";
 }
 
 my %bitmap_list;