Rev 11529: Handle non-typedef top-level types in
file:///home/jelmer/bzr.samba/4.0-nestedpidl/
Jelmer Vernooij
jelmer at samba.org
Mon Feb 19 02:25:44 GMT 2007
At file:///home/jelmer/bzr.samba/4.0-nestedpidl/
------------------------------------------------------------
revno: 11529
revision-id: jelmer at samba.org-20070219022523-imfojpling7tb3jh
parent: jelmer at samba.org-20070218232408-0odp1ps0a4ary309
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 4.0-nestedpidl
timestamp: Mon 2007-02-19 03:25:23 +0100
message:
Handle non-typedef top-level types
modified:
source/pidl/lib/Parse/Pidl/Samba4/EJS.pm svn-v2:12463 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fpidl%2flib%2fParse%2fPidl%2fSamba4%2fEJS.pm
=== modified file 'source/pidl/lib/Parse/Pidl/Samba4/EJS.pm'
--- a/source/pidl/lib/Parse/Pidl/Samba4/EJS.pm 2007-02-18 18:44:56 +0000
+++ b/source/pidl/lib/Parse/Pidl/Samba4/EJS.pm 2007-02-19 02:25:23 +0000
@@ -157,7 +157,9 @@
and (defined($pl) and $pl->{TYPE} eq "POINTER")) {
$var = get_pointer_to($var);
}
- pidl "NDR_CHECK(ejs_pull_$e->{TYPE}(ejs, v, $name, $var));";
+ my $t = $e->{TYPE};
+ if (ref($t) eq "HASH") { $t = $t->{NAME}; }
+ pidl "NDR_CHECK(ejs_pull_$t(ejs, v, $name, $var));";
}
###########################
@@ -392,20 +394,24 @@
###########################
# generate a structure pull
-sub EjsTypedefPull($)
+sub EjsTypePull($)
{
my $d = shift;
return if (has_property($d, "noejs"));
- if ($d->{DATA}->{TYPE} eq 'STRUCT') {
- EjsStructPull($d->{NAME}, $d->{DATA});
- } elsif ($d->{DATA}->{TYPE} eq 'UNION') {
- EjsUnionPull($d->{NAME}, $d->{DATA});
- } elsif ($d->{DATA}->{TYPE} eq 'ENUM') {
- EjsEnumPull($d->{NAME}, $d->{DATA});
- } elsif ($d->{DATA}->{TYPE} eq 'BITMAP') {
- EjsBitmapPull($d->{NAME}, $d->{DATA});
+
+ my $name = $d->{NAME};
+ if ($d->{TYPE} eq "TYPEDEF") { $d = $d->{DATA}; }
+
+ if ($d->{TYPE} eq 'STRUCT') {
+ EjsStructPull($name, $d);
+ } elsif ($d->{TYPE} eq 'UNION') {
+ EjsUnionPull($name, $d);
+ } elsif ($d->{TYPE} eq 'ENUM') {
+ EjsEnumPull($name, $d);
+ } elsif ($d->{TYPE} eq 'BITMAP') {
+ EjsBitmapPull($name, $d);
} else {
- warn "Unhandled pull typedef $d->{NAME} of type $d->{DATA}->{TYPE}";
+ warn "Unhandled pull typedef $name of type $d->{TYPE}";
}
}
@@ -455,7 +461,9 @@
or (defined($pl) and $pl->{TYPE} eq "POINTER")) {
$var = get_pointer_to($var);
}
- pidl "NDR_CHECK(ejs_push_$e->{TYPE}(ejs, v, $name, $var));";
+ my $t = $e->{TYPE};
+ if (ref($t) eq "HASH") { $t = $t->{NAME}; }
+ pidl "NDR_CHECK(ejs_push_$t(ejs, v, $name, $var));";
}
###########################
@@ -668,21 +676,26 @@
###########################
# generate a structure push
-sub EjsTypedefPush($)
+sub EjsTypePush($)
{
my $d = shift;
return if (has_property($d, "noejs"));
- if ($d->{DATA}->{TYPE} eq 'STRUCT') {
- EjsStructPush($d->{NAME}, $d->{DATA});
- } elsif ($d->{DATA}->{TYPE} eq 'UNION') {
- EjsUnionPush($d->{NAME}, $d->{DATA});
- } elsif ($d->{DATA}->{TYPE} eq 'ENUM') {
- EjsEnumPush($d->{NAME}, $d->{DATA});
- } elsif ($d->{DATA}->{TYPE} eq 'BITMAP') {
- EjsBitmapPush($d->{NAME}, $d->{DATA});
+ my $name = $d->{NAME};
+ if ($d->{TYPE} eq "TYPEDEF") {
+ $d = $d->{DATA};
+ }
+
+ if ($d->{TYPE} eq 'STRUCT') {
+ EjsStructPush($name, $d);
+ } elsif ($d->{TYPE} eq 'UNION') {
+ EjsUnionPush($name, $d);
+ } elsif ($d->{TYPE} eq 'ENUM') {
+ EjsEnumPush($name, $d);
+ } elsif ($d->{TYPE} eq 'BITMAP') {
+ EjsBitmapPush($name, $d);
} else {
- warn "Unhandled push typedef $d->{NAME} of type $d->{DATA}->{TYPE}";
+ warn "Unhandled push typedef $name of type $d->{TYPE}";
}
}
@@ -767,8 +780,8 @@
pidl_hdr "\n";
foreach my $d (@{$interface->{TYPES}}) {
- ($needed->{"push_$d->{NAME}"}) && EjsTypedefPush($d);
- ($needed->{"pull_$d->{NAME}"}) && EjsTypedefPull($d);
+ ($needed->{"push_$d->{NAME}"}) && EjsTypePush($d);
+ ($needed->{"pull_$d->{NAME}"}) && EjsTypePull($d);
}
foreach my $d (@{$interface->{FUNCTIONS}}) {
@@ -875,7 +888,7 @@
}
}
-sub NeededTypedef($$)
+sub NeededType($$)
{
my ($t,$needed) = @_;
@@ -884,16 +897,20 @@
$needed->{"push_$t->{NAME}"} = not has_property($t, "noejs");
}
- return if (($t->{DATA}->{TYPE} ne "STRUCT") and
- ($t->{DATA}->{TYPE} ne "UNION"));
-
- foreach (@{$t->{DATA}->{ELEMENTS}}) {
+ my $name = $t->{NAME};
+
+ if ($t->{TYPE} eq "TYPEDEF") { $t = $t->{DATA}; }
+
+ return if (($t->{TYPE} ne "STRUCT") and
+ ($t->{TYPE} ne "UNION"));
+
+ foreach (@{$t->{ELEMENTS}}) {
next if (has_property($_, "subcontext")); #FIXME: Support subcontexts
unless (defined($needed->{"pull_$_->{TYPE}"})) {
- $needed->{"pull_$_->{TYPE}"} = $needed->{"pull_$t->{NAME}"};
+ $needed->{"pull_$_->{TYPE}"} = $needed->{"pull_$name"};
}
unless (defined($needed->{"push_$_->{TYPE}"})) {
- $needed->{"push_$_->{TYPE}"} = $needed->{"push_$t->{NAME}"};
+ $needed->{"push_$_->{TYPE}"} = $needed->{"push_$name"};
}
}
}
@@ -905,7 +922,7 @@
my ($interface,$needed) = @_;
NeededFunction($_, $needed) foreach (@{$interface->{FUNCTIONS}});
- NeededTypedef($_, $needed) foreach (reverse @{$interface->{TYPES}});
+ NeededType($_, $needed) foreach (reverse @{$interface->{TYPES}});
}
1;
More information about the samba-cvs
mailing list