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;