From 6b11a3c3f81d7db3794f3320eeaef8001cc99b74 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 7 Apr 2010 17:22:51 +0200 Subject: [PATCH] winapi: Add some support for handling ifdefs, particularly ifdef _WIN64. --- tools/winapi/c_type.pm | 5 +++++ tools/winapi/winapi_test | 27 +++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/tools/winapi/c_type.pm b/tools/winapi/c_type.pm index 4e54270625e..b00cf81894d 100644 --- a/tools/winapi/c_type.pm +++ b/tools/winapi/c_type.pm @@ -330,30 +330,35 @@ sub new($$$) sub align($) { my ($self) = @_; + return undef unless defined $self->{TYPE}->field_aligns(); return $self->{TYPE}->field_aligns()->[$self->{NUMBER}]; } sub base_size($) { my ($self) = @_; + return undef unless defined $self->{TYPE}->field_base_sizes(); return $self->{TYPE}->field_base_sizes()->[$self->{NUMBER}]; } sub name($) { my ($self) = @_; + return undef unless defined $self->{TYPE}->field_names(); return $self->{TYPE}->field_names()->[$self->{NUMBER}]; } sub offset($) { my ($self) = @_; + return undef unless defined $self->{TYPE}->field_offsets(); return $self->{TYPE}->field_offsets()->[$self->{NUMBER}]; } sub size($) { my ($self) = @_; + return undef unless defined $self->{TYPE}->field_sizes(); return $self->{TYPE}->field_sizes()->[$self->{NUMBER}]; } diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test index cf3a2b614b3..cafbafb5423 100755 --- a/tools/winapi/winapi_test +++ b/tools/winapi/winapi_test @@ -352,6 +352,7 @@ foreach my $file (@files) { my $line; my $type; my @packs = (4); + my @ifdefs = (); my $update_output = sub { my $progress = ""; @@ -384,19 +385,37 @@ foreach my $file (@files) { #print "found_preprocessor: $begin_line: [$_]\n"; if ($preprocessor =~ /^\#\s*include\s+[\"<]pshpack(\d+)\.h[\">]$/) { - push @packs, $1; + push @packs, $1 unless @ifdefs && !$ifdefs[$#ifdefs]; #print "found pack $1 on line $begin_line\n"; } elsif($preprocessor =~ /^\#\s*include\s+[\"<]poppack\.h[\">]$/) { - pop @packs; + pop @packs unless @ifdefs && !$ifdefs[$#ifdefs]; #print "found poppack on line $begin_line\n"; - } - + } elsif ($preprocessor =~ /^\#\s*ifdef\s+_WIN64/) { + push @ifdefs, 0; + } elsif ($preprocessor =~ /^\#\s*ifndef\s+_WIN64/) { + push @ifdefs, 1; + } elsif ($preprocessor =~ /^\#\s*elif\s+defined(_WIN64)/) { + $ifdefs[$#ifdefs] = 0; + } elsif ($preprocessor =~ /^\#\s*ifdef\s/) { + push @ifdefs, 2; + } elsif ($preprocessor =~ /^\#\s*ifndef\s/) { + push @ifdefs, 2; + } elsif ($preprocessor =~ /^\#\s*if/) { + push @ifdefs, 2; + } elsif ($preprocessor =~ /^\#\s*else/) { + $ifdefs[$#ifdefs] = $ifdefs[$#ifdefs] ^ 1; + } elsif ($preprocessor =~ /^\#\s*elif/) { + $ifdefs[$#ifdefs] = 2; + } elsif ($preprocessor =~ /^\#\s*endif/) { + pop @ifdefs; + } return 1; }; $parser->set_found_preprocessor_callback($found_preprocessor); my $found_type = sub { $type = shift; + return if @ifdefs && !$ifdefs[$#ifdefs]; &$update_output(); -- 2.11.4.GIT