} elsif(/^ident\s+(.*)/) {
print OUT $t, "# $1\n";
}
- } elsif(/^\s*(typedef\s*)?enum\s*(\s+[a-zA-Z_]\w*\s*)?\{/) {
- until(/\}.*?;/) {
- chomp($next = <IN>);
+ } elsif(/^\s*(typedef\s*)?enum\s*(\s+[a-zA-Z_]\w*\s*)?/) {
+ until(/\{[^}]*\}.*;/ || /;/) {
+ last unless defined ($next = next_line());
+ chomp $next;
+ # drop "#define FOO FOO" in enums
+ $next =~ s/^\s*#\s*define\s+(\w+)\s+\1\s*$//;
$_ .= $next;
print OUT "# $next\n" if $opt_D;
}
+ s/#\s*if.*?#\s*endif//g; # drop #ifdefs
s@/\*.*?\*/@@g;
s/\s+/ /g;
- /^\s?(typedef\s?)?enum\s?([a-zA-Z_]\w*)?\s?\{(.*)\}\s?([a-zA-Z_]\w*)?\s?;/;
+ next unless /^\s?(typedef\s?)?enum\s?([a-zA-Z_]\w*)?\s?\{(.*)\}\s?([a-zA-Z_]\w*)?\s?;/;
(my $enum_subs = $3) =~ s/\s//g;
my @enum_subs = split(/,/, $enum_subs);
my $enum_val = -1;
# Eliminate typedefs
/\(([\w\s]+)[\*\s]*\)\s*[\w\(]/ && do {
foreach (split /\s+/, $1) { # Make sure all the words are types,
- last unless ($isatype{$_} or $_ eq 'struct');
+ last unless ($isatype{$_} or $_ eq 'struct' or $_ eq 'union');
}
s/\([\w\s]+[\*\s]*\)// && next; # then eliminate them.
};
};
s/^([_a-zA-Z]\w*)// && do {
my $id = $1;
- if ($id eq 'struct') {
+ if ($id eq 'struct' || $id eq 'union') {
s/^\s+(\w+)//;
$id .= ' ' . $1;
$isatype{$id} = 1;
} elsif ($in =~ s/^("(\\.|[^"\\])*")//) { # "...
$out .= $1;
} elsif ($in =~ s/^\/\/.*//) { # //...
- last READ;
+ # fall through
} elsif ($in =~ m/^\/\*/) { # /*...
# C comment removal adapted from perlfaq6:
if ($in =~ s/^\/\*[^*]*\*+([^\/*][^*]*\*+)*\///) {
}
}
- last READ;
+ last READ if $out =~ /\S/;
}
return $out;
print PREAMBLE "# $_=$define{$_}\n";
}
- if ($define{$_} =~ /^\d+$/) {
+ if ($define{$_} =~ /^(\d+)U?L{0,2}$/i) {
print PREAMBLE
- "unless (defined &$_) { sub $_() { $define{$_} } }\n\n";
+ "unless (defined &$_) { sub $_() { $1 } }\n\n";
} elsif ($define{$_} =~ /^\w+$/) {
print PREAMBLE
"unless (defined &$_) { sub $_() { &$define{$_} } }\n\n";