pidl: Move Generate*Env functions to Parse::Pidl::Samba4::Header because they only...
authorJelmer Vernooij <jelmer@samba.org>
Sun, 13 Jan 2008 17:15:12 +0000 (18:15 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 14 Jan 2008 18:53:05 +0000 (19:53 +0100)
source/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
source/pidl/lib/Parse/Pidl/Samba4/EJS.pm
source/pidl/lib/Parse/Pidl/Samba4/Header.pm
source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
source/pidl/tests/header.pl
source/pidl/tests/samba-ndr.pl
source/pidl/tests/samba3-cli.pl

index b7372a802aaa81b0833f096ce038c77847e770c6..86b8951026c92aeaff8cb816ff943a025d8ea738 100644 (file)
@@ -9,7 +9,7 @@ package Parse::Pidl::Samba3::ClientNDR;
 
 use Exporter;
 @ISA = qw(Exporter);
 
 use Exporter;
 @ISA = qw(Exporter);
-@EXPORT_OK = qw(GenerateFunctionInEnv ParseFunction $res $res_hdr);
+@EXPORT_OK = qw(ParseFunction $res $res_hdr);
 
 use strict;
 use Parse::Pidl qw(fatal warning);
 
 use strict;
 use Parse::Pidl qw(fatal warning);
@@ -17,7 +17,7 @@ use Parse::Pidl::Typelist qw(hasType getType mapTypeName scalar_is_reference);
 use Parse::Pidl::Util qw(has_property is_constant ParseExpr);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
 use Parse::Pidl::Samba4 qw(DeclLong);
 use Parse::Pidl::Util qw(has_property is_constant ParseExpr);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
 use Parse::Pidl::Samba4 qw(DeclLong);
-use Parse::Pidl::Samba4::NDR::Parser qw(GenerateFunctionInEnv);
+use Parse::Pidl::Samba4::Header qw(GenerateFunctionInEnv);
 
 use vars qw($VERSION);
 $VERSION = '0.01';
 
 use vars qw($VERSION);
 $VERSION = '0.01';
index 24270340b9e0a661f58b963f112a089e57e80269..efb3f2858d6da539c3b95cb9a250879ebeb64b92 100644 (file)
@@ -15,7 +15,7 @@ use Parse::Pidl::Typelist qw(typeHasBody);
 use Parse::Pidl::CUtil qw(get_pointer_to get_value_of);
 use Parse::Pidl::Util qw(has_property ParseExpr);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel);
 use Parse::Pidl::CUtil qw(get_pointer_to get_value_of);
 use Parse::Pidl::Util qw(has_property ParseExpr);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel);
-use Parse::Pidl::Samba4::NDR::Parser qw(GenerateStructEnv GenerateFunctionInEnv
+use Parse::Pidl::Samba4::Header qw(GenerateStructEnv GenerateFunctionInEnv
                                         GenerateFunctionOutEnv);
 
 use vars qw($VERSION);
                                         GenerateFunctionOutEnv);
 
 use vars qw($VERSION);
index b96a58783c9ef3d32c8712d4c2b622b845f009cd..06e9ec4b9f3180191252873d15345c24e7210c9b 100644 (file)
@@ -6,10 +6,15 @@
 
 package Parse::Pidl::Samba4::Header;
 
 
 package Parse::Pidl::Samba4::Header;
 
+require Exporter;
+
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(GenerateFunctionInEnv GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv);
+
 use strict;
 use Parse::Pidl qw(fatal);
 use Parse::Pidl::Typelist qw(mapTypeName scalar_is_reference);
 use strict;
 use Parse::Pidl qw(fatal);
 use Parse::Pidl::Typelist qw(mapTypeName scalar_is_reference);
-use Parse::Pidl::Util qw(has_property is_constant unmake_str);
+use Parse::Pidl::Util qw(has_property is_constant unmake_str ParseExpr);
 use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets choose_header);
 
 use vars qw($VERSION);
 use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets choose_header);
 
 use vars qw($VERSION);
@@ -406,4 +411,68 @@ sub Parse($)
        return $res;
 }
 
        return $res;
 }
 
+sub GenerateStructEnv($$)
+{
+       my ($x, $v) = @_;
+       my %env;
+
+       foreach my $e (@{$x->{ELEMENTS}}) {
+               $env{$e->{NAME}} = "$v->$e->{NAME}";
+       }
+
+       $env{"this"} = $v;
+
+       return \%env;
+}
+
+sub EnvSubstituteValue($$)
+{
+       my ($env,$s) = @_;
+
+       # Substitute the value() values in the env
+       foreach my $e (@{$s->{ELEMENTS}}) {
+               next unless (defined(my $v = has_property($e, "value")));
+               
+               $env->{$e->{NAME}} = ParseExpr($v, $env, $e);
+       }
+
+       return $env;
+}
+
+sub GenerateFunctionInEnv($;$)
+{
+       my ($fn, $base) = @_;
+       my %env;
+
+       $base = "r->" unless defined($base);
+
+       foreach my $e (@{$fn->{ELEMENTS}}) {
+               if (grep (/in/, @{$e->{DIRECTION}})) {
+                       $env{$e->{NAME}} = $base."in.$e->{NAME}";
+               }
+       }
+
+       return \%env;
+}
+
+sub GenerateFunctionOutEnv($;$)
+{
+       my ($fn, $base) = @_;
+       my %env;
+
+       $base = "r->" unless defined($base);
+
+       foreach my $e (@{$fn->{ELEMENTS}}) {
+               if (grep (/out/, @{$e->{DIRECTION}})) {
+                       $env{$e->{NAME}} = $base."out.$e->{NAME}";
+               } elsif (grep (/in/, @{$e->{DIRECTION}})) {
+                       $env{$e->{NAME}} = $base."in.$e->{NAME}";
+               }
+       }
+
+       return \%env;
+}
+
+
+
 1;
 1;
index 8eb2f9ad1555686b0956973f1bae7a9542042f94..0800a19fab69ee1c02bac246f3294e00e11e5e1d 100644 (file)
@@ -9,7 +9,7 @@ package Parse::Pidl::Samba4::NDR::Parser;
 
 require Exporter;
 @ISA = qw(Exporter);
 
 require Exporter;
 @ISA = qw(Exporter);
-@EXPORT_OK = qw(check_null_pointer GenerateFunctionInEnv GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv NeededFunction NeededElement NeededType $res NeededInterface TypeFunctionName ParseElementPrint);
+@EXPORT_OK = qw(check_null_pointer NeededFunction NeededElement NeededType $res NeededInterface TypeFunctionName ParseElementPrint);
 
 use strict;
 use Parse::Pidl::Typelist qw(hasType getType mapTypeName typeHasBody);
 
 use strict;
 use Parse::Pidl::Typelist qw(hasType getType mapTypeName typeHasBody);
@@ -17,6 +17,7 @@ use Parse::Pidl::Util qw(has_property ParseExpr ParseExprExt print_uuid);
 use Parse::Pidl::CUtil qw(get_pointer_to get_value_of);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
 use Parse::Pidl::Samba4 qw(is_intree choose_header);
 use Parse::Pidl::CUtil qw(get_pointer_to get_value_of);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
 use Parse::Pidl::Samba4 qw(is_intree choose_header);
+use Parse::Pidl::Samba4::Header qw(GenerateFunctionInEnv GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv);
 use Parse::Pidl qw(warning);
 
 use vars qw($VERSION);
 use Parse::Pidl qw(warning);
 
 use vars qw($VERSION);
@@ -193,68 +194,6 @@ sub end_flags($$)
        }
 }
 
        }
 }
 
-sub GenerateStructEnv($$)
-{
-       my ($x, $v) = @_;
-       my %env;
-
-       foreach my $e (@{$x->{ELEMENTS}}) {
-               $env{$e->{NAME}} = "$v->$e->{NAME}";
-       }
-
-       $env{"this"} = $v;
-
-       return \%env;
-}
-
-sub EnvSubstituteValue($$)
-{
-       my ($env,$s) = @_;
-
-       # Substitute the value() values in the env
-       foreach my $e (@{$s->{ELEMENTS}}) {
-               next unless (defined(my $v = has_property($e, "value")));
-               
-               $env->{$e->{NAME}} = ParseExpr($v, $env, $e);
-       }
-
-       return $env;
-}
-
-sub GenerateFunctionInEnv($;$)
-{
-       my ($fn, $base) = @_;
-       my %env;
-
-       $base = "r->" unless defined($base);
-
-       foreach my $e (@{$fn->{ELEMENTS}}) {
-               if (grep (/in/, @{$e->{DIRECTION}})) {
-                       $env{$e->{NAME}} = $base."in.$e->{NAME}";
-               }
-       }
-
-       return \%env;
-}
-
-sub GenerateFunctionOutEnv($;$)
-{
-       my ($fn, $base) = @_;
-       my %env;
-
-       $base = "r->" unless defined($base);
-
-       foreach my $e (@{$fn->{ELEMENTS}}) {
-               if (grep (/out/, @{$e->{DIRECTION}})) {
-                       $env{$e->{NAME}} = $base."out.$e->{NAME}";
-               } elsif (grep (/in/, @{$e->{DIRECTION}})) {
-                       $env{$e->{NAME}} = $base."in.$e->{NAME}";
-               }
-       }
-
-       return \%env;
-}
-
 #####################################################################
 # parse the data of an array - push side
 sub ParseArrayPushHeader($$$$$$)
 #####################################################################
 # parse the data of an array - push side
 sub ParseArrayPushHeader($$$$$$)
index 8d0dccf50759103afcd8adb3f2b88420a1400736..db5948444462818db62f4207d58acd9c5148e71f 100755 (executable)
@@ -4,12 +4,14 @@
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
-use Test::More tests => 16;
+use Test::More tests => 27;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
 use Parse::Pidl::Util qw(MyDumper);
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
 use Parse::Pidl::Util qw(MyDumper);
-use Parse::Pidl::Samba4::Header;
+use Parse::Pidl::Samba4::Header qw(
+       GenerateFunctionInEnv GenerateFunctionOutEnv GenerateStructEnv
+       EnvSubstituteValue);
 use Parse::Pidl::IDL qw(parse_string);
 use Parse::Pidl::NDR;
 
 use Parse::Pidl::IDL qw(parse_string);
 use Parse::Pidl::NDR;
 
@@ -56,3 +58,51 @@ like(parse_idl("interface p { typedef struct x { int p; } x; };"),
 
 like(parse_idl("cpp_quote(\"some-foo\")"),
        qr/some-foo/sm, "cpp quote");
 
 like(parse_idl("cpp_quote(\"some-foo\")"),
        qr/some-foo/sm, "cpp quote");
+
+# Make sure GenerateFunctionInEnv and GenerateFunctionOutEnv work
+my $fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };
+is_deeply({ "foo" => "r->in.foo" }, GenerateFunctionInEnv($fn));
+
+$fn = { ELEMENTS => [ { DIRECTION => ["out"], NAME => "foo" } ] };
+is_deeply({ "foo" => "r->out.foo" }, GenerateFunctionOutEnv($fn));
+
+$fn = { ELEMENTS => [ { DIRECTION => ["out", "in"], NAME => "foo" } ] };
+is_deeply({ "foo" => "r->in.foo" }, GenerateFunctionInEnv($fn));
+
+$fn = { ELEMENTS => [ { DIRECTION => ["out", "in"], NAME => "foo" } ] };
+is_deeply({ "foo" => "r->out.foo" }, GenerateFunctionOutEnv($fn));
+
+$fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };
+is_deeply({ "foo" => "r->in.foo" }, GenerateFunctionOutEnv($fn));
+
+$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, "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, "r");
+EnvSubstituteValue($env, $fn);
+is_deeply($env, { foo => 3, this => "r" });
+
+$fn = { ELEMENTS => [ { NAME => "foo" }, { NAME => "bar" } ] };
+$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, "r");
+EnvSubstituteValue($env, $fn);
+is_deeply($env, { foo => 0, this => "r" });
+
+
index 05c3c1c0dfa4dde5cba97313d9cf67190816e692..a14111961f58024bd731e0cccd8da3b13c3e2b9f 100755 (executable)
@@ -4,15 +4,14 @@
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
-use Test::More tests => 41;
+use Test::More tests => 30;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
 use strict;
 use Parse::Pidl::Util qw(MyDumper);
 use Parse::Pidl::Samba4::NDR::Parser qw(check_null_pointer 
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
 use strict;
 use Parse::Pidl::Util qw(MyDumper);
 use Parse::Pidl::Samba4::NDR::Parser qw(check_null_pointer 
-       GenerateFunctionInEnv GenerateFunctionOutEnv GenerateStructEnv 
-       EnvSubstituteValue NeededFunction NeededElement NeededType
+       NeededFunction NeededElement NeededType
        NeededInterface TypeFunctionName ParseElementPrint); 
 
 my $output;
        NeededInterface TypeFunctionName ParseElementPrint); 
 
 my $output;
@@ -138,52 +137,6 @@ test_warnings("nofile:2: unknown dereferenced expression `r->in.bla'\n",
 
 is($output, "if (r->in.bla == NULL) return;");
 
 
 is($output, "if (r->in.bla == NULL) return;");
 
-# Make sure GenerateFunctionInEnv and GenerateFunctionOutEnv work
-$fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };
-is_deeply({ "foo" => "r->in.foo" }, GenerateFunctionInEnv($fn));
-
-$fn = { ELEMENTS => [ { DIRECTION => ["out"], NAME => "foo" } ] };
-is_deeply({ "foo" => "r->out.foo" }, GenerateFunctionOutEnv($fn));
-
-$fn = { ELEMENTS => [ { DIRECTION => ["out", "in"], NAME => "foo" } ] };
-is_deeply({ "foo" => "r->in.foo" }, GenerateFunctionInEnv($fn));
-
-$fn = { ELEMENTS => [ { DIRECTION => ["out", "in"], NAME => "foo" } ] };
-is_deeply({ "foo" => "r->out.foo" }, GenerateFunctionOutEnv($fn));
-
-$fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };
-is_deeply({ "foo" => "r->in.foo" }, GenerateFunctionOutEnv($fn));
-
-$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, "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, "r");
-EnvSubstituteValue($env, $fn);
-is_deeply($env, { foo => 3, this => "r" });
-
-$fn = { ELEMENTS => [ { NAME => "foo" }, { NAME => "bar" } ] };
-$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, "r");
-EnvSubstituteValue($env, $fn);
-is_deeply($env, { foo => 0, this => "r" });
-
 my $needed = {};
 NeededElement({ TYPE => "foo", REPRESENTATION_TYPE => "foo" }, "pull", $needed); 
 is_deeply($needed, { ndr_pull_foo => 1 });
 my $needed = {};
 NeededElement({ TYPE => "foo", REPRESENTATION_TYPE => "foo" }, "pull", $needed); 
 is_deeply($needed, { ndr_pull_foo => 1 });
index 1b2a3c97854f7b5c59b14aa3b1a35f9067dd7b5b..f5b51b7d34b8d5a1f52751b5daf714f4d5539446 100755 (executable)
@@ -10,7 +10,7 @@ use lib "$RealBin";
 use Util;
 use Parse::Pidl::Util qw(MyDumper);
 use Parse::Pidl::Samba3::ClientNDR qw(ParseFunction);
 use Util;
 use Parse::Pidl::Util qw(MyDumper);
 use Parse::Pidl::Samba3::ClientNDR qw(ParseFunction);
-use Parse::Pidl::Samba4::NDR::Parser qw(GenerateFunctionInEnv GenerateFunctionOutEnv);
+use Parse::Pidl::Samba4::Header qw(GenerateFunctionInEnv GenerateFunctionOutEnv);
 
 # Make sure GenerateFunctionInEnv and GenerateFunctionOutEnv work
 my $fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };
 
 # Make sure GenerateFunctionInEnv and GenerateFunctionOutEnv work
 my $fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };