Mercurial > hg > Gears > Gears
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) {