diff options
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm | 14 | ||||
-rwxr-xr-x | source4/pidl/tests/samba-ndr.pl | 17 |
2 files changed, 19 insertions, 12 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm index 46898e6ad8..dfd7296cdd 100644 --- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm +++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm @@ -216,16 +216,16 @@ sub end_flags($) } } -sub GenerateStructEnv($) +sub GenerateStructEnv($$) { - my $x = shift; + my ($x, $v) = @_; my %env; foreach my $e (@{$x->{ELEMENTS}}) { - $env{$e->{NAME}} = "r->$e->{NAME}"; + $env{$e->{NAME}} = "$v->$e->{NAME}"; } - $env{"this"} = "r"; + $env{"this"} = $v; return \%env; } @@ -1198,7 +1198,7 @@ sub ParseStructPush($$) return unless defined($struct->{ELEMENTS}); - my $env = GenerateStructEnv($struct); + my $env = GenerateStructEnv($struct, "r"); EnvSubstituteValue($env, $struct); @@ -1440,7 +1440,7 @@ sub ParseStructPrint($$) return unless defined $struct->{ELEMENTS}; - my $env = GenerateStructEnv($struct); + my $env = GenerateStructEnv($struct, "r"); EnvSubstituteValue($env, $struct); @@ -1521,7 +1521,7 @@ sub ParseStructPull($$) return unless defined $struct->{ELEMENTS}; - my $env = GenerateStructEnv($struct); + my $env = GenerateStructEnv($struct, "r"); # declare any internal pointers we need foreach my $e (@{$struct->{ELEMENTS}}) { diff --git a/source4/pidl/tests/samba-ndr.pl b/source4/pidl/tests/samba-ndr.pl index 50b0bd269f..28b41e4486 100755 --- a/source4/pidl/tests/samba-ndr.pl +++ b/source4/pidl/tests/samba-ndr.pl @@ -4,7 +4,7 @@ use strict; use warnings; -use Test::More tests => 31; +use Test::More tests => 32; use FindBin qw($RealBin); use lib "$RealBin"; use Util; @@ -156,22 +156,29 @@ $fn = { ELEMENTS => [ { DIRECTION => ["out"], NAME => "foo" } ] }; is_deeply({ }, GenerateFunctionInEnv($fn)); $fn = { ELEMENTS => [ { NAME => "foo" }, { NAME => "bar" } ] }; -is_deeply({ foo => "r->foo", bar => "r->bar", this => "r" }, GenerateStructEnv($fn)); +is_deeply({ foo => "r->foo", bar => "r->bar", this => "r" }, + GenerateStructEnv($fn, "r")); + +$fn = { ELEMENTS => [ { NAME => "foo" }, { NAME => "bar" } ] }; +is_deeply({ foo => "some->complex.variable->foo", + bar => "some->complex.variable->bar", + this => "some->complex.variable" }, + GenerateStructEnv($fn, "some->complex.variable")); $fn = { ELEMENTS => [ { NAME => "foo", PROPERTIES => { value => 3 }} ] }; -my $env = GenerateStructEnv($fn); +my $env = GenerateStructEnv($fn, "r"); EnvSubstituteValue($env, $fn); is_deeply($env, { foo => 3, this => "r" }); $fn = { ELEMENTS => [ { NAME => "foo" }, { NAME => "bar" } ] }; -$env = GenerateStructEnv($fn); +$env = GenerateStructEnv($fn, "r"); EnvSubstituteValue($env, $fn); is_deeply($env, { foo => 'r->foo', bar => 'r->bar', this => "r" }); $fn = { ELEMENTS => [ { NAME => "foo", PROPERTIES => { value => 0 }} ] }; -$env = GenerateStructEnv($fn); +$env = GenerateStructEnv($fn, "r"); EnvSubstituteValue($env, $fn); is_deeply($env, { foo => 0, this => "r" }); |