# HG changeset patch # User anatofuz # Date 1598003927 -32400 # Node ID 469aff29c27c28edcb1eeb98085bd1795ec08e66 # Parent 69a00f5ff08c37c69e097691b47bdc5abdd9a30f ... diff -r 69a00f5ff08c -r 469aff29c27c src/parallel_execution/generate_stub.pl --- 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 {