# HG changeset patch # User anatofuz # Date 1595845056 -32400 # Node ID aa97e53b167cdfc8031f334b88a222064241fba7 # Parent 4e9638616d312c82631e80a09deef74c732270c2 updatge localCode from each cbc files diff -r 4e9638616d31 -r aa97e53b167c src/gearsTools/generate_stub.pl --- a/src/gearsTools/generate_stub.pl Mon Jul 27 15:41:04 2020 +0900 +++ b/src/gearsTools/generate_stub.pl Mon Jul 27 19:17:36 2020 +0900 @@ -63,6 +63,7 @@ my %codeGear; my $implementation; my $interface; +my %filename2localCodes; # interface definision # @@ -94,6 +95,9 @@ sub getDataGear { my ($filename) = @_; + + setFilename2CodeGear($filename); + my ($codeGearName, $name, $inTypedef,$described_data_gear); open my $fd,"<",$filename or die("can't open $filename $!"); while (<$fd>) { @@ -398,7 +402,6 @@ my %stub; my $codeGearName; my %localVarType; - my %localCode; while (<$in>) { if (! $inTypedef && ! $inStub && ! $inMain) { @@ -410,15 +413,8 @@ my $interfaceHeader = $1; # #interface not write next unless ($interfaceHeader =~ /context.h/); - } elsif (/extern\s+_\_code\s+(\w+)\((.*)\)/) { - $localCode{$1} = 1; - } elsif (/^\s\s*_\_code\s+(\w+)\((.*)\)(.*)/) { - $localCode{$1} = 1; - } elsif (/^\s\s*_\_code *\(\s*\*\s*(\w+)\)\((.*)\)(.*)/) { - $localCode{$1} = 1; } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) { $inCode = 1; - $localCode{$inCode} = 0; %localVarType = {}; $codeGearName = $1; my $args = $2; @@ -646,7 +642,7 @@ my $next = $2; my @args = split(/,/, $3); my $v = 0; - if (defined $localCode{$next}) { + if (findFromFilename2CodeGear($filename, $next)) { print $fd $_; next; } for my $n ( @{$dataGearVar{$codeGearName}} ) { @@ -723,4 +719,30 @@ } } + +# create localCode from each cbc files +sub setFilename2CodeGear { + my ($filename) = @_; + open my $fh, '<', $filename; + while (my $line = <$fh>) { + if ($line =~ /extern\s+_\_code\s+(\w+)\((.*)\)/) { + push(@{$filename2localCodes{$filename}},$1); + } elsif ($line =~ /^\s\s*_\_code\s+(\w+)\((.*)\)(.*)/) { + push(@{$filename2localCodes{$filename}},$1); + } elsif ($line =~ /^\s\s*_\_code *\(\s*\*\s*(\w+)\)\((.*)\)(.*)/) { + push(@{$filename2localCodes{$filename}},$1); + } elsif ($line =~ /^\_\_code (\w+)\((.*)\)(.*)/) { + push(@{$filename2localCodes{$filename}},$1); + } + } + close $fh; +} + +sub findFromFilename2CodeGear { + my ($filename, $cgname) = @_; + + my @result = grep { /^$cgname$/ } @{$filename2localCodes{$filename}}; + return @result; +} + # end