changeset 671:dbefe3a266ec

use warnings at generate_context.pl
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 19 Aug 2020 09:20:43 +0900
parents f8b98e469256
children ea992fc94130
files src/parallel_execution/generate_context.pl
diffstat 1 files changed, 65 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/generate_context.pl	Wed Aug 19 08:59:07 2020 +0900
+++ b/src/parallel_execution/generate_context.pl	Wed Aug 19 09:20:43 2020 +0900
@@ -2,26 +2,27 @@
 
 use Getopt::Long;
 use strict;
+use warnings;
 
-# 
+#
 # generrate Gears OS context heaader and initializer from CbC sources
 #
 # CodeGear
-# 
+#
 # get stub information from # *.c
 #     __code taskManager_stub(struct Context* context) {
-# 
+#
 # generate CodeGear indexn in context.h
 #     C_taskManager,
-# 
+#
 # generate CodeGear stub reference in context.h
 #     extern __code taskManager_stub(struct Context*);
-# 
+#
 # generate CodeGear stub reference in $name-context.h for each module
 #     context->code[C_taskManager]   = taskManager_stub;
-# 
+#
 # DataGear
-# 
+#
 # get DataGear information from context.h
 #     struct Worker {
 #         int id;
@@ -32,11 +33,11 @@
 #         enum Code shutdown;
 #         struct Queue* tasks;
 #     } Worker;
-# 
+#
 # generate typedefs and DataGear index in context.h
 #     typedef struct Worker Worker;
 #     D_Worker,
-# 
+#
 # generate DataGear allocator in context.h
 #      ALLOC_DATA(context, Worker);
 #
@@ -168,6 +169,16 @@
     $codeGear{"exit_code"} = "$ddir/$name-context.c";
     $mCodeGear{"start_code"} = "$ddir/$name-context.c";
     $mCodeGear{"exit_code"} = "$ddir/$name-context.c";
+
+    generateExtern();
+    generateEnumCode();
+    generateContextCsource();
+    generateEnumData();
+    generateTypedefData();
+    generateDataGearInit();
+}
+
+sub generateExtern {
     open my $fd,">","$ddir/extern.h" or die("can't open $ddir/extern.h $!");
     for my $code ( sort keys %codeGear ) {
         print $fd "extern __code ${code}_stub(struct Context*);\n";
@@ -177,15 +188,24 @@
         print $fd "extern ${interface}* create${impl}($constructorArgs);\n";
     }
     print $fd "\n";
+    close $fd;
+}
 
+sub generateEnumCode {
     open my $fd,">","$ddir/enumCode.h" or die("can't open $ddir/enumCode.h $!");
     print $fd "enum Code {\n";
     for my $code ( sort keys %codeGear ) {
         print $fd "    C_${code},\n";
     }
     print $fd "};\n";
-   
-    my $code_init = ''; 
+
+    close $fd;
+}
+
+
+sub generateContextCsource {
+    open my $fd,">","$ddir/$name-context.c" or die("can't open $ddir/$name-context.c $!");
+    my $code_init = '';
     for my $code ( sort keys %mCodeGear ) {
         $code_init .=  "    ${context_name}->code[C_${code}]    = ${code}_stub;\n";
     }
@@ -203,7 +223,7 @@
       $context_c .= << "EOFEOF";
 #include <stdlib.h>
 EOFEOF
-}
+    }
 
 $context_c .= << "EOFEOF";
 
@@ -223,11 +243,9 @@
     ${context_name}\->dataNum = $data_num;
 }
 EOFEOF
-
-    open my $fd,">","$ddir/$name-context.c" or die("can't open $ddir/$name-context.c $!");
     print $fd $context_c;
 
-my $meta_call = <<"EOFEOF";
+    my $meta_call = <<"EOFEOF";
 __code meta(struct Context* ${context_name}, enum Code next) {
     // printf("meta %d\\n",next);
     goto (${context_name}\->code[next])(${context_name});
@@ -248,8 +266,8 @@
 }
 EOFEOF
 
-if ($project->{name} eq "gears") {
-    $meta_call .= <<"EOFEOF";
+    if ($project->{name} eq "gears") {
+      $meta_call .= <<"EOFEOF";
 __code exit_code(struct Context* ${context_name}) {
     free(${context_name}->code);
     free(${context_name}->data);
@@ -258,7 +276,7 @@
 }
 EOFEOF
 
-} else {
+    } else {
 
 $meta_call .= <<"EOFEOF";
 __code exit_code(struct Context* ${context_name}) {
@@ -268,37 +286,48 @@
     goto exit_code(cbc_context);
 }
 EOFEOF
-}
+    }
 
 $meta_call .= <<"EOFEOF";
 __code exit_code_stub(struct Context* ${context_name}) {
     goto exit_code(${context_name});
-}    
+}
 
 // end context_c
 EOFEOF
 
-print $fd $meta_call;
-
-open my $fd,">","$ddir/enumData.h" or die("can't open $ddir/enumData.h $!");
-print $fd "enum DataType {\n";
-print $fd "    D_Code,\n";
-for my $data ( sort keys %dataGear ) {
-    print $fd "    D_${data},\n";
+    print $fd $meta_call;
+    close $fd;
 }
-print $fd "};\n\n";
 
-open my $fd,">","$ddir/typedefData.h" or die("can't open $ddir/typedefData.h $!");
-for my $data ( sort keys %dataGear ) {
-    if ($dataGear{$data} eq 'struct') {
-        print $fd "typedef struct ${data} ${data};\n";
+sub generateEnumData {
+    open my $fd,">","$ddir/enumData.h" or die("can't open $ddir/enumData.h $!");
+    print $fd "enum DataType {\n";
+    print $fd "    D_Code,\n";
+    for my $data ( sort keys %dataGear ) {
+        print $fd "    D_${data},\n";
     }
+    print $fd "};\n\n";
+    close $fd;
 }
 
-open my $fd,">","$ddir/dataGearInit.c" or die("can't open $ddir/dataGearInit.c $!");
-for my $data ( sort keys %dataGear ) {
-    print $fd "    ALLOC_DATA(${context_name}, ${data});\n";
-}
+sub generateTypedefData {
+    open my $fd,">","$ddir/typedefData.h" or die("can't open $ddir/typedefData.h $!");
+    for my $data ( sort keys %dataGear ) {
+        if ($dataGear{$data} eq 'struct') {
+            print $fd "typedef struct ${data} ${data};\n";
+        }
+    }
+    close $fd;
 }
 
+sub generateDataGearInit {
+    open my $fd,">","$ddir/dataGearInit.c" or die("can't open $ddir/dataGearInit.c $!");
+    for my $data ( sort keys %dataGear ) {
+        print $fd "    ALLOC_DATA(${context_name}, ${data});\n";
+    }
+    close $fd;
+}
+
+
 # end