changeset 894:ff670811f17a

use gotometa->()
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 26 Jan 2021 14:52:06 +0900
parents e656a5d80d1c
children 9fe2d98d0684
files src/parallel_execution/generate_stub.pl
diffstat 1 files changed, 13 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/generate_stub.pl	Tue Jan 26 14:36:55 2021 +0900
+++ b/src/parallel_execution/generate_stub.pl	Tue Jan 26 14:52:06 2021 +0900
@@ -604,7 +604,7 @@
     my ($filename, $inputCbCFile) = @_;
     open my $in,"<",$filename or die("can't open $filename $!");
 
-    findMetaPM($filename);
+    my $generateMeta = findAndLoadMetaPM($filename);
 
     my $fn;
     if ($opt_o) {
@@ -907,7 +907,7 @@
                 };
                 print $fd generateInterfaceGearef($_, $currentCodeGearName, $filename, $parsed, \%filename2EachCodeGearArgs, \%localVarType, $context_name);
                 my $next = "$parsed->{next}->$parsed->{method}";
-                print $fd $parsed->{prev},generateMeta($context_name, $next);
+                print $fd $parsed->{prev},$generateMeta->($currentCodeGearName, $context_name, $next);
                 next;
             } elsif(/^(.*)par goto (\w+)\((.*)\);/) {
                 debug_print("generateDataGear",__LINE__, $_) if $opt_debug;
@@ -1007,9 +1007,9 @@
                     if ($hasParGoto) {
                         print $fd "${prev}Gearef(${arg_context}, TaskManager)->taskList = ${arg_context}->taskList;\n";
                         print $fd "${prev}Gearef(${arg_context}, TaskManager)->next1 = C_$next;\n";
-                        print $fd ${prev},generateMeta(${arg_context}, "C_$next");
+                        print $fd ${prev},$generateMeta->($currentCodeGearName, ${arg_context}, "C_$next");
                     } else {
-                        print $fd "${prev}goto meta(${arg_context}, $next);\n";
+                        print $fd ${prev},$generateMeta->($currentCodeGearName, ${arg_context}, $next);
                     }
                     next;
                 }
@@ -1022,7 +1022,7 @@
                     print $fd $_;
                     next;
                 } else {
-                    print $fd "${prev}goto meta(${arg_context}, C_$next);\n";
+                    print $fd ${prev},$generateMeta->($currentCodeGearName, ${arg_context}, "C_$next");
                     next;
                 }
             } elsif(/^.*(struct|union)?\s([\w<>]+)\*\s(\w+)\s?[=;]/) { # TODO: FIX!! # see also comment local val collent
@@ -1336,17 +1336,20 @@
 #my $goto_meta = "${prev}goto meta(${context_name}, $next->$method);\n";
 
 sub generateMeta {
-  my ($context, $next) = @_;
+  my ($currentCodeGear, $context, $next) = @_;
   return "goto meta($context, $next);\n";
 }
 
-sub findMetaPM {
-  my ($filename) = @_;
+sub findAndLoadMetaPM {
+  my $filename = shift;
   my $project_dir_name = dirname $filename;
   my $metapm = "$FindBin::Bin/$project_dir_name/meta.pm";
   unless (-f $metapm) {
-    #print "[info] not found $metapm\n";
-    return;
+    #default case
+    return sub {
+      my (undef, $context, $next) = @_;
+      return "goto meta($context, $next);\n";
+    };
   }
 
   load $metapm;