{
my($interface) = @_;
Const($_,$interface->{NAME}) foreach (@{$interface->{CONSTS}});
- Typedef($_,$interface->{NAME}) foreach (@{$interface->{TYPEDEFS}});
+ Typedef($_,$interface->{NAME}) foreach (@{$interface->{TYPES}});
Function($_,$interface->{NAME}) foreach (@{$interface->{FUNCTIONS}});
}
#####################################################################
# align a type
-sub align_type
+sub align_type($)
{
+ sub align_type($);
my $e = shift;
unless (hasType($e)) {
};
}
-sub ParseStruct($)
+sub ParseStruct($$)
{
- my $struct = shift;
+ my ($ndr,$struct) = @_;
my @elements = ();
my $surrounding = undef;
};
}
-sub ParseUnion($)
+sub ParseUnion($$)
{
- my $e = shift;
+ my ($ndr,$e) = @_;
my @elements = ();
my $switch_type = has_property($e, "switch_type");
unless (defined($switch_type)) { $switch_type = "uint32"; }
};
}
-sub ParseEnum($)
+sub ParseEnum($$)
{
- my $e = shift;
+ my ($ndr,$e) = @_;
return {
TYPE => "ENUM",
};
}
-sub ParseBitmap($)
+sub ParseBitmap($$)
{
- my $e = shift;
+ my ($ndr,$e) = @_;
return {
TYPE => "BITMAP",
};
}
-sub ParseTypedef($$)
+sub ParseType($$)
{
- my ($ndr,$d) = @_;
- my $data;
+ my ($ndr, $d) = @_;
- if ($d->{DATA}->{TYPE} eq "STRUCT" or $d->{DATA}->{TYPE} eq "UNION") {
- CheckPointerTypes($d->{DATA}, $ndr->{PROPERTIES}->{pointer_default});
+ if ($d->{TYPE} eq "STRUCT" or $d->{TYPE} eq "UNION") {
+ CheckPointerTypes($d, $ndr->{PROPERTIES}->{pointer_default});
}
- if (defined($d->{PROPERTIES}) && !defined($d->{DATA}->{PROPERTIES})) {
- $d->{DATA}->{PROPERTIES} = $d->{PROPERTIES};
- }
-
- $data = {
+ my $data = {
STRUCT => \&ParseStruct,
UNION => \&ParseUnion,
ENUM => \&ParseEnum,
- BITMAP => \&ParseBitmap
- }->{$d->{DATA}->{TYPE}}->($d->{DATA});
+ BITMAP => \&ParseBitmap,
+ TYPEDEF => \&ParseTypedef,
+ }->{$d->{TYPE}}->($ndr, $d);
+
+ return $data;
+}
+
+sub ParseTypedef($$)
+{
+ my ($ndr,$d) = @_;
+ if (defined($d->{PROPERTIES}) && !defined($d->{DATA}->{PROPERTIES})) {
+ $d->{DATA}->{PROPERTIES} = $d->{PROPERTIES};
+ }
+
+ my $data = ParseType($ndr, $d->{DATA});
$data->{ALIGN} = align_type($d->{NAME});
return {
sub ParseInterface($)
{
my $idl = shift;
- my @typedefs = ();
+ my @types = ();
my @consts = ();
my @functions = ();
my @endpoints;
}
foreach my $d (@{$idl->{DATA}}) {
- if ($d->{TYPE} eq "TYPEDEF") {
- push (@typedefs, ParseTypedef($idl, $d));
- }
-
if ($d->{TYPE} eq "DECLARE") {
push (@declares, $d);
- }
-
- if ($d->{TYPE} eq "FUNCTION") {
+ } elsif ($d->{TYPE} eq "FUNCTION") {
push (@functions, ParseFunction($idl, $d, \$opnum));
- }
-
- if ($d->{TYPE} eq "CONST") {
+ } elsif ($d->{TYPE} eq "CONST") {
push (@consts, ParseConst($idl, $d));
+ } else {
+ push (@types, ParseType($idl, $d));
}
}
PROPERTIES => $idl->{PROPERTIES},
FUNCTIONS => \@functions,
CONSTS => \@consts,
- TYPEDEFS => \@typedefs,
+ TYPES => \@types,
DECLARES => \@declares,
ENDPOINTS => \@endpoints
};
pidl "";
- foreach (@{$if->{TYPEDEFS}}) {
+ foreach (@{$if->{TYPES}}) {
ParseStruct($if, $_->{DATA}, $_->{NAME}) if ($_->{DATA}->{TYPE} eq "STRUCT");
ParseEnum($if, $_->{DATA}, $_->{NAME}) if ($_->{DATA}->{TYPE} eq "ENUM");
ParseBitmap($if, $_->{DATA}, $_->{NAME}) if ($_->{DATA}->{TYPE} eq "BITMAP");
# Structures first
pidl "/* $if->{NAME} structures */";
- foreach (@{$if->{TYPEDEFS}}) {
+ foreach (@{$if->{TYPES}}) {
ParseStruct($if, $_->{DATA}, $_->{NAME}) if ($_->{DATA}->{TYPE} eq "STRUCT");
ParseUnion($if, $_->{DATA}, $_->{NAME}) if ($_->{DATA}->{TYPE} eq "UNION");
}
foreach my $if (@{$ndr}) {
next unless ($if->{TYPE} eq "INTERFACE");
- foreach my $td (@{$if->{TYPEDEFS}}) {
+ foreach my $td (@{$if->{TYPES}}) {
my $decl = uc("$if->{NAME}_$td->{NAME}");
my $init = sub {
%constants = ();
- foreach my $d (@{$interface->{TYPEDEFS}}) {
+ foreach my $d (@{$interface->{TYPES}}) {
($needed->{"push_$d->{NAME}"}) && EjsTypedefPush($d);
($needed->{"pull_$d->{NAME}"}) && EjsTypedefPull($d);
}
foreach my $d (@{$interface->{FUNCTIONS}}) {
NeededFunction($d, $needed);
}
- foreach my $d (reverse @{$interface->{TYPEDEFS}}) {
+ foreach my $d (reverse @{$interface->{TYPES}}) {
NeededTypedef($d, $needed);
}
}
pidl "\n";
- foreach my $d (@{$interface->{TYPEDEFS}}) {
- HeaderTypedefProto($d);
- }
+ HeaderTypedefProto($_) foreach (@{$interface->{TYPES}});
pidl "\n";
pidl "#endif /* _HEADER_EJS_$interface->{NAME} */\n";
HeaderInterface($interface);
# Typedefs
- foreach my $d (@{$interface->{TYPEDEFS}}) {
+ foreach my $d (@{$interface->{TYPES}}) {
($needed->{"push_$d->{NAME}"}) && ParseTypedefPush($d);
($needed->{"pull_$d->{NAME}"}) && ParseTypedefPull($d);
($needed->{"print_$d->{NAME}"}) && ParseTypedefPrint($d);
{
my ($interface,$needed) = @_;
NeededFunction($_, $needed) foreach (@{$interface->{FUNCTIONS}});
- NeededTypedef($_, $needed) foreach (reverse @{$interface->{TYPEDEFS}});
+ NeededTypedef($_, $needed) foreach (reverse @{$interface->{TYPES}});
}
1;