Mercurial > hg > Members > tobaru > CbC_xv6
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 $_; }