changeset 697:469aff29c27c

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 21 Aug 2020 18:58:47 +0900
parents 69a00f5ff08c
children 73ebf05f48ee
files src/parallel_execution/generate_stub.pl
diffstat 1 files changed, 35 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/generate_stub.pl	Fri Aug 21 17:40:35 2020 +0900
+++ b/src/parallel_execution/generate_stub.pl	Fri Aug 21 18:58:47 2020 +0900
@@ -72,6 +72,7 @@
 my $interfaceNameToHeaderPath = createInterfaceNameToHeaderPath($FindBin::Bin);
 my $searchCbCFromCodeGearAndFilename  = createSearchCbCFileFromCodeGearNameAndFilename($FindBin::Bin);
 my %filename2EachCodeGearArgs;
+my %specialyEmitStubCodeGears;
 
 my $implInterfaceInfo = {isImpl => undef, implementation => undef, interface => undef};
 
@@ -203,8 +204,9 @@
                 }
 
                 my $res = findExistsOutputDataGear($typeName, $method);
-                print "[INFO] found instance $instance, typeName $typeName, cuurentCodeGear: $currentCodeGear, method: $method\n";
-
+                if ($res) {
+                   $specialyEmitStubCodeGears{$currentCodeGear} = $res;
+                }
             } elsif (/^}$/) {
               $currentCodeGear = undef;
             }
@@ -359,6 +361,34 @@
     return 1;
 }
 
+sub generateImplStubArgs {
+    my ($codeGearName, $varName, $typeName, $ptrType, $output, $interfaceName, $isImpl) = @_;
+    return 0 unless $isImpl;
+    for my $ivar (keys %{$var{$interfaceName}}) {
+        #  input data gear field
+        if ($varName eq $ivar) {
+            if ($typeName eq $var{$interfaceName}->{$ivar}) {
+                if ($output) {
+                    $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef($context_name, $interfaceName)->$varName;\n";
+                    $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName  __attribute__((unused))  = *O_$varName;\n";
+                    return 1;
+                }
+                $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef($context_name, $interfaceName)->$varName;\n";
+                return 1;
+            }
+        }
+    }
+
+    # interface continuation
+    for my $cName (keys %{$code{$interfaceName}}) {
+        if ($varName eq $cName) {
+            # continuation field
+            $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef($context_name, $interfaceName)->$varName;\n";
+            return 1;
+        }
+    }
+}
+
 sub generateStubArgs {
     my($codeGearName, $varName, $typeName, $ptrType, $typeField, $implInterfaceInfo,$output) = @_;
 
@@ -373,6 +403,7 @@
     }
     push @{$dataGearVar{$codeGearName}}, $varname1;
     push @{$dataGearVarType{$codeGearName}}, $typeName;
+
     if ($isImpl){
         if ($implName eq $typeName) {
           # get implementation
@@ -381,33 +412,7 @@
         }
     }
 
-
-    # interface var
-    if ($isImpl) {
-      for my $ivar (keys %{$var{$interfaceName}}) {
-          #  input data gear field
-          if ($varName eq $ivar) {
-              if ($typeName eq $var{$interfaceName}->{$ivar}) {
-                  if ($output) {
-                      $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef($context_name, $interfaceName)->$varName;\n";
-                      $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName  __attribute__((unused))  = *O_$varName;\n";
-                      return 1;
-                  }
-                  $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef($context_name, $interfaceName)->$varName;\n";
-                  return 1;
-              }
-          }
-      }
-
-      # interface continuation
-      for my $cName (keys %{$code{$interfaceName}}) {
-          if ($varName eq $cName) {
-              # continuation field
-              $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef($context_name, $interfaceName)->$varName;\n";
-              return 1;
-          }
-      }
-    }
+    return 1 if generateImplStubArgs($codeGearName, $varName, $typeName, $ptrType, $output, $interfaceName, $isImpl);
 
     # par goto  var
     for my $var (keys %{$codeGear{$codeGearName}->{"var"}}) {
@@ -450,7 +455,6 @@
 
 sub findExistsOutputDataGear {
     my ($interfaceName, $method) = @_;
-                use DDP {deparse => 1};
 
     my $interfacePATH = $interfaceNameToHeaderPath->{$interfaceName};
     unless ($interfacePATH) {
@@ -469,9 +473,6 @@
 
     my $vname2types = $parsedInterface->{hasOutputArgs}->{$method};
 
-    use Data::Dumper;
-    print Dumper $parsedInterface;
-    p $parsedInterface;
     my @outputArgs = keys %$vname2types;
     return \@outputArgs;
 }
@@ -828,6 +829,7 @@
             $stub{$prevCodeGearName."_stub"} = &generateStub($fd,$prevCodeGearName,$dataGearName{$codeGearName});
         }
     }
+
 }
 
 sub createInterfaceNameToHeaderPath {