}
} elsif(/^\s*(typedef\s*)?enum\s*(\s+[a-zA-Z_]\w*\s*)?/) {
until(/\{[^}]*\}.*;/ || /;/) {
- last unless defined ($next = <IN>);
+ last unless defined ($next = next_line());
chomp $next;
# drop "#define FOO FOO" in enums
$next =~ s/^\s*#\s*define\s+(\w+)\s+\1\s*$//;
# 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";