Mercurial > hg > Gears > Gears
changeset 668:6c07eb2d4d39
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 18 Aug 2020 21:59:47 +0900 |
parents | 72b7863ea5b4 |
children | e8800c60811a |
files | src/parallel_execution/generate_stub.pl |
diffstat | 1 files changed, 41 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/generate_stub.pl Tue Aug 18 19:56:33 2020 +0900 +++ b/src/parallel_execution/generate_stub.pl Tue Aug 18 21:59:47 2020 +0900 @@ -69,7 +69,8 @@ my $interface; my %call_interfaces; my $interface_name_to_header_path = create_interface_name_to_header_path($FindBin::Bin); -my $cbc_name_to_source_path = create_cbc_name_to_source_path($FindBin::Bin); +my $search_cbc_from_code_gear_and_filename = create_search_cbc_file_from_code_gear_name_and_filename($FindBin::Bin); + # this for statement is main routine @@ -135,16 +136,16 @@ } $interface = $1; $implementation = $3; - if ( -f "$interface.cbc") { - &getDataGear("$interface.cbc"); + if ($search_cbc_from_code_gear_and_filename->($interface, $filename)) { + &getDataGear($search_cbc_from_code_gear_and_filename->($interface, $filename)); } } elsif(/^(.*)par goto (\w+)\((.*)\)/) { my $codeGearName = $2; if ($filename =~ /^(.*)\/(.*)/) { $codeGearName = "$1/$codeGearName"; } - if ( -f "$codeGearName.cbc") { - &getCodeGear("$codeGearName.cbc"); + if ($search_cbc_from_code_gear_and_filename->($codeGearName, $filename)) { + &getDataGear($search_cbc_from_code_gear_and_filename->($codeGearName, $filename)); } } elsif(/^#interface "(.*)"/) { # use interface @@ -159,11 +160,8 @@ } } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) { my $codeGearName = $1; - if ($filename =~ /^(.*)\/(.*)/) { - $codeGearName = "$1/$codeGearName"; - } - if ( -f "$codeGearName.cbc") { - &getCodeGear("$codeGearName.cbc"); + if ($search_cbc_from_code_gear_and_filename->($codeGearName, $filename)) { + &getCodeGear($search_cbc_from_code_gear_and_filename->($codeGearName, $filename)); } } next; @@ -748,6 +746,17 @@ } sub create_cbc_name_to_source_path { + # create this structure + # + # { + # SemaphoreImpl.cbc [ + # [0] "/Users/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/SemaphoreImpl.cbc", + # [1] "/Users/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/examples/boundedBuffer/SemaphoreImpl.cbc" + # ], + # SingleLinkedQueue.cbc [ + # [0] "/Users/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/SingleLinkedQueue.cbc" + # ], + # } my $search_root = shift; my $files = Gears::Util->find_cbc_sources_from_path($search_root); @@ -760,3 +769,25 @@ return $cbc_name2_source_path; } +sub create_search_cbc_file_from_code_gear_name_and_filename { + my $search_root = shift; + my $cbc_name2_source_path = create_cbc_name_to_source_path($search_root); + + # return sub is create clojure + return sub { + my ($codeGearName, $filename) = @_; + my $cbc_files_ref = $cbc_name2_source_path->{$codeGearName} // []; + my @cbc_files = @$cbc_files_ref; + + if (scalar(@cbc_files) == 0) { # Not Found + return 0; #false case + } + + if (scalar(@cbc_files) == 1) { # this case $codeGearName.cbc is single (SingleLinkedQueue.cbc) + return shift @cbc_files; # return "/Users/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/SingleLinkedQueue.cbc" + } + + + $filename = rel2abs($filename); + } +}