1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package CParse::StructDeclaration;
use 5.6.0;
use strict;
use warnings;
sub new
{
my $this = shift;
my $class = ref($this) || $this;
my $specifiers = shift;
my $declarators = shift;
my $self = {specifiers => $specifiers,
declarators => $declarators,
};
bless $self, $class;
return $self;
}
sub dump_c
{
my $self = shift;
my $specifiers = join(' ', grep {$_} map {$_->dump_c} @{$self->{specifiers}});
my $declarators = join(', ', map {$_->dump_c} @{$self->{declarators}});
return "$specifiers $declarators;\n";
}
sub get_members
{
my $self = shift;
my $namespace = shift;
my @attributes;
my @specifiers;
foreach my $specifier (@{$self->{specifiers}})
{
if ($specifier->isa('CParse::AttributeList'))
{
push @attributes, $specifier->attributes;
}
elsif ($specifier->isa('CParse::Struct') or $specifier->isa('CParse::Union') or $specifier->isa('CParse::Enum'))
{
$specifier->process($namespace);
push @specifiers, $specifier;
}
else
{
push @specifiers, $specifier;
}
}
return map {$_->get_member($namespace, \@specifiers, \@attributes)} @{$self->{declarators}};
}
1;
|