r15587: Generate stubs for the SWIG functions
authorJelmer Vernooij <jelmer@samba.org>
Sat, 13 May 2006 22:03:44 +0000 (22:03 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:06:01 +0000 (14:06 -0500)
(This used to be commit 746d0a7fa7a43685e6ebb4877bb5459101e51ed1)

source4/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
source4/pidl/lib/Parse/Pidl/Samba4.pm
source4/pidl/lib/Parse/Pidl/Samba4/SWIG.pm
source4/pidl/lib/Parse/Pidl/Typelist.pm

index eda2ab99d76ac7bdcb26e2a63e2490364fd6886c..3b8c92ebe4bf6fded91a3b1deb80c226ed5f26bf 100644 (file)
@@ -10,6 +10,7 @@ use strict;
 use Parse::Pidl::Typelist qw(hasType getType mapType scalar_is_reference);
 use Parse::Pidl::Util qw(has_property ParseExpr is_constant);
 use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
+use Parse::Pidl::Samba4 qw(DeclLong);
 
 use vars qw($VERSION);
 $VERSION = '0.01';
@@ -46,42 +47,6 @@ sub CopyLevel($$$$)
        }
 }
 
-sub DeclLong($)
-{
-       my($element) = shift;
-       my $ret = "";
-
-       if (has_property($element, "represent_as")) {
-               $ret.=mapType($element->{PROPERTIES}->{represent_as})." ";
-       } else {
-               if (has_property($element, "charset")) {
-                       $ret.="const char";
-               } else {
-                       $ret.=mapType($element->{TYPE});
-               }
-
-               $ret.=" ";
-               my $numstar = $element->{ORIGINAL}->{POINTERS};
-               if ($numstar >= 1) {
-                       $numstar-- if scalar_is_reference($element->{TYPE});
-               }
-               foreach (@{$element->{ORIGINAL}->{ARRAY_LEN}})
-               {
-                       next if is_constant($_) and 
-                               not has_property($element, "charset");
-                       $numstar++;
-               }
-               $ret.="*" foreach (1..$numstar);
-       }
-       $ret.=$element->{NAME};
-       foreach (@{$element->{ARRAY_LEN}}) {
-               next unless (is_constant($_) and not has_property($element, "charset"));
-               $ret.="[$_]";
-       }
-
-       return $ret;
-}
-
 sub ParseFunction($$)
 {
        my ($if,$fn) = @_;
index 0a284aa85b85a52825df151cf34f846c2fc3e609..2d710f3eb6c11605de5f73dd6286784b33e01967 100644 (file)
@@ -7,9 +7,10 @@ package Parse::Pidl::Samba4;
 
 require Exporter;
 @ISA = qw(Exporter);
-@EXPORT = qw(is_intree choose_header);
+@EXPORT = qw(is_intree choose_header DeclLong);
 
-use Parse::Pidl::Util qw(has_property);
+use Parse::Pidl::Util qw(has_property is_constant);
+use Parse::Pidl::Typelist qw(mapType scalar_is_reference);
 use strict;
 
 use vars qw($VERSION);
@@ -29,4 +30,40 @@ sub choose_header($$)
        return "#include <$out>";
 }
 
+sub DeclLong($)
+{
+       my($element) = shift;
+       my $ret = "";
+
+       if (has_property($element, "represent_as")) {
+               $ret.=mapType($element->{PROPERTIES}->{represent_as})." ";
+       } else {
+               if (has_property($element, "charset")) {
+                       $ret.="const char";
+               } else {
+                       $ret.=mapType($element->{TYPE});
+               }
+
+               $ret.=" ";
+               my $numstar = $element->{ORIGINAL}->{POINTERS};
+               if ($numstar >= 1) {
+                       $numstar-- if scalar_is_reference($element->{TYPE});
+               }
+               foreach (@{$element->{ORIGINAL}->{ARRAY_LEN}})
+               {
+                       next if is_constant($_) and 
+                               not has_property($element, "charset");
+                       $numstar++;
+               }
+               $ret.="*" foreach (1..$numstar);
+       }
+       $ret.=$element->{NAME};
+       foreach (@{$element->{ARRAY_LEN}}) {
+               next unless (is_constant($_) and not has_property($element, "charset"));
+               $ret.="[$_]";
+       }
+
+       return $ret;
+}
+
 1;
index d42960be28163763672d1b670d406a1d9cae8039..22061f46af3a35089002574174e37baeb10779f6 100644 (file)
@@ -7,6 +7,8 @@
 package Parse::Pidl::Samba4::SWIG;
 
 use vars qw($VERSION);
+use Parse::Pidl::Samba4 qw(DeclLong);
+use Parse::Pidl::Typelist qw(mapType);
 $VERSION = '0.01';
 
 use strict;
@@ -23,9 +25,9 @@ sub pidl($)
 sub indent() { $tabs.="\t"; }
 sub deindent() { $tabs = substr($tabs,0,-1); }
 
-sub ParseInterface($)
+sub ParseInterface($$)
 {
-       my $if = shift;
+       my ($basename,$if) = @_;
 
        pidl "\%{";
        pidl "struct $if->{NAME} {";
@@ -36,8 +38,6 @@ sub ParseInterface($)
        pidl "%}";
        pidl "";
 
-       # FIXME: Generate ignores for all manual functions
-               
        pidl "\%extend $if->{NAME} {";
        indent();
        pidl "struct $if->{NAME} *$if->{NAME} (const char *binding, struct cli_credentials *cred = NULL, TALLOC_CTX *mem_ctx = NULL, struct event_context *event = NULL)";
@@ -61,8 +61,39 @@ sub ParseInterface($)
        pidl "}";
        pidl "";
 
-       foreach (@{$if->{FUNCTIONS}}) {
-               pidl "/* $_->{NAME} */";
+       foreach my $fn (@{$if->{FUNCTIONS}}) {
+               pidl "/* $fn->{NAME} */";
+               my $args = "";
+               foreach (@{$fn->{ELEMENTS}}) {
+                       $args .= DeclLong($_) . ", ";
+               }
+               my $name = $fn->{NAME};
+               $name =~ s/^$if->{NAME}_//g;
+               $name =~ s/^$basename\_//g;
+               $args .= "TALLOC_CTX *mem_ctx = NULL";
+               pidl mapType($fn->{RETURN_TYPE}) . " $name($args)";
+               pidl "{";
+               indent;
+               pidl "struct $fn->{NAME} r;";
+               my $assign = "";
+               if (defined($fn->{RETURN_TYPE})) {
+                       pidl mapType($fn->{RETURN_TYPE}) . " ret;";
+                       $assign = "ret = ";
+               }
+               pidl "";
+               pidl "/* Fill r structure */";
+               pidl "/* FIXME */";
+               pidl "";
+               pidl $assign."dcerpc_$fn->{NAME}(self->pipe, mem_ctx, &r);";
+               pidl "";
+               pidl "/* Set out arguments */";
+               pidl "/* FIXME */";
+               if (defined($fn->{RETURN_TYPE})) {
+                       pidl "return ret;";
+               }
+               deindent;
+               pidl "}";
+               pidl "";
        }
 
        deindent();
@@ -70,7 +101,7 @@ sub ParseInterface($)
        pidl "";
 
        foreach (@{$if->{TYPES}}) {
-               pidl "/* $_->{NAME} */";        
+               pidl "/* $_->{NAME} */";
        }
        
        pidl "";
@@ -98,12 +129,11 @@ sub Parse($$$$)
        pidl "";
 
        foreach (@$ndr) {
-               ParseInterface($_) if ($_->{TYPE} eq "INTERFACE");
+               ParseInterface($basename, $_) if ($_->{TYPE} eq "INTERFACE");
        }
        #FIXME: Foreach ref pointer, set NONNULL
        #FIXME: Foreach unique/full pointer, set MAYBENULL
        #FIXME: Foreach [out] parameter, set OUTPARAM
-       #
        return $ret;
 }
 
index cf68345517d8cf872b0fef4871e43a206876f31a..ff8f18ee4853f601c14baf61d8afe08bf5d62007 100644 (file)
@@ -194,7 +194,7 @@ sub bitmap_type_fn($)
 sub mapType($)
 {
        my $t = shift;
-       die("Undef passed to mapType") unless defined($t);
+       return "void" unless defined($t);
        my $dt;
 
        unless ($dt or ($dt = getType($t))) {