changeset 386:aa97e53b167c

updatge localCode from each cbc files
author anatofuz
date Mon, 27 Jul 2020 19:17:36 +0900
parents 4e9638616d31
children ba8f847f4769
files src/gearsTools/generate_stub.pl
diffstat 1 files changed, 31 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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