summaryrefslogtreecommitdiff
path: root/source4/build/pidl/eparser.pm
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2004-06-08 12:33:47 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:56:37 -0500
commiteaae8b6f5f21c758db90a1008e91967fcfbc3513 (patch)
tree06117ae9967cc6b7dca20a5da8b9e24ef18f432b /source4/build/pidl/eparser.pm
parentf3826432fb14b1e10516afe9f6525aab7c1b720f (diff)
downloadsamba-eaae8b6f5f21c758db90a1008e91967fcfbc3513.tar.gz
samba-eaae8b6f5f21c758db90a1008e91967fcfbc3513.tar.bz2
samba-eaae8b6f5f21c758db90a1008e91967fcfbc3513.zip
r1083: Generate prototypes for structs and unions marked "public" in the idl.
Delete various hacks to work around not doing this before. (This used to be commit 5c3c3d3e72d8dd5d995a5bc5b2c7d7217b7c0432)
Diffstat (limited to 'source4/build/pidl/eparser.pm')
-rw-r--r--source4/build/pidl/eparser.pm52
1 files changed, 31 insertions, 21 deletions
diff --git a/source4/build/pidl/eparser.pm b/source4/build/pidl/eparser.pm
index fb8d0e39ca..fd2f721f36 100644
--- a/source4/build/pidl/eparser.pm
+++ b/source4/build/pidl/eparser.pm
@@ -785,7 +785,7 @@ sub ParseInterface($)
my($data) = $interface->{DATA};
foreach my $d (@{$data}) {
- if ($d->{TYPE} eq "TYPEDEF") {
+ if ($d->{TYPE} eq "TYPEDEF") {
$structs{$d->{NAME}} = $d;
}
}
@@ -827,8 +827,6 @@ sub NeededFunction($)
'ft' => type2ft($e->{TYPE}),
'base' => type2base($e->{TYPE})
};
- $needed{"proto_$e->{TYPE}"} = 1,
- if !util::is_builtin_type($e->{TYPE});
$e->{PARENT} = $fn;
}
}
@@ -851,9 +849,6 @@ sub NeededTypedef($)
'base' => type2base($e->{TYPE})
};
- $needed{"proto_$e->{TYPE}"} = 1,
- if !util::is_builtin_type($e->{TYPE});
-
$e->{PARENT} = $t->{DATA};
if ($needed{"pull_$t->{NAME}"}) {
$needed{"pull_$e->{TYPE}"} = 1;
@@ -861,11 +856,9 @@ sub NeededTypedef($)
}
}
if ($t->{DATA}->{TYPE} eq "UNION") {
- $needed{"proto_$t->{NAME}"} = "union";
for my $e (@{$t->{DATA}->{DATA}}) {
$e->{PARENT} = $t->{DATA};
if ($e->{TYPE} eq "UNION_ELEMENT") {
- $needed{"proto_$e->{DATA}->{TYPE}"} = 1;
if ($needed{"pull_$t->{NAME}"}) {
$needed{"pull_$e->{DATA}->{TYPE}"} = 1;
}
@@ -901,6 +894,36 @@ sub ModuleHeader($)
$if_endpoints = $h->{PROPERTIES}->{endpoints};
}
+sub ParseHeader($$)
+{
+ my($idl) = shift;
+ my($filename) = shift;
+
+ open(OUT, ">$filename") || die "can't open $filename";
+
+ pidl "/* parser auto-generated by pidl */\n\n";
+
+ foreach my $x (@{$idl}) {
+ if ($x->{TYPE} eq "INTERFACE") {
+ foreach my $d (@{$x->{DATA}}) {
+ if ($d->{TYPE} eq "TYPEDEF" and
+ util::has_property($d->{DATA}, "public")) {
+
+ if ($d->{DATA}{TYPE} eq "STRUCT") {
+ pidl "void ndr_pull_$d->{NAME}(struct e_ndr_pull *ndr, int ndr_flags);\n";
+ }
+
+ if ($d->{DATA}{TYPE} eq "UNION") {
+ pidl "void ndr_pull_$d->{NAME}(struct e_ndr_pull *ndr, int ndr_flags, int level);\n";
+ }
+ }
+ }
+ }
+ }
+
+ close(OUT);
+}
+
#####################################################################
# parse a parsed IDL structure back into an IDL file
sub Parse($$)
@@ -944,19 +967,6 @@ sub Parse($$)
pidl "static int $y = -1;\n", if $y =~ /^hf_/;
}
- # Function prototypes
-
- foreach my $x (keys(%needed)) {
- next, if !($x =~ /^proto_/);
- my $name = $x;
- $name =~ s/^proto_//;
- pidl "void ndr_pull_$name(struct e_ndr_pull *ndr, int ndr_flags";
-
- pidl ", int level", if $needed{$x} eq "union";
-
- pidl ");\n";
- }
-
ParseInterface($x);
}
}