summaryrefslogtreecommitdiff
path: root/source4/pidl
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-02-18 23:57:26 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:48:35 -0500
commit5340489807985b3bb4c10eacfa701d643ee7a36c (patch)
tree5b79cf2d3b8edf0dec079029f0314e0325018ef5 /source4/pidl
parentf280849a6f45c563ca5beb6afe1dcf0bbba8f4e3 (diff)
downloadsamba-5340489807985b3bb4c10eacfa701d643ee7a36c.tar.gz
samba-5340489807985b3bb4c10eacfa701d643ee7a36c.tar.bz2
samba-5340489807985b3bb4c10eacfa701d643ee7a36c.zip
r21440: Support different variables in environments.
(This used to be commit 1702a663ba4ce6f5803e265a969f2be564fce1e3)
Diffstat (limited to 'source4/pidl')
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm14
-rwxr-xr-xsource4/pidl/tests/samba-ndr.pl17
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" });