annotate src/parallel_execution/generate_stub.pl @ 243:6a80ab36181c

generate impl
author mir3636
date Tue, 24 Jan 2017 19:52:20 +0900
parents 24da4f217447
children afa1e02e4386
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
194
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
1 #!/usr/bin/perl
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
2
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
3 # interface.cbc
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
4 # typedef struct Worker {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
5 # int id;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
6 # struct Context* contexts;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
7 # enum Code execute;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
8 # enum Code taskSend;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
9 # enum Code taskRecive;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
10 # enum Code shutdown;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
11 # struct Queue* tasks;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
12 # } Worker;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
13
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
14 system "rm -rf d";
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
15 system "mkdir d";
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
16
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
17 while (<*.cbc>) {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
18 &getDataGear($_);
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
19 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
20
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
21 &generateDataGear();
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
22
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
23 sub getDataGear {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
24 my ($filename) = @_;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
25 open my $fd,"<",$filename or die("can't open $filename $!");
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
26 while (<$fd>) {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
27 if (! $inTypedef) {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
28 if (/^typedef struct (\w+) {/) {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
29 $inTypedef = 1;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
30 $name = $1;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
31 $dataGear{$name} = $_;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
32 }
226
68c03e7057d9 get arg
mir3636
parents: 201
diff changeset
33 if (/^\_\_code (\w+)/) {
68c03e7057d9 get arg
mir3636
parents: 201
diff changeset
34 $codeGearName = $1;
243
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
35 while (/struct (\w+)\*\s(\w+)/g) {
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
36 $tmp = lcfirst($1);
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
37 if ($tmp ne $2) {
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
38 $tmp = ucfirst($2);
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
39 $dataGearName{$codeGearName} .= "\t\t(" . $1 . "*)GearImpl(context, " . $tmp . ", " . $2 . ")";
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
40 $dataGearName{$codeGearName} .= ",\n";
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
41 } else {
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
42 $dataGearName{$codeGearName} .= "\t\tGearef(context, " . $1 . ")";
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
43 $dataGearName{$codeGearName} .= ",\n";
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
44 }
226
68c03e7057d9 get arg
mir3636
parents: 201
diff changeset
45 }
228
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
46 next;
226
68c03e7057d9 get arg
mir3636
parents: 201
diff changeset
47 }
194
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
48 next;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
49 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
50 $dataGear{$name} .= $_;
195
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
51 if (/(\w+);$/ and !/^} (\w+)/) {
200
207aff30ed34 fix generate_stub.pl
mir3636
parents: 195
diff changeset
52 $tmp = $1 . "\n";
207aff30ed34 fix generate_stub.pl
mir3636
parents: 195
diff changeset
53 if (/{/) {
207aff30ed34 fix generate_stub.pl
mir3636
parents: 195
diff changeset
54 $tmp = "{" . $';
201
mir3636
parents: 200
diff changeset
55 $tmp =~ s/;$//;
200
207aff30ed34 fix generate_stub.pl
mir3636
parents: 195
diff changeset
56 }
207aff30ed34 fix generate_stub.pl
mir3636
parents: 195
diff changeset
57 $var{$name} .= $tmp;
195
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
58 $tmp = $`;
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
59 $tmp =~ s/^\s*//;
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
60 $type{$name} .= $tmp . "\n";
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
61 }
194
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
62 if (/^}/) {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
63 $inTypedef = 0;
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
64 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
65 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
66 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
67
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
68 sub generateDataGear {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
69 open my $fd,">","d/extern.h" or die("can't open d/extern.h $!");
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
70 for my $name ( sort keys %dataGear ) {
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
71 print $fd $dataGear{$name},"\n";
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
72 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
73 print $fd "\n";
195
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
74
228
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
75 open my $fd,">","d/type.h" or die("can't open d/stub.h $!");
195
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
76 for my $name ( sort keys %dataGear ) {
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
77 print $fd $var{$name},"\n";
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
78 }
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
79 for my $name ( sort keys %dataGear ) {
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
80 print $fd $type{$name},"\n";
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
81 }
228
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
82
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
83 open my $fd,">","d/stub.h" or die("can't open d/stub.h $!");
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
84 for my $codeGearName ( sort keys %dataGearName ) {
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
85 print $fd "__code ", $codeGearName ,"_stub (struct Context* context) {\n";
243
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
86 print $fd "\tgoto " . $codeGearName . "(";
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
87 #print $fd "\tgoto " . $codeGearName . "(context,\n";
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
88 print $fd substr($dataGearName{$codeGearName},2,-2);
6a80ab36181c generate impl
mir3636
parents: 231
diff changeset
89 print $fd "); \n} \n\n";
228
55260ff44c8c generate stub
mir3636
parents: 226
diff changeset
90 }
195
bd96dffaa76a generate_stub
mir3636
parents: 194
diff changeset
91 print $fd "\n";
194
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
92 }
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
93
081607dcf893 create generate_stub.pl
mir3636
parents:
diff changeset
94 # end