comparison 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
comparison
equal deleted inserted replaced
51:fadfd62d6b14 52:214d21c891c7
66 # 66 #
67 # goto nodeStack->push((union Data*)node, stackTest3); 67 # goto nodeStack->push((union Data*)node, stackTest3);
68 # 68 #
69 # generated meta level code 69 # generated meta level code
70 # 70 #
71 # Gearef(context, Stack)->stack = (union Data*)nodeStack; 71 # Gearef(cbc_context, Stack)->stack = (union Data*)nodeStack;
72 # Gearef(context, Stack)->data = (union Data*)node; 72 # Gearef(cbc_context, Stack)->data = (union Data*)node;
73 # Gearef(context, Stack)->next = C_stackTest3; 73 # Gearef(cbc_context, Stack)->next = C_stackTest3;
74 # goto meta(context, nodeStack->push); 74 # goto meta(cbc_context, nodeStack->push);
75 75
76 sub getDataGear { 76 sub getDataGear {
77 my ($filename) = @_; 77 my ($filename) = @_;
78 my ($codeGearName, $name, $inTypedef); 78 my ($codeGearName, $name, $inTypedef);
79 open my $fd,"<",$filename or die("can't open $filename $!"); 79 open my $fd,"<",$filename or die("can't open $filename $!");
220 } 220 }
221 } 221 }
222 222
223 sub generateStub { 223 sub generateStub {
224 my($fd,$prevCodeGearName,$dataGearName) = @_; 224 my($fd,$prevCodeGearName,$dataGearName) = @_;
225 print $fd "__code ", $prevCodeGearName ,"_stub(struct Context* context) {\n"; 225 print $fd "__code ", $prevCodeGearName ,"_stub(struct Context* cbc_context) {\n";
226 print $fd $dataGearName; 226 print $fd $dataGearName;
227 print $fd "\n} \n\n"; 227 print $fd "\n} \n\n";
228 return 1; 228 return 1;
229 } 229 }
230 230
237 } 237 }
238 push @{$dataGearVar{$codeGearName}}, $varname1; 238 push @{$dataGearVar{$codeGearName}}, $varname1;
239 push @{$dataGearVarType{$codeGearName}}, $typeName; 239 push @{$dataGearVarType{$codeGearName}}, $typeName;
240 if ($typeName eq $implementation) { 240 if ($typeName eq $implementation) {
241 # get implementation 241 # get implementation
242 $dataGearName{$codeGearName} .= "\t$typeName* $varName = ($typeName*)GearImpl(context, $interface, $varName);\n"; 242 $dataGearName{$codeGearName} .= "\t$typeName* $varName = ($typeName*)GearImpl(cbc_context, $interface, $varName);\n";
243 } else { 243 } else {
244 # interface var 244 # interface var
245 for my $ivar (keys %{$var{$interface}}) { 245 for my $ivar (keys %{$var{$interface}}) {
246 # input data gear field 246 # input data gear field
247 if ($varName eq $ivar) { 247 if ($varName eq $ivar) {
248 if ($typeName eq $var{$interface}->{$ivar}) { 248 if ($typeName eq $var{$interface}->{$ivar}) {
249 if ($output) { 249 if ($output) {
250 $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef(context, $interface)->$varName;\n"; 250 $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef(cbc_context, $interface)->$varName;\n";
251 $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n"; 251 $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n";
252 return 1; 252 return 1;
253 } 253 }
254 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(context, $interface)->$varName;\n"; 254 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(cbc_context, $interface)->$varName;\n";
255 return 1; 255 return 1;
256 } 256 }
257 } 257 }
258 } 258 }
259 259
260 # interface continuation 260 # interface continuation
261 for my $cName (keys %{$code{$interface}}) { 261 for my $cName (keys %{$code{$interface}}) {
262 if ($varName eq $cName) { 262 if ($varName eq $cName) {
263 # continuation field 263 # continuation field
264 $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef(context, $interface)->$varName;\n"; 264 $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef(cbc_context, $interface)->$varName;\n";
265 return 1; 265 return 1;
266 } 266 }
267 } 267 }
268 268
269 # par goto var 269 # par goto var
271 # input data gear field 271 # input data gear field
272 if ($varName eq $var) { 272 if ($varName eq $var) {
273 my ($type, $count) = split(/\s/, $codeGear{$codeGearName}->{"var"}->{$var}); 273 my ($type, $count) = split(/\s/, $codeGear{$codeGearName}->{"var"}->{$var});
274 if ($typeName eq $type) { 274 if ($typeName eq $type) {
275 if ($output) { 275 if ($output) {
276 $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = ($typeName $ptrType*)&context->data[context->odg + $count];\n"; 276 $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = ($typeName $ptrType*)&cbc_context->data[cbc_context->odg + $count];\n";
277 $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n"; 277 $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n";
278 return 1; 278 return 1;
279 } 279 }
280 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = &context->data[context->idg + $count]->$typeName;\n"; 280 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = &cbc_context->data[cbc_context->idg + $count]->$typeName;\n";
281 return 1; 281 return 1;
282 } 282 }
283 } 283 }
284 } 284 }
285 285
286 # par goto continuation 286 # par goto continuation
287 for my $cName (keys %{$codeGear{$codeGearName}->{"code"}}) { 287 for my $cName (keys %{$codeGear{$codeGearName}->{"code"}}) {
288 if ($varName eq $cName) { 288 if ($varName eq $cName) {
289 # continuation field 289 # continuation field
290 $dataGearName{$codeGearName} .= "\tenum Code $varName = context->next;\n"; 290 $dataGearName{$codeGearName} .= "\tenum Code $varName = cbc_context->next;\n";
291 return 1; 291 return 1;
292 } 292 }
293 } 293 }
294 294
295 # par goto continuation 295 # par goto continuation
296 # global or local variable case 296 # global or local variable case
297 if ($typeName eq "Code") { 297 if ($typeName eq "Code") {
298 $dataGearName{$codeGearName} .= "\tenum $typeName$ptrType $varName = Gearef(context, $interface)->$varName;\n"; 298 $dataGearName{$codeGearName} .= "\tenum $typeName$ptrType $varName = Gearef(cbc_context, $interface)->$varName;\n";
299 return 1; 299 return 1;
300 } 300 }
301 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(context, $typeName);\n"; 301 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(cbc_context, $typeName);\n";
302 return 1; 302 return 1;
303 } 303 }
304 } 304 }
305 305
306 sub generateDataGear { 306 sub generateDataGear {
330 my $prevCodeGearName; 330 my $prevCodeGearName;
331 my $inTypedef = 0; 331 my $inTypedef = 0;
332 my $inStub = 0; 332 my $inStub = 0;
333 my $hasParGoto = 0; 333 my $hasParGoto = 0;
334 my $inMain = 0 ; 334 my $inMain = 0 ;
335 my $inCode = 0 ;
335 my %stub; 336 my %stub;
336 my $codeGearName; 337 my $codeGearName;
337 my %localVarType; 338 my %localVarType;
339 my %localCode;
338 340
339 while (<$in>) { 341 while (<$in>) {
340 if (! $inTypedef && ! $inStub && ! $inMain) { 342 if (! $inTypedef && ! $inStub && ! $inMain) {
341 if (/^typedef struct (\w+) \{/) { 343 if (/^typedef struct (\w+) \{/) {
342 $inTypedef = 1; 344 $inTypedef = 1;
344 $inMain = 1; 346 $inMain = 1;
345 } elsif(/^#interface "(.*)"/) { 347 } elsif(/^#interface "(.*)"/) {
346 my $interfaceHeader = $1; 348 my $interfaceHeader = $1;
347 # #interface not write 349 # #interface not write
348 next unless ($interfaceHeader =~ /context.h/); 350 next unless ($interfaceHeader =~ /context.h/);
351 } elsif (/^\s\s*_\_code (\w+)\((.*)\)(.*)/) {
352 $localCode{$1} = 1;
353 } elsif (/^\s\s*_\_code *\(\s*\*\s*(\w+)\)\((.*)\)(.*)/) {
354 $localCode{$1} = 1;
349 } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) { 355 } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) {
356 $inCode = 1;
357 %localCode = {};
350 %localVarType = {}; 358 %localVarType = {};
351 $codeGearName = $1; 359 $codeGearName = $1;
352 my $args = $2; 360 my $args = $2;
353 my $tail = $3; 361 my $tail = $3;
354 if ($codeGearName =~ /_stub$/) { 362 if ($codeGearName =~ /_stub$/) {
374 # __code next(...) ---> enum Code next 382 # __code next(...) ---> enum Code next
375 $prevCodeGearName = $codeGearName; 383 $prevCodeGearName = $codeGearName;
376 $dataGearVar{$codeGearName} = []; 384 $dataGearVar{$codeGearName} = [];
377 $outputVar{$codeGearName} = ""; 385 $outputVar{$codeGearName} = "";
378 $outputArgs{$codeGearName} = {}; 386 $outputArgs{$codeGearName} = {};
379 my $newArgs = "struct Context *context,"; 387 my $newArgs = "struct Context *cbc_context,";
380 if ($args=~/^struct Context\s*\*\s*context/) { 388 if ($args=~/^struct Context\s*\*\s*cbc_context/) {
381 $newArgs = ""; 389 $newArgs = "";
382 } 390 }
383 if (!$args){ 391 if (!$args){
384 $newArgs = "struct Context *context"; 392 $newArgs = "struct Context *cbc_context";
385 } 393 }
386 while($args) { 394 while($args) {
387 if ($args =~ s/(^\s*,\s*)//) { 395 if ($args =~ s/(^\s*,\s*)//) {
388 $newArgs .= $1; 396 $newArgs .= $1;
389 } 397 }
425 $newArgs .= $args; 433 $newArgs .= $args;
426 last; 434 last;
427 } 435 }
428 } 436 }
429 # generate goto statement from stub to the CodeGear in the buffer 437 # generate goto statement from stub to the CodeGear in the buffer
430 $dataGearName{$codeGearName} .= "\tgoto $codeGearName(context"; 438 $dataGearName{$codeGearName} .= "\tgoto $codeGearName(cbc_context";
431 for my $arg ( @{$dataGearVar{$codeGearName}}) { 439 for my $arg ( @{$dataGearVar{$codeGearName}}) {
432 $dataGearName{$codeGearName} .= ", $arg"; 440 $dataGearName{$codeGearName} .= ", $arg";
433 } 441 }
434 $dataGearName{$codeGearName} .= ");"; 442 $dataGearName{$codeGearName} .= ");";
435 # generate CodeGear header with new arguments 443 # generate CodeGear header with new arguments
437 if ($outputVar{$codeGearName} ne "") { 445 if ($outputVar{$codeGearName} ne "") {
438 # output data var can be use before write 446 # output data var can be use before write
439 # it should be initialze by gearef 447 # it should be initialze by gearef
440 print $fd $outputVar{$codeGearName}; 448 print $fd $outputVar{$codeGearName};
441 } 449 }
450 next;
451 } elsif (! $inCode) {
452 print $fd $_;
442 next; 453 next;
443 } elsif (/^(.*)goto (\w+)\-\>(\w+)\((.*)\);/) { 454 } elsif (/^(.*)goto (\w+)\-\>(\w+)\((.*)\);/) {
444 # handling goto statement 455 # handling goto statement
445 # convert it to the meta call form with two arugments, that is context and enum Code 456 # convert it to the meta call form with two arugments, that is context and enum Code
446 my $prev = $1; 457 my $prev = $1;
447 my $next = $2; 458 my $next = $2;
448 my $method = $3; 459 my $method = $3;
449 my $tmpArgs = $4; 460 my $tmpArgs = $4;
450 $tmpArgs =~ s/\(.*\)/\(\)/; 461 $tmpArgs =~ s/\(.*\)/\(\)/;
451 my @args = split(/,/,$tmpArgs); 462 my @args = split(/,/,$tmpArgs);
463 if (! defined $dataGearVarType{$codeGearName}) {
464 print $fd $_ ;
465 next ;
466 }
452 my @types = @{$dataGearVarType{$codeGearName}}; 467 my @types = @{$dataGearVarType{$codeGearName}};
453 my $ntype; 468 my $ntype;
454 my $ftype; 469 my $ftype;
455 for my $v (@{$dataGearVar{$codeGearName}}) { 470 for my $v (@{$dataGearVar{$codeGearName}}) {
456 my $t = shift @types; 471 my $t = shift @types;
461 } 476 }
462 if (!defined $ntype) { 477 if (!defined $ntype) {
463 $ntype = $localVarType{$next}; 478 $ntype = $localVarType{$next};
464 $ftype = lcfirst($ntype); 479 $ftype = lcfirst($ntype);
465 } 480 }
466 print $fd "\tGearef(context, $ntype)->$ftype = (union Data*) $next;\n"; 481 print $fd "\tGearef(cbc_context, $ntype)->$ftype = (union Data*) $next;\n";
467 # Put interface argument 482 # Put interface argument
468 my $prot = $code{$ntype}->{$method}; 483 my $prot = $code{$ntype}->{$method};
469 my $i = 1; 484 my $i = 1;
470 for my $arg (@args) { 485 for my $arg (@args) {
471 my $pType; 486 my $pType;
476 $pType = $1; 491 $pType = $1;
477 $pName = $2; 492 $pName = $2;
478 $arg =~ s/^(\s)*(\w+)/$2/; 493 $arg =~ s/^(\s)*(\w+)/$2/;
479 if ($pType =~ s/\_\_code$//) { 494 if ($pType =~ s/\_\_code$//) {
480 if ($arg =~ /(\w+)\(.*\)/) { 495 if ($arg =~ /(\w+)\(.*\)/) {
481 print $fd "\tGearef(context, $ntype)->$pName = $1;\n"; 496 print $fd "\tGearef(cbc_context, $ntype)->$pName = $1;\n";
482 } else { 497 } else {
483 print $fd "\tGearef(context, $ntype)->$pName = C_$arg;\n"; 498 print $fd "\tGearef(cbc_context, $ntype)->$pName = C_$arg;\n";
484 } 499 }
485 } elsif ($pType =~ /Data\**$/){ 500 } elsif ($pType =~ /Data\**$/){
486 print $fd "\tGearef(context, $ntype)->$pName = (union $pType) $arg;\n"; 501 print $fd "\tGearef(cbc_context, $ntype)->$pName = (union $pType) $arg;\n";
487 } else { 502 } else {
488 print $fd "\tGearef(context, $ntype)->$pName = $arg;\n"; 503 print $fd "\tGearef(cbc_context, $ntype)->$pName = $arg;\n";
489 } 504 }
490 $i++; 505 $i++;
491 } 506 }
492 print $fd "${prev}context->before = C_$codeGearName;\n"; 507 # print $fd "${prev}cbc_context->before = C_$codeGearName;\n";
493 print $fd "${prev}goto meta(context, $next->$method);\n"; 508 print $fd "${prev}goto meta(cbc_context, $next->$method);\n";
494 next; 509 next;
495 } elsif(/^(.*)par goto (\w+)\((.*)\);/) { 510 } elsif(/^(.*)par goto (\w+)\((.*)\);/) {
496 # handling par goto statement 511 # handling par goto statement
497 # convert it to the parallel 512 # convert it to the parallel
498 my $prev = $1; 513 my $prev = $1;
513 if (! $hasParGoto) { 528 if (! $hasParGoto) {
514 $hasParGoto = 1; 529 $hasParGoto = 1;
515 print $fd "${prev}struct Element* element;\n"; 530 print $fd "${prev}struct Element* element;\n";
516 } 531 }
517 my $initTask = << "EOFEOF"; 532 my $initTask = << "EOFEOF";
518 ${prev}context->task = NEW(struct Context); 533 ${prev}cbc_context->task = NEW(struct Context);
519 ${prev}initContext(context->task); 534 ${prev}initContext(cbc_context->task);
520 ${prev}context->task->next = C_$codeGearName; 535 ${prev}cbc_context->task->next = C_$codeGearName;
521 ${prev}context->task->idgCount = $inputCount; 536 ${prev}cbc_context->task->idgCount = $inputCount;
522 ${prev}context->task->idg = context->task->dataNum; 537 ${prev}cbc_context->task->idg = cbc_context->task->dataNum;
523 ${prev}context->task->maxIdg = context->task->idg + $inputCount; 538 ${prev}cbc_context->task->maxIdg = cbc_context->task->idg + $inputCount;
524 ${prev}context->task->odg = context->task->maxIdg; 539 ${prev}cbc_context->task->odg = cbc_context->task->maxIdg;
525 ${prev}context->task->maxOdg = context->task->odg + $outputCount; 540 ${prev}cbc_context->task->maxOdg = cbc_context->task->odg + $outputCount;
526 EOFEOF 541 EOFEOF
527 print $fd $initTask; 542 print $fd $initTask;
528 if (@iterateCounts) { 543 if (@iterateCounts) {
529 print $fd "${prev}context->task->iterate = 0;\n"; 544 print $fd "${prev}cbc_context->task->iterate = 0;\n";
530 my $len = @iterateCounts; 545 my $len = @iterateCounts;
531 if ($len == 1) { 546 if ($len == 1) {
532 print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], 1, 1);\n"; 547 print $fd "${prev}cbc_context->task->iterator = createMultiDimIterator(cbc_context, $iterateCounts[0], 1, 1);\n";
533 } elsif ($len == 2) { 548 } elsif ($len == 2) {
534 print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], $iterateCounts[1], 1);\n"; 549 print $fd "${prev}cbc_context->task->iterator = createMultiDimIterator(cbc_context, $iterateCounts[0], $iterateCounts[1], 1);\n";
535 } elsif ($len == 3) { 550 } elsif ($len == 3) {
536 print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], $iterateCounts[1], $iterateCounts[2]);\n"; 551 print $fd "${prev}cbc_context->task->iterator = createMultiDimIterator(cbc_context, $iterateCounts[0], $iterateCounts[1], $iterateCounts[2]);\n";
537 } 552 }
538 } 553 }
539 for my $dataGear (@dataGears) { 554 for my $dataGear (@dataGears) {
540 print $fd "${prev}GET_META($dataGear)->wait = createSynchronizedQueue(context);\n"; 555 print $fd "${prev}GET_META($dataGear)->wait = createSynchronizedQueue(cbc_context);\n";
541 } 556 }
542 for my $i (0..$inputCount-1) { 557 for my $i (0..$inputCount-1) {
543 print $fd "${prev}context->task->data[context->task->idg+$i] = (union Data*)@dataGears[$i];\n"; 558 print $fd "${prev}cbc_context->task->data[cbc_context->task->idg+$i] = (union Data*)@dataGears[$i];\n";
544 } 559 }
545 for my $i (0..$outputCount-1) { 560 for my $i (0..$outputCount-1) {
546 print $fd "${prev}context->task->data[context->task->odg+$i] = (union Data*)@dataGears[$inputCount+$i];\n"; 561 print $fd "${prev}cbc_context->task->data[cbc_context->task->odg+$i] = (union Data*)@dataGears[$inputCount+$i];\n";
547 } 562 }
548 my $putTask = << "EOFEOF"; 563 my $putTask = << "EOFEOF";
549 ${prev}element = &ALLOCATE(context, Element)->Element; 564 ${prev}element = &ALLOCATE(cbc_context, Element)->Element;
550 ${prev}element->data = (union Data*)context->task; 565 ${prev}element->data = (union Data*)cbc_context->task;
551 ${prev}element->next = context->taskList; 566 ${prev}element->next = cbc_context->taskList;
552 ${prev}context->taskList = element; 567 ${prev}cbc_context->taskList = element;
553 EOFEOF 568 EOFEOF
554 print $fd $putTask; 569 print $fd $putTask;
555 next; 570 next;
556 } elsif (/^(.*)goto (\w+)\((.*)\);/) { 571 } elsif (/^(.*)goto (\w+)\((.*)\);/) {
557 # handling goto statement 572 # handling goto statement
558 # convert it to the meta call form with two arugments, that is context and enum Code 573 # convert it to the meta call form with two arugments, that is context and enum Code
559 my $prev = $1; 574 my $prev = $1;
560 my $next = $2; 575 my $next = $2;
561 my @args = split(/,/, $3); 576 my @args = split(/,/, $3);
562 my $v = 0; 577 my $v = 0;
578 if (defined $localCode{$next}) {
579 print $fd $_; next;
580 }
563 for my $n ( @{$dataGearVar{$codeGearName}} ) { 581 for my $n ( @{$dataGearVar{$codeGearName}} ) {
564 # continuation arguments 582 # continuation arguments
565 $v = 1 if ( $n eq $next); 583 $v = 1 if ( $n eq $next);
566 } 584 }
567 if ($v || defined $code{$interface}->{$next}) { 585 if ($v || defined $code{$interface}->{$next}) {
570 for my $arg ( @{$outputArgs{$codeGearName}->{$next}} ) { 588 for my $arg ( @{$outputArgs{$codeGearName}->{$next}} ) {
571 my $v = shift(@args); 589 my $v = shift(@args);
572 print $fd "\t*O_$arg = $v;\n"; 590 print $fd "\t*O_$arg = $v;\n";
573 } 591 }
574 if ($hasParGoto) { 592 if ($hasParGoto) {
575 print $fd "${prev}Gearef(context, TaskManager)->taskList = context->taskList;\n"; 593 print $fd "${prev}Gearef(cbc_context, TaskManager)->taskList = cbc_context->taskList;\n";
576 print $fd "${prev}Gearef(context, TaskManager)->next1 = C_$next;\n"; 594 print $fd "${prev}Gearef(cbc_context, TaskManager)->next1 = C_$next;\n";
577 print $fd "${prev}goto meta(context, C_$next);\n"; 595 print $fd "${prev}goto meta(cbc_context, C_$next);\n";
578 } else { 596 } else {
579 print $fd "${prev}context->before = C_$codeGearName;\n"; 597 # print $fd "${prev}cbc_context->before = C_$codeGearName;\n";
580 print $fd "${prev}goto meta(context, $next);\n"; 598 print $fd "${prev}goto meta(cbc_context, $next);\n";
581 } 599 }
582 next; 600 next;
583 } 601 }
584 if ($hasParGoto) { 602 if ($hasParGoto) {
585 print $fd "${prev}Gearef(context, TaskManager)->taskList = context->taskList;\n"; 603 print $fd "${prev}Gearef(cbc_context, TaskManager)->taskList = cbc_context->taskList;\n";
586 print $fd "${prev}Gearef(context, TaskManager)->next1 = C_$next;\n"; 604 print $fd "${prev}Gearef(cbc_context, TaskManager)->next1 = C_$next;\n";
587 print $fd "${prev}goto parGotoMeta(context, C_$next);\n"; 605 print $fd "${prev}goto parGotoMeta(cbc_context, C_$next);\n";
588 next; 606 next;
589 } elsif ($next eq "meta") { 607 } elsif ($next eq "meta") {
590 print $fd $_; 608 print $fd $_;
591 next; 609 next;
592 } else { 610 } else {
593 print $fd "${prev}context->before = C_$codeGearName;\n"; 611 # print $fd "${prev}cbc_context->before = C_$codeGearName;\n";
594 print $fd "${prev}goto meta(context, C_$next);\n"; 612 print $fd "${prev}goto meta(cbc_context, C_$next);\n";
595 next; 613 next;
596 } 614 }
597 } elsif(/^.*(struct|union)?\s(\w+)\*\s(\w+)\s?[=;]/) { 615 } elsif(/^.*(struct|union)?\s(\w+)\*\s(\w+)\s?[=;]/) {
598 my $type = $2; 616 my $type = $2;
599 my $varName = $3; 617 my $varName = $3;
600 $localVarType{$varName} = $type; 618 $localVarType{$varName} = $type;
601 s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g; # replacing new 619 s/new\s+(\w+)\(\)/\&ALLOCATE(cbc_context, \1)->\1/g; # replacing new
602 } elsif(/^}/) { 620 } elsif(/^}/) {
603 $hasParGoto = 0; 621 $hasParGoto = 0;
604 } else { 622 } else {
605 s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g; # replacing new 623 s/new\s+(\w+)\(\)/\&ALLOCATE(cbc_context, \1)->\1/g; # replacing new
606 } 624 }
607 # gather type name and type 625 # gather type name and type
608 } elsif ($inMain) { 626 } elsif ($inMain) {
609 if (/^(.*)goto start_code\(main_context\);/) { 627 if (/^(.*)goto start_code\(main_context\);/) {
610 print $fd $_; 628 print $fd $_;
612 } elsif (/^(.*)goto (\w+)\((.*)\);/) { 630 } elsif (/^(.*)goto (\w+)\((.*)\);/) {
613 my $prev = $1; 631 my $prev = $1;
614 my $next = $2; 632 my $next = $2;
615 print $fd "${prev}struct Context* main_context = NEW(struct Context);\n"; 633 print $fd "${prev}struct Context* main_context = NEW(struct Context);\n";
616 print $fd "${prev}initContext(main_context);\n"; 634 print $fd "${prev}initContext(main_context);\n";
617 print $fd "${prev}main_context->next = C_$next;\n"; 635 print $fd "${prev}main_cbc_context->next = C_$next;\n";
618 print $fd "${prev}goto start_code(main_context);\n"; 636 print $fd "${prev}goto start_code(main_context);\n";
619 next; 637 next;
620 } 638 }
621 } 639 }
622 if (/^}/) { 640 if (/^}/) {
623 $inStub = 0; 641 $inStub = 0;
624 $inTypedef = 0; 642 $inTypedef = 0;
625 $inMain = 0; 643 $inMain = 0;
644 $inCode = 0;
626 } 645 }
627 print $fd $_; 646 print $fd $_;
628 } 647 }
629 if (defined $prevCodeGearName) { 648 if (defined $prevCodeGearName) {
630 if (!defined $stub{$prevCodeGearName."_stub"}) { 649 if (!defined $stub{$prevCodeGearName."_stub"}) {