changeset 823:64a70e5778a7

parsed argument generics
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 18 Jan 2021 13:34:32 +0900
parents a5c4d6e50d4b
children 2deb394a53a9
files src/parallel_execution/generate_context.pl src/parallel_execution/lib/Gears/Context.pm
diffstat 2 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/generate_context.pl	Mon Jan 18 13:05:46 2021 +0900
+++ b/src/parallel_execution/generate_context.pl	Mon Jan 18 13:34:32 2021 +0900
@@ -374,6 +374,7 @@
     my %generics;
     my %typed_variables;
 
+    #p $tree;
 
     for my $interface (keys %$tree) {
       my $entry = $tree->{$interface};
@@ -396,6 +397,7 @@
 sub check_use_generics {
   my ($input_typed_variables, $generics, $cfile_generics_list) = @_;
 
+  #p $cfile_generics_list;
   my $typed_variables = {};
   my $typed_instances = {};
 
@@ -430,6 +432,8 @@
     }
   }
 
+  #p $typed_instances;
+  #p $typed_variables;
 
 
 
--- a/src/parallel_execution/lib/Gears/Context.pm	Mon Jan 18 13:05:46 2021 +0900
+++ b/src/parallel_execution/lib/Gears/Context.pm	Mon Jan 18 13:34:32 2021 +0900
@@ -60,7 +60,7 @@
        }
 
 
-       if ($line =~ /^\s*(\w+)(<(.*)>)?\*\s*create(\w+)\(([,*\w\s]+)\)/) {
+       if ($line =~ /^\s*(\w+)(<(.*)>)?\*\s*create(\w+)\(([<>,*\w\s]+)\)/) {
          #AtomicT<T>* createAtomicT(struct Context* context,T init) {
          # this case defined interface or implement
          # T means typed variables, not implement generics
@@ -71,6 +71,33 @@
           if ($arg eq "") {
             next;
           }
+
+          if ($arg =~ /</) { #generics in arg
+            my @tmpArgs = split /,/, $arg;
+            my @genericsArgs = grep { /\w+\s*<\w+>/} @tmpArgs;
+            for my $tmpArg (@genericsArgs) {
+              #[0] " AtomicT<int> right",
+              #[1] " AtomicT<int> left"
+              if ($tmpArg =~ /(\w+)<(\w+)>\s*(\w+)/){
+                my $tmpType     = $1;
+                my $tmpGenerics = $2;
+                my $tmpVarName  = $3;
+
+                if ($tmpGenerics eq $generics) { #Test<T>* createTest(Impl test, Hoge<T>) case
+                    push(
+                      @{$self->{generics_list}->{typed_varible}},
+                      { name => $tmpType, typed_variable => $tmpGenerics, caller => $cbc_file, line_number => $.}
+                    );
+                } else {
+                    push(
+                      @{$self->{generics_list}->{defined_type}},
+                      { name => $tmpType, defined_type => $tmpGenerics, caller => $cbc_file, line_number => $.}
+                    );
+                }
+              }
+            }
+          }
+
           push(@{$counter{interfaces}->{$interface}->{$cbc_file}},$.);
           push(@{$counter{impl}->{$implementation}->{$cbc_file}},$.);
           if ($generics) {