diff src/gearsTools/generate_stub.pl @ 52:214d21c891c7

rename to cbc __ncode is not handled as interfaces
author kono
date Mon, 03 Jun 2019 18:12:44 +0900
parents 9647d79fe97e
children d419660ad71d
line wrap: on
line diff
--- a/src/gearsTools/generate_stub.pl	Tue May 28 22:27:01 2019 +0900
+++ b/src/gearsTools/generate_stub.pl	Mon Jun 03 18:12:44 2019 +0900
@@ -68,10 +68,10 @@
 #
 # generated meta level code
 #
-# Gearef(context, Stack)->stack = (union Data*)nodeStack;
-# Gearef(context, Stack)->data = (union Data*)node;
-# Gearef(context, Stack)->next = C_stackTest3;
-# goto meta(context, nodeStack->push);
+# Gearef(cbc_context, Stack)->stack = (union Data*)nodeStack;
+# Gearef(cbc_context, Stack)->data = (union Data*)node;
+# Gearef(cbc_context, Stack)->next = C_stackTest3;
+# goto meta(cbc_context, nodeStack->push);
 
 sub getDataGear {
     my ($filename) = @_;
@@ -222,7 +222,7 @@
 
 sub generateStub {
     my($fd,$prevCodeGearName,$dataGearName) = @_;
-    print $fd "__code ", $prevCodeGearName ,"_stub(struct Context* context) {\n";
+    print $fd "__code ", $prevCodeGearName ,"_stub(struct Context* cbc_context) {\n";
     print $fd $dataGearName;
     print $fd "\n} \n\n";
     return 1;
@@ -239,7 +239,7 @@
     push @{$dataGearVarType{$codeGearName}}, $typeName;
     if ($typeName eq $implementation) {
         # get implementation
-        $dataGearName{$codeGearName} .= "\t$typeName* $varName = ($typeName*)GearImpl(context, $interface, $varName);\n";
+        $dataGearName{$codeGearName} .= "\t$typeName* $varName = ($typeName*)GearImpl(cbc_context, $interface, $varName);\n";
     } else {
         # interface var
         for my $ivar (keys %{$var{$interface}}) {
@@ -247,11 +247,11 @@
             if ($varName eq $ivar) {
                 if ($typeName eq $var{$interface}->{$ivar}) {
                     if ($output) {
-                        $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef(context, $interface)->$varName;\n";
+                        $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef(cbc_context, $interface)->$varName;\n";
                         $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n";
                         return 1;
                     }
-                    $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(context, $interface)->$varName;\n";
+                    $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(cbc_context, $interface)->$varName;\n";
                     return 1;
                 }
             }
@@ -261,7 +261,7 @@
         for my $cName (keys %{$code{$interface}}) {
             if ($varName eq $cName) {
                 # continuation field
-                $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef(context, $interface)->$varName;\n";
+                $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef(cbc_context, $interface)->$varName;\n";
                 return 1;
             }
         }
@@ -273,11 +273,11 @@
                 my ($type, $count) = split(/\s/, $codeGear{$codeGearName}->{"var"}->{$var});
                 if ($typeName eq $type) {
                     if ($output) {
-                        $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = ($typeName $ptrType*)&context->data[context->odg + $count];\n";
+                        $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = ($typeName $ptrType*)&cbc_context->data[cbc_context->odg + $count];\n";
                         $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n";
                         return 1;
                     }
-                    $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = &context->data[context->idg + $count]->$typeName;\n";
+                    $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = &cbc_context->data[cbc_context->idg + $count]->$typeName;\n";
                     return 1;
                 }
             }
@@ -287,7 +287,7 @@
         for my $cName (keys %{$codeGear{$codeGearName}->{"code"}}) {
             if ($varName eq $cName) {
                 # continuation field
-                $dataGearName{$codeGearName} .= "\tenum Code $varName = context->next;\n";
+                $dataGearName{$codeGearName} .= "\tenum Code $varName = cbc_context->next;\n";
                 return 1;
             }
         }
@@ -295,10 +295,10 @@
         # par goto continuation
         # global or local variable case
         if ($typeName eq "Code") {
-            $dataGearName{$codeGearName} .= "\tenum $typeName$ptrType $varName = Gearef(context, $interface)->$varName;\n";
+            $dataGearName{$codeGearName} .= "\tenum $typeName$ptrType $varName = Gearef(cbc_context, $interface)->$varName;\n";
             return 1;
         }
-        $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(context, $typeName);\n";
+        $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(cbc_context, $typeName);\n";
         return 1;
     }
 }
@@ -332,9 +332,11 @@
     my $inStub = 0;
     my $hasParGoto = 0;
     my $inMain = 0 ;
+    my $inCode = 0 ;
     my %stub;
     my $codeGearName;
     my %localVarType;
+    my %localCode;
 
     while (<$in>) {
         if (! $inTypedef && ! $inStub && ! $inMain) {
@@ -346,7 +348,13 @@
                 my $interfaceHeader = $1;
                 # #interface not write
                 next unless ($interfaceHeader =~ /context.h/);
+            } elsif (/^\s\s*_\_code (\w+)\((.*)\)(.*)/) {
+               $localCode{$1} = 1;
+            } elsif (/^\s\s*_\_code  *\(\s*\*\s*(\w+)\)\((.*)\)(.*)/) {
+               $localCode{$1} = 1;
             } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) {
+                $inCode = 1;
+                %localCode = {};
                 %localVarType = {};
                 $codeGearName = $1;
                 my $args = $2;
@@ -376,12 +384,12 @@
                 $dataGearVar{$codeGearName} = [];
                 $outputVar{$codeGearName} = "";
                 $outputArgs{$codeGearName} = {};
-                my $newArgs = "struct Context *context,";
-                if ($args=~/^struct Context\s*\*\s*context/) {
+                my $newArgs = "struct Context *cbc_context,";
+                if ($args=~/^struct Context\s*\*\s*cbc_context/) {
                     $newArgs = "";
                 }
                 if (!$args){
-                    $newArgs = "struct Context *context";
+                    $newArgs = "struct Context *cbc_context";
                 }
                 while($args) {
                     if ($args =~ s/(^\s*,\s*)//) {
@@ -427,7 +435,7 @@
                     }
                 }
                 # generate goto statement from stub to the CodeGear in the buffer
-                $dataGearName{$codeGearName} .= "\tgoto $codeGearName(context";
+                $dataGearName{$codeGearName} .= "\tgoto $codeGearName(cbc_context";
                 for my $arg ( @{$dataGearVar{$codeGearName}}) {
                     $dataGearName{$codeGearName} .= ", $arg";
                 }
@@ -440,6 +448,9 @@
                     print $fd $outputVar{$codeGearName};
                 }
                 next;
+            } elsif (! $inCode) {
+                print $fd $_;
+                next;
             } elsif (/^(.*)goto (\w+)\-\>(\w+)\((.*)\);/) {
                 # handling goto statement
                 # convert it to the meta call form with two arugments, that is context and enum Code
@@ -449,6 +460,10 @@
                 my $tmpArgs = $4;
                 $tmpArgs =~ s/\(.*\)/\(\)/;
                 my @args = split(/,/,$tmpArgs);
+                if (! defined $dataGearVarType{$codeGearName}) {
+                   print $fd $_ ;
+                   next ;
+                }
                 my @types = @{$dataGearVarType{$codeGearName}};
                 my $ntype;
                 my $ftype;
@@ -463,7 +478,7 @@
                     $ntype = $localVarType{$next};
                     $ftype = lcfirst($ntype);
                 }
-                print $fd "\tGearef(context, $ntype)->$ftype = (union Data*) $next;\n";
+                print $fd "\tGearef(cbc_context, $ntype)->$ftype = (union Data*) $next;\n";
                 # Put interface argument
                 my $prot = $code{$ntype}->{$method};
                 my $i = 1;
@@ -478,19 +493,19 @@
                     $arg =~ s/^(\s)*(\w+)/$2/;
                     if ($pType =~ s/\_\_code$//) {
                         if ($arg =~ /(\w+)\(.*\)/) {
-                            print $fd "\tGearef(context, $ntype)->$pName = $1;\n";
+                            print $fd "\tGearef(cbc_context, $ntype)->$pName = $1;\n";
                         } else {
-                            print $fd "\tGearef(context, $ntype)->$pName = C_$arg;\n";
+                            print $fd "\tGearef(cbc_context, $ntype)->$pName = C_$arg;\n";
                         }
                     } elsif ($pType =~ /Data\**$/){
-                        print $fd "\tGearef(context, $ntype)->$pName = (union $pType) $arg;\n";
+                        print $fd "\tGearef(cbc_context, $ntype)->$pName = (union $pType) $arg;\n";
                     } else {
-                        print $fd "\tGearef(context, $ntype)->$pName = $arg;\n";
+                        print $fd "\tGearef(cbc_context, $ntype)->$pName = $arg;\n";
                     }
                     $i++;
                 }
-                print $fd "${prev}context->before = C_$codeGearName;\n";
-                print $fd "${prev}goto meta(context, $next->$method);\n";
+                # print $fd "${prev}cbc_context->before = C_$codeGearName;\n";
+                print $fd "${prev}goto meta(cbc_context, $next->$method);\n";
                 next;
             } elsif(/^(.*)par goto (\w+)\((.*)\);/) {
                 # handling par goto statement
@@ -515,41 +530,41 @@
                     print $fd "${prev}struct Element* element;\n";
                 }
                 my $initTask = << "EOFEOF";
-                ${prev}context->task = NEW(struct Context);
-                ${prev}initContext(context->task);
-                ${prev}context->task->next = C_$codeGearName;
-                ${prev}context->task->idgCount = $inputCount;
-                ${prev}context->task->idg = context->task->dataNum;
-                ${prev}context->task->maxIdg = context->task->idg + $inputCount;
-                ${prev}context->task->odg = context->task->maxIdg;
-                ${prev}context->task->maxOdg = context->task->odg + $outputCount;
+                ${prev}cbc_context->task = NEW(struct Context);
+                ${prev}initContext(cbc_context->task);
+                ${prev}cbc_context->task->next = C_$codeGearName;
+                ${prev}cbc_context->task->idgCount = $inputCount;
+                ${prev}cbc_context->task->idg = cbc_context->task->dataNum;
+                ${prev}cbc_context->task->maxIdg = cbc_context->task->idg + $inputCount;
+                ${prev}cbc_context->task->odg = cbc_context->task->maxIdg;
+                ${prev}cbc_context->task->maxOdg = cbc_context->task->odg + $outputCount;
 EOFEOF
                 print $fd $initTask;
                 if (@iterateCounts) {
-                    print $fd "${prev}context->task->iterate = 0;\n";
+                    print $fd "${prev}cbc_context->task->iterate = 0;\n";
                     my $len = @iterateCounts;
                     if ($len == 1) {
-                        print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], 1, 1);\n";
+                        print $fd "${prev}cbc_context->task->iterator = createMultiDimIterator(cbc_context, $iterateCounts[0], 1, 1);\n";
                     } elsif ($len == 2) {
-                        print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], $iterateCounts[1], 1);\n";
+                        print $fd "${prev}cbc_context->task->iterator = createMultiDimIterator(cbc_context, $iterateCounts[0], $iterateCounts[1], 1);\n";
                     } elsif ($len == 3) {
-                        print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], $iterateCounts[1], $iterateCounts[2]);\n";
+                        print $fd "${prev}cbc_context->task->iterator = createMultiDimIterator(cbc_context, $iterateCounts[0], $iterateCounts[1], $iterateCounts[2]);\n";
                     }
                 }
                 for my $dataGear (@dataGears) {
-                    print $fd "${prev}GET_META($dataGear)->wait = createSynchronizedQueue(context);\n";
+                    print $fd "${prev}GET_META($dataGear)->wait = createSynchronizedQueue(cbc_context);\n";
                 }
                 for my $i (0..$inputCount-1) {
-                    print $fd "${prev}context->task->data[context->task->idg+$i] = (union Data*)@dataGears[$i];\n";
+                    print $fd "${prev}cbc_context->task->data[cbc_context->task->idg+$i] = (union Data*)@dataGears[$i];\n";
                 }
                 for my $i (0..$outputCount-1) {
-                    print $fd "${prev}context->task->data[context->task->odg+$i] = (union Data*)@dataGears[$inputCount+$i];\n";
+                    print $fd "${prev}cbc_context->task->data[cbc_context->task->odg+$i] = (union Data*)@dataGears[$inputCount+$i];\n";
                 }
                 my $putTask = << "EOFEOF";
-                ${prev}element = &ALLOCATE(context, Element)->Element;
-                ${prev}element->data = (union Data*)context->task;
-                ${prev}element->next = context->taskList;
-                ${prev}context->taskList = element;
+                ${prev}element = &ALLOCATE(cbc_context, Element)->Element;
+                ${prev}element->data = (union Data*)cbc_context->task;
+                ${prev}element->next = cbc_context->taskList;
+                ${prev}cbc_context->taskList = element;
 EOFEOF
                 print $fd $putTask;
                 next;
@@ -560,6 +575,9 @@
                 my $next = $2;
                 my @args = split(/,/, $3);
                 my $v = 0;
+                if (defined $localCode{$next}) {
+                    print $fd $_; next;
+                }
                 for my $n ( @{$dataGearVar{$codeGearName}} ) {
                     # continuation arguments
                     $v = 1  if ( $n eq $next);
@@ -572,37 +590,37 @@
                         print $fd "\t*O_$arg = $v;\n";
                     }
                     if ($hasParGoto) {
-                        print $fd "${prev}Gearef(context, TaskManager)->taskList = context->taskList;\n";
-                        print $fd "${prev}Gearef(context, TaskManager)->next1 = C_$next;\n";
-                        print $fd "${prev}goto meta(context, C_$next);\n";
+                        print $fd "${prev}Gearef(cbc_context, TaskManager)->taskList = cbc_context->taskList;\n";
+                        print $fd "${prev}Gearef(cbc_context, TaskManager)->next1 = C_$next;\n";
+                        print $fd "${prev}goto meta(cbc_context, C_$next);\n";
                     } else {
-                        print $fd "${prev}context->before = C_$codeGearName;\n";
-                        print $fd "${prev}goto meta(context, $next);\n";
+                        # print $fd "${prev}cbc_context->before = C_$codeGearName;\n";
+                        print $fd "${prev}goto meta(cbc_context, $next);\n";
                     }
                     next;
                 }
                 if ($hasParGoto) {
-                    print $fd "${prev}Gearef(context, TaskManager)->taskList = context->taskList;\n";
-                    print $fd "${prev}Gearef(context, TaskManager)->next1 = C_$next;\n";
-                    print $fd "${prev}goto parGotoMeta(context, C_$next);\n";
+                    print $fd "${prev}Gearef(cbc_context, TaskManager)->taskList = cbc_context->taskList;\n";
+                    print $fd "${prev}Gearef(cbc_context, TaskManager)->next1 = C_$next;\n";
+                    print $fd "${prev}goto parGotoMeta(cbc_context, C_$next);\n";
                     next;
                 } elsif ($next eq "meta") {
                     print $fd $_;
                     next;
                 } else {
-                    print $fd "${prev}context->before = C_$codeGearName;\n";
-                    print $fd "${prev}goto meta(context, C_$next);\n";
+                    # print $fd "${prev}cbc_context->before = C_$codeGearName;\n";
+                    print $fd "${prev}goto meta(cbc_context, C_$next);\n";
                     next;
                 }
             } elsif(/^.*(struct|union)?\s(\w+)\*\s(\w+)\s?[=;]/) {
                 my $type    = $2;
                 my $varName = $3;
                 $localVarType{$varName} = $type;
-                s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g;   # replacing new
+                s/new\s+(\w+)\(\)/\&ALLOCATE(cbc_context, \1)->\1/g;   # replacing new
             } elsif(/^}/) {
                 $hasParGoto = 0;
             } else {
-                s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g;   # replacing new
+                s/new\s+(\w+)\(\)/\&ALLOCATE(cbc_context, \1)->\1/g;   # replacing new
             }
             # gather type name and type
         } elsif ($inMain) {
@@ -614,7 +632,7 @@
                 my $next = $2;
                 print $fd "${prev}struct Context* main_context = NEW(struct Context);\n";
                 print $fd "${prev}initContext(main_context);\n";
-                print $fd "${prev}main_context->next = C_$next;\n";
+                print $fd "${prev}main_cbc_context->next = C_$next;\n";
                 print $fd "${prev}goto start_code(main_context);\n";
                 next;
             }
@@ -623,6 +641,7 @@
             $inStub = 0;
             $inTypedef = 0;
             $inMain = 0;
+            $inCode = 0;
         }
         print $fd $_;
     }