From a396c5de12cd958fe0457fa5372e539132ad7ed9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 21 Feb 2007 11:32:48 +0000 Subject: [PATCH] r21487: Fix warning when using anonymous types, initial work on nested type support in ejs. --- source/librpc/idl/echo.idl | 2 +- source/pidl/lib/Parse/Pidl/Samba4/EJS.pm | 34 ++++++++++++++++++++----- source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm | 3 +++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/source/librpc/idl/echo.idl b/source/librpc/idl/echo.idl index fa030be761c..5b5d2ed326e 100644 --- a/source/librpc/idl/echo.idl +++ b/source/librpc/idl/echo.idl @@ -99,7 +99,7 @@ interface rpcecho } echo_Enum1_32; typedef struct { - echo_Enum1 e1; + enum { foo=1, bar=2} e1; echo_Enum1_32 e2; } echo_Enum2; diff --git a/source/pidl/lib/Parse/Pidl/Samba4/EJS.pm b/source/pidl/lib/Parse/Pidl/Samba4/EJS.pm index 13a8460a810..0d2f0fc8f23 100644 --- a/source/pidl/lib/Parse/Pidl/Samba4/EJS.pm +++ b/source/pidl/lib/Parse/Pidl/Samba4/EJS.pm @@ -157,7 +157,15 @@ sub EjsPullScalar($$$$$) and (defined($pl) and $pl->{TYPE} eq "POINTER")) { $var = get_pointer_to($var); } - pidl "NDR_CHECK(ejs_pull_$e->{TYPE}(ejs, v, $name, $var));"; + + my $t; + if (ref($e->{TYPE}) eq "HASH") { + $t = "$e->{TYPE}->{TYPE}_$e->{TYPE}->{NAME}"; + } else { + $t = $e->{TYPE}; + } + + pidl "NDR_CHECK(ejs_pull_$t(ejs, v, $name, $var));"; } ########################### @@ -449,7 +457,15 @@ sub EjsPushScalar($$$$$) or (defined($pl) and $pl->{TYPE} eq "POINTER")) { $var = get_pointer_to($var); } - pidl "NDR_CHECK(ejs_push_$e->{TYPE}(ejs, v, $name, $var));"; + + my $t; + if (ref($e->{TYPE}) eq "HASH") { + $t = "$e->{TYPE}->{TYPE}_$e->{TYPE}->{NAME}"; + } else { + $t = $e->{TYPE}; + } + + pidl "NDR_CHECK(ejs_push_$t(ejs, v, $name, $var));"; } ########################### @@ -877,11 +893,17 @@ sub NeededTypedef($$) foreach (@{$t->{DATA}->{ELEMENTS}}) { next if (has_property($_, "subcontext")); #FIXME: Support subcontexts - unless (defined($needed->{"pull_$_->{TYPE}"})) { - $needed->{"pull_$_->{TYPE}"} = $needed->{"pull_$t->{NAME}"}; + my $n; + if (ref($_->{TYPE}) eq "HASH") { + $n = "$_->{TYPE}->{TYPE}_$_->{TYPE}->{NAME}"; + } else { + $n = $_->{TYPE}; + } + unless (defined($needed->{"pull_$n"})) { + $needed->{"pull_$n"} = $needed->{"pull_$t->{NAME}"}; } - unless (defined($needed->{"push_$_->{TYPE}"})) { - $needed->{"push_$_->{TYPE}"} = $needed->{"push_$t->{NAME}"}; + unless (defined($needed->{"push_$n"})) { + $needed->{"push_$n"} = $needed->{"push_$t->{NAME}"}; } } } diff --git a/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm index 2ae4a3b17ef..b6209d9f9a9 100644 --- a/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm +++ b/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm @@ -2651,6 +2651,9 @@ sub NeededElement($$$) return if ($e->{TYPE} eq "EMPTY"); + return if (ref($e->{TYPE}) eq "HASH" and + not defined($e->{TYPE}->{NAME})); + my ($t, $rt); if (ref($e->{TYPE}) eq "HASH") { $t = $e->{TYPE}->{TYPE}."_".$e->{TYPE}->{NAME}; -- 2.11.4.GIT