pidl/NDR::Parser: pass typedefs through the ParseElement*Level() functions
authorStefan Metzmacher <metze@samba.org>
Wed, 20 Aug 2008 12:41:38 +0000 (14:41 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 20 Aug 2008 13:22:04 +0000 (15:22 +0200)
metze

source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 8053e5004e8ee0a4022260e12917d3bb8a3e4b91..745777d0126f1c7d3c9567f67d51161c6c52a12d 100644 (file)
@@ -561,6 +561,8 @@ sub ParseElementPushLevel
                        $self->ParseSwitchPush($e, $l, $ndr, $var_name, $env);
                } elsif ($l->{TYPE} eq "DATA") {
                        $self->ParseDataPush($e, $l, $ndr, $var_name, $primitives, $deferred);
+               } elsif ($l->{TYPE} eq "TYPEDEF") {
+                       $typefamily{$e->{DATA}->{TYPE}}->{PUSH_FN_BODY}->($self, $e->{DATA}, $ndr, $var_name);
                }
        }
 
@@ -1011,6 +1013,8 @@ sub ParseElementPullLevel
                        $self->ParseSwitchPull($e, $l, $ndr, $var_name, $env);
                } elsif ($l->{TYPE} eq "DATA") {
                        $self->ParseDataPull($e, $l, $ndr, $var_name, $primitives, $deferred);
+               } elsif ($l->{TYPE} eq "TYPEDEF") {
+                       $typefamily{$e->{DATA}->{TYPE}}->{PULL_FN_BODY}->($self, $e->{DATA}, $ndr, $var_name);
                }
        }
 
@@ -1887,7 +1891,11 @@ sub ParseTypedefPush($$$$)
 {
        my($self,$e,$ndr,$varname) = @_;
 
-       $typefamily{$e->{DATA}->{TYPE}}->{PUSH_FN_BODY}->($self, $e->{DATA}, $ndr, $varname);
+       my $env;
+
+       $env->{$e->{NAME}} = $varname;
+
+       $self->ParseElementPushLevel($e, $e->{LEVELS}[0], $ndr, $varname, $env, 1, 1);
 }
 
 #####################################################################
@@ -1896,7 +1904,11 @@ sub ParseTypedefPull($$$$)
 {
        my($self,$e,$ndr,$varname) = @_;
 
-       $typefamily{$e->{DATA}->{TYPE}}->{PULL_FN_BODY}->($self, $e->{DATA}, $ndr, $varname);
+       my $env;
+
+       $env->{$e->{NAME}} = $varname;
+
+       $self->ParseElementPullLevel($e, $e->{LEVELS}[0], $ndr, $varname, $env, 1, 1);
 }
 
 #####################################################################