Mercurial > hg > Gears > Gears
changeset 816:20fdc6938627
better to use hash...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 17 Jan 2021 22:08:48 +0900 |
parents | d1116c484387 |
children | 720c6e5927ca |
files | src/parallel_execution/generate_context.pl src/parallel_execution/lib/Gears/Context.pm src/parallel_execution/lib/Gears/Interface.pm |
diffstat | 3 files changed, 23 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/generate_context.pl Sun Jan 17 21:39:28 2021 +0900 +++ b/src/parallel_execution/generate_context.pl Sun Jan 17 22:08:48 2021 +0900 @@ -350,35 +350,35 @@ } sub find_generics_each_item { - my ($interface, $entry) = @_; - my @generics; + my ($interface, $entry, $generics, $typed_variables) = @_; if (defined $entry->{generics}) { - push(@generics, { name => $interface, generics => $entry->{generics}}); + push(@$generics, { name => $interface, generics => $entry->{generics}}); } if (defined $entry->{typed_variable}) { - push(@generics, { name => $interface, generics => $entry->{typed_variable}}); + push(@$typed_variables, { name => $interface, typed_variable => $entry->{typed_variable}}); } - return @generics; } sub parsed_generics_from_tree { my ($tree) = shift; my @generics; + my @typed_variables; for my $interface (keys %$tree) { my $entry = $tree->{$interface}; my $interface_entry = $entry->{elem}; - push(@generics, find_generics_each_item($interface, $interface_entry)); + find_generics_each_item($interface, $interface_entry, \@generics, \@typed_variables); for my $impl (keys %{$entry->{impl}}) { my $impl_entry = $entry->{impl}->{$impl}; - push(@generics, find_generics_each_item($interface, $impl_entry)); + find_generics_each_item($interface, $impl_entry, \@generics, \@typed_variables); } } - #p @generics; - + # p @generics; + # p @typed_variables; + # my %generics_info = (); for my $item (@generics) {
--- a/src/parallel_execution/lib/Gears/Context.pm Sun Jan 17 21:39:28 2021 +0900 +++ b/src/parallel_execution/lib/Gears/Context.pm Sun Jan 17 22:08:48 2021 +0900 @@ -74,7 +74,7 @@ push(@{$counter{interfaces}->{$interface}->{$cbc_file}},$.); push(@{$counter{impl}->{$implementation}->{$cbc_file}},$.); if ($generics) { - push(@{$self->{generics_list}->{typed_varible}}, { name => $1, typed_variable => $3, caller => $cbc_file, line_number => $.}); + push(@{$self->{generics_list}->{typed_varible}}, { name => $interface, typed_variable => $generics, caller => $cbc_file, line_number => $.}); } next; }
--- a/src/parallel_execution/lib/Gears/Interface.pm Sun Jan 17 21:39:28 2021 +0900 +++ b/src/parallel_execution/lib/Gears/Interface.pm Sun Jan 17 22:08:48 2021 +0900 @@ -109,14 +109,18 @@ if ($typed_variable) { ($val, $generics_info) = check_use_typed_variable($ir->{name},$typed_variable, $val); #define typed variable if (defined $generics_info->{type}){ - push(@{$ir->{typed_variable}},$generics_info); + unless (grep {$_->{vname} eq $generics_info->{vname} } @{$ir->{typed_variable}}) { + push(@{$ir->{typed_variable}},$generics_info); + } } } $generics_info = {}; - ($val, $generics_info) = check_use_instance_generics_type($val); #define typed variable + ($val, $generics_info) = check_use_instance_generics_type($val); #define instance generics variable if (defined $generics_info->{type}){ - push(@{$ir->{generics}},$generics_info); + unless (grep {$_->{vname} eq $generics_info->{vname} } @{$ir->{generics}}) { + push(@{$ir->{generics}},$generics_info); + } } push(@data_gears, $const_type ? "$const_type $val" : $val); @@ -132,13 +136,17 @@ if ($typed_variable && keys(%$typed_variable)) { ($line, $generics_info) = check_use_typed_variable($ir->{name},$typed_variable, $line); #define typed variable if (defined $generics_info->{type}){ - push(@{$ir->{typed_variable}},$generics_info); + unless (grep {$_->{vname} eq $generics_info->{vname} } @{$ir->{typed_variable}}) { + push(@{$ir->{typed_variable}},$generics_info); + } } } $generics_info = {}; ($line, $generics_info) = check_use_instance_generics_type($line); #define typed variable if (defined $generics_info->{type}){ - push(@{$ir->{generics}},$generics_info); + unless (grep {$_->{vname} eq $generics_info->{vname} } @{$ir->{generics}}) { + push(@{$ir->{generics}},$generics_info); + } } push(@data_gears,$line); $static_data_gear_write_mode = 1;