Mercurial > hg > Gears > Gears
annotate src/parallel_execution/generate_stub.pl @ 629:90309637c4c8
Getopt::Std to Getopt::Long
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Jun 2020 16:02:01 +0900 |
parents | d02866506b9b |
children | 0baef27a18f4 |
rev | line source |
---|---|
194 | 1 #!/usr/bin/perl |
2 | |
250 | 3 use strict; |
629
90309637c4c8
Getopt::Std to Getopt::Long
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
4 use Getopt::Long; |
393 | 5 use File::Path qw(make_path); |
250 | 6 |
482
5859bed4edff
Refactoring spawnTasks method
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
468
diff
changeset
|
7 # interface.h |
194 | 8 # typedef struct Worker { |
9 # int id; | |
10 # struct Context* contexts; | |
11 # enum Code execute; | |
12 # enum Code taskSend; | |
13 # enum Code taskRecive; | |
14 # enum Code shutdown; | |
15 # struct Queue* tasks; | |
16 # } Worker; | |
17 | |
255 | 18 our($opt_o,$opt_d,$opt_h); |
629
90309637c4c8
Getopt::Std to Getopt::Long
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
19 GetOptions( |
90309637c4c8
Getopt::Std to Getopt::Long
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
20 "o=s" => \$opt_o, |
90309637c4c8
Getopt::Std to Getopt::Long
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
21 "d=s" => \$opt_d, |
90309637c4c8
Getopt::Std to Getopt::Long
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
22 "h" => \$opt_h, |
90309637c4c8
Getopt::Std to Getopt::Long
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
625
diff
changeset
|
23 ); |
255 | 24 |
25 my $dir = "."; | |
26 if ($opt_d) { | |
27 $dir = $opt_d; | |
28 if (! -d $dir) { | |
393 | 29 make_path $dir; |
255 | 30 } |
31 } | |
254 | 32 |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
33 for my $fn (@ARGV) { |
255 | 34 next if ($fn !~ /\.cbc$/); |
249 | 35 &getDataGear($fn); |
36 &generateDataGear($fn); | |
194 | 37 } |
38 | |
250 | 39 my %var; |
40 my %code; | |
41 my %dataGearVar; | |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
42 my %outputVar; # output var initializer |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
43 my %outputArgs; # continuation's output variables |
250 | 44 my %dataGear; |
45 my %dataGearName; | |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
46 my %generic; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
47 my %dataGearVarType; |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
48 my %codeGear; |
253 | 49 my $implementation; |
50 my $interface; | |
250 | 51 |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
52 # interface definision |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
53 # |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
54 # typedef struct Stack<Type, Impl>{ |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
55 # Type* stack; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
56 # Type* data; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
57 # Type* data1; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
58 # __code whenEmpty(...); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
59 # __code clear(Impl* stack,__code next(...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
60 # __code push(Impl* stack,Type* data, __code next(...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
61 # __code pop(Impl* stack, __code next(Type*, ...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
62 # __code pop2(Impl* stack, Type** data, Type** data1, __code next(Type**, Type**, ...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
63 # __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
64 # __code get(Impl* stack, Type** data, __code next(...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
65 # __code get2(Impl* stack,..., __code next(...)); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
66 # __code next(...); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
67 # } Stack; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
68 # |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
69 # calling example |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
70 # |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
71 # goto nodeStack->push((union Data*)node, stackTest3); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
72 # |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
73 # generated meta level code |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
74 # |
442
481fce540daf
Fix goto implement method of generate_stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
424
diff
changeset
|
75 # Gearef(context, Stack)->stack = (union Data*)nodeStack; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
76 # Gearef(context, Stack)->data = (union Data*)node; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
77 # Gearef(context, Stack)->next = C_stackTest3; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
78 # goto meta(context, nodeStack->push); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
79 |
194 | 80 sub getDataGear { |
81 my ($filename) = @_; | |
598 | 82 my ($codeGearName, $name, $inTypedef,$described_data_gear); |
194 | 83 open my $fd,"<",$filename or die("can't open $filename $!"); |
84 while (<$fd>) { | |
85 if (! $inTypedef) { | |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
86 if (/^typedef struct (\w+)\s*<(.*)>/) { |
194 | 87 $inTypedef = 1; |
88 $name = $1; | |
89 $dataGear{$name} = $_; | |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
90 $var{$name} = {}; |
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
91 $code{$name} = {}; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
92 $generic{$name} = \split(/,/,$2); |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
93 } elsif (/^typedef struct (\w+)/) { |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
94 $inTypedef = 1; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
95 $name = $1; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
96 $dataGear{$name} = $_; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
97 $var{$name} = {}; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
98 $code{$name} = {}; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
99 $generic{$name} = []; |
269 | 100 } elsif (/^(\w+)(\*)+ create(\w+)\(/) { |
249 | 101 if (defined $interface) { |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
102 die "duplicate interface $interface\n"; |
249 | 103 } |
104 $interface = $1; | |
269 | 105 $implementation = $3; |
250 | 106 if ( -f "$interface.cbc") { |
107 &getDataGear("$interface.cbc"); | |
108 } | |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
109 } elsif(/^(.*)par goto (\w+)\((.*)\)/) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
110 my $codeGearName = $2; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
111 if ($filename =~ /^(.*)\/(.*)/) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
112 $codeGearName = "$1/$codeGearName"; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
113 } |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
114 if ( -f "$codeGearName.cbc") { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
115 &getCodeGear("$codeGearName.cbc"); |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
116 } |
595 | 117 } elsif(/^#interface "(.*)"/) { |
468
ac244346c85d
Change used interface syntax from #include to #interface
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
467
diff
changeset
|
118 # use interface |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
119 my $interfaceHeader = $1; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
120 next if ($interfaceHeader =~ /context.h/); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
121 if (-f $interfaceHeader) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
122 &getDataGear("$interfaceHeader"); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
123 &getCodeGear("$interfaceHeader"); |
617
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
124 } else { |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
125 if ($filename =~ /([\w\/]+)\/(.+)$/) { |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
126 $interfaceHeader = "$1/$interfaceHeader"; |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
127 if (-f $interfaceHeader) { |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
128 &getDataGear("$interfaceHeader"); |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
129 &getCodeGear("$interfaceHeader"); |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
130 } |
fca8f83f1611
automatically detect the path of #interface
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
598
diff
changeset
|
131 } |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
132 } |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
133 } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
134 my $codeGearName = $1; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
135 if ($filename =~ /^(.*)\/(.*)/) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
136 $codeGearName = "$1/$codeGearName"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
137 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
138 if ( -f "$codeGearName.cbc") { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
139 &getCodeGear("$codeGearName.cbc"); |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
140 } |
226 | 141 } |
194 | 142 next; |
143 } | |
249 | 144 # gather type name and type |
194 | 145 $dataGear{$name} .= $_; |
385 | 146 if (/^\s*(.*)\s+(\w+);$/ ) { |
280 | 147 my $ttype = $1; |
148 my $tname = $2; | |
625 | 149 if ($ttype =~ /^(union|struct|const|enu,)?\s*(\w+)/) { |
598 | 150 if ($1 ne 'const') { |
151 $ttype = $2; | |
152 } else { | |
625 | 153 my $vname = $2; |
154 my $ttype = $1; | |
155 if ($ttype =~ /(const|enum)/) { | |
156 $ttype = "$1 $vname"; | |
157 } | |
598 | 158 } |
280 | 159 } |
598 | 160 $described_data_gear = 1; |
280 | 161 $var{$name}->{$tname} = $ttype; |
250 | 162 } |
595 | 163 if (/__code (\w+)/) { |
598 | 164 next if $described_data_gear; |
595 | 165 my $args = $'; |
625 | 166 while ($args =~ /\s*(struct|union|const|enum)?\s*([\w\[\]_]+)\*?\s*(\w+),?/g) { |
595 | 167 #$args eq (Impl* vm, pde_t* pgdir, char* init, uint sz, __code next(...)); |
168 my $const_type = $1; | |
169 my $ttype = $2; | |
170 my $tname = $3; | |
171 | |
598 | 172 $ttype =~ s/(Impl|Isa|Type)/Data/; |
625 | 173 if ($const_type =~ /(const|enum)/) { |
174 $ttype = "$1 $ttype"; | |
595 | 175 } |
176 $var{$name}->{$tname} = $ttype; | |
177 } | |
178 } | |
194 | 179 if (/^}/) { |
180 $inTypedef = 0; | |
181 } | |
182 } | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
183 |
194 | 184 } |
185 | |
385 | 186 sub getCodeGear { |
187 my ($filename) = @_; | |
188 open my $fd,"<",$filename or die("can't open $filename $!"); | |
189 my ($name,$impln); | |
190 while (<$fd>) { | |
191 if (/^(\w+)(\*)+ create(\w+)\(/) { | |
192 $name = $1; | |
193 $impln = $3; | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
194 } elsif(/^typedef struct (.*)<.*>\s*{/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
195 $name = $1; |
385 | 196 } |
197 if (defined $name) { | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
198 if (/^\s*\_\_code (\w+)\((.*)\);/) { |
385 | 199 my $args = $2; |
200 my $method = $1; | |
201 $code{$name}->{$method} = []; | |
202 while($args) { | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
203 # replace comma |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
204 $args =~ s/(^\s*,\s*)//; |
385 | 205 # continuation case |
206 if ($args =~ s/^(\s)*\_\_code\s+(\w+)\(([^)]*)\)//) { | |
207 my $next = $2; | |
208 my @args = split(/,/,$3); | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
209 push(@{$code{$name}->{$method}},"\_\_code $next"); |
598 | 210 } elsif ($args =~ s/^(struct|union|const)?\s*(\w+)(\**)\s+(\w+)//) { |
385 | 211 my $structType = $1; |
212 my $typeName = $2; | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
213 my $ptrType = $3; |
385 | 214 my $varName = $4; |
215 my $typeField = lcfirst($typeName); | |
598 | 216 if ($structType =~ /const/) { |
217 $typeName = "$structType $typeName"; | |
218 } | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
219 push(@{$code{$name}->{$method}},"$typeName$ptrType $varName"); |
385 | 220 } elsif ($args =~ s/(.*,)//) { |
221 } else { | |
222 last; | |
223 } | |
224 } | |
225 } | |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
226 } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
227 my $codeGearName = $1; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
228 my $args = $2; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
229 my $inputCount = 0; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
230 my $outputCount = 0; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
231 my $inputIncFlag = 1; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
232 while($args) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
233 if ($args =~ s/(^\s*,\s*)//) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
234 } |
404
c5cd9888bf2a
Fix bitonicSort
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
403
diff
changeset
|
235 if ($args =~ s/^(\s)*\_\_code\s+(\w+)\((.*?)\)//) { |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
236 $codeGear{$codeGearName}->{"code"}->{$2} = "\_\_code"; |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
237 $inputIncFlag = 0; |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
238 my @outputs = split(/,/,$3); |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
239 for my $output (@outputs) { |
598 | 240 if ($output =~ /\s*(struct|union|const)?\s*(\w+)(\*)?+\s(\w+)/) { |
241 my $structType = $1; | |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
242 my $type = $2; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
243 my $varName = $4; |
598 | 244 if ($structType =~ /const/) { |
245 $type = "$structType $type"; | |
246 } | |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
247 $codeGear{$codeGearName}->{"var"}->{$varName} = "$type $outputCount"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
248 $outputCount++; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
249 } |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
250 } |
598 | 251 } elsif ($args =~ s/^(struct|union|const)?\s*(\w+)(\*)?+\s(\w+)// && $inputIncFlag) { |
252 my $structType = $1; | |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
253 my $type = $2; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
254 my $varName = $4; |
598 | 255 if ($structType =~ /const/) { |
256 $type = "$structType $type"; | |
257 } | |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
258 $codeGear{$codeGearName}->{"var"}->{$varName} = "$type $inputCount"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
259 $inputCount++; |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
260 } elsif ($args =~ s/(.*,)//) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
261 } else { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
262 last; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
263 } |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
264 } |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
265 $codeGear{$codeGearName}->{"input"} = $inputCount; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
266 $codeGear{$codeGearName}->{"output"} = $outputCount; |
385 | 267 } |
268 } | |
269 } | |
270 | |
250 | 271 sub generateStub { |
251 | 272 my($fd,$prevCodeGearName,$dataGearName) = @_; |
274 | 273 print $fd "__code ", $prevCodeGearName ,"_stub(struct Context* context) {\n"; |
251 | 274 print $fd $dataGearName; |
250 | 275 print $fd "\n} \n\n"; |
251 | 276 return 1; |
250 | 277 } |
278 | |
253 | 279 sub generateStubArgs { |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
280 my($codeGearName, $varName, $typeName, $ptrType, $typeField, $interface,$output) = @_; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
281 my $varname1 = $output?"O_$varName":$varName; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
282 for my $n ( @{$dataGearVar{$codeGearName}} ) { |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
283 # we already have it |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
284 return 0 if ( $n eq $varname1); |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
285 } |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
286 push @{$dataGearVar{$codeGearName}}, $varname1; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
287 push @{$dataGearVarType{$codeGearName}}, $typeName; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
288 if ($typeName eq $implementation) { |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
289 # get implementation |
258 | 290 $dataGearName{$codeGearName} .= "\t$typeName* $varName = ($typeName*)GearImpl(context, $interface, $varName);\n"; |
253 | 291 } else { |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
292 # interface var |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
293 for my $ivar (keys %{$var{$interface}}) { |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
294 # input data gear field |
253 | 295 if ($varName eq $ivar) { |
280 | 296 if ($typeName eq $var{$interface}->{$ivar}) { |
297 if ($output) { | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
298 $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = &Gearef(context, $interface)->$varName;\n"; |
598 | 299 $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName __attribute__((unused)) = *O_$varName;\n"; |
280 | 300 return 1; |
301 } | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
302 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(context, $interface)->$varName;\n"; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
303 return 1; |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
304 } |
253 | 305 } |
306 } | |
598 | 307 |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
308 # interface continuation |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
309 for my $cName (keys %{$code{$interface}}) { |
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
310 if ($varName eq $cName) { |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
311 # continuation field |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
312 $dataGearName{$codeGearName} .= "\tenum Code $varName = Gearef(context, $interface)->$varName;\n"; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
313 return 1; |
253 | 314 } |
315 } | |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
316 # par goto var |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
317 for my $var (keys %{$codeGear{$codeGearName}->{"var"}}) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
318 # input data gear field |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
319 if ($varName eq $var) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
320 my ($type, $count) = split(/\s/, $codeGear{$codeGearName}->{"var"}->{$var}); |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
321 if ($typeName eq $type) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
322 if ($output) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
323 $dataGearName{$codeGearName} .= "\t$typeName$ptrType* O_$varName = ($typeName $ptrType*)&context->data[context->odg + $count];\n"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
324 $outputVar{$codeGearName} .= "\t$typeName$ptrType $varName = *O_$varName;\n"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
325 return 1; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
326 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
327 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = &context->data[context->idg + $count]->$typeName;\n"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
328 return 1; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
329 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
330 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
331 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
332 |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
333 # par goto continuation |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
334 for my $cName (keys %{$codeGear{$codeGearName}->{"code"}}) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
335 if ($varName eq $cName) { |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
336 # continuation field |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
337 $dataGearName{$codeGearName} .= "\tenum Code $varName = context->next;\n"; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
338 return 1; |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
339 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
340 } |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
341 |
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
342 # par goto continuation |
389 | 343 # global or local variable case |
344 if ($typeName eq "Code") { | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
345 $dataGearName{$codeGearName} .= "\tenum $typeName$ptrType $varName = Gearef(context, $interface)->$varName;\n"; |
389 | 346 return 1; |
347 } | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
348 $dataGearName{$codeGearName} .= "\t$typeName$ptrType $varName = Gearef(context, $typeName);\n"; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
349 return 1; |
253 | 350 } |
351 } | |
352 | |
194 | 353 sub generateDataGear { |
249 | 354 my ($filename) = @_; |
355 open my $in,"<",$filename or die("can't open $filename $!"); | |
254 | 356 |
357 my $fn; | |
358 if ($opt_o) { | |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
359 $fn = $opt_o; |
254 | 360 } else { |
361 my $fn1 = $filename; | |
362 $fn1 =~ s/\.cbc/.c/; | |
363 my $i = 1; | |
255 | 364 $fn = "$dir/$fn1"; |
254 | 365 while ( -f $fn) { |
255 | 366 $fn = "$dir/$fn1.$i"; |
254 | 367 $i++; |
368 } | |
250 | 369 } |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
370 if ( $fn =~ m=(.*)/[^/]+$= ) { |
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
371 if (! -d $1) { |
393 | 372 make_path $1; |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
373 } |
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
374 } |
249 | 375 open my $fd,">",$fn or die("can't write $fn $!"); |
254 | 376 |
249 | 377 my $prevCodeGearName; |
250 | 378 my $inTypedef = 0; |
278 | 379 my $inStub = 0; |
546 | 380 my $hasParGoto = 0; |
418 | 381 my $inMain = 0 ; |
598 | 382 my $inCode = 0 ; |
250 | 383 my %stub; |
251 | 384 my $codeGearName; |
444
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
385 my %localVarType; |
598 | 386 my %localCode; |
254 | 387 |
249 | 388 while (<$in>) { |
418 | 389 if (! $inTypedef && ! $inStub && ! $inMain) { |
454 | 390 if (/^typedef struct (\w+) \{/) { |
249 | 391 $inTypedef = 1; |
454 | 392 } elsif (/^int main\((.*)\) \{/) { |
418 | 393 $inMain = 1; |
468
ac244346c85d
Change used interface syntax from #include to #interface
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
467
diff
changeset
|
394 } elsif(/^#interface "(.*)"/) { |
462
8d7e5d48cad3
Running CPU examples
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
461
diff
changeset
|
395 my $interfaceHeader = $1; |
468
ac244346c85d
Change used interface syntax from #include to #interface
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
467
diff
changeset
|
396 # #interface not write |
462
8d7e5d48cad3
Running CPU examples
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
461
diff
changeset
|
397 next unless ($interfaceHeader =~ /context.h/); |
598 | 398 } elsif (/^\s\s*_\_code (\w+)\((.*)\)(.*)/) { |
399 $localCode{$1} = 1; | |
400 } elsif (/^\s\s*_\_code *\(\s*\*\s*(\w+)\)\((.*)\)(.*)/) { | |
401 $localCode{$1} = 1; | |
253 | 402 } elsif (/^\_\_code (\w+)\((.*)\)(.*)/) { |
598 | 403 $inCode = 1; |
404 %localCode = {}; | |
444
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
405 %localVarType = {}; |
251 | 406 $codeGearName = $1; |
253 | 407 my $args = $2; |
408 my $tail = $3; | |
250 | 409 if ($codeGearName =~ /_stub$/) { |
262 | 410 # don't touch already existing stub |
278 | 411 $inStub = 1; |
250 | 412 $stub{$codeGearName} = 1; |
413 print $fd $_; | |
414 next; | |
415 } | |
249 | 416 if (defined $prevCodeGearName) { |
262 | 417 # stub is generated just before next CodeGear |
250 | 418 if (defined $stub{$prevCodeGearName."_stub"}) { |
419 undef $prevCodeGearName; | |
278 | 420 } else { |
421 &generateStub($fd,$prevCodeGearName,$dataGearName{$prevCodeGearName}); | |
422 $stub{$prevCodeGearName."_stub"} = 1; | |
250 | 423 } |
249 | 424 } |
262 | 425 # analyzing CodeGear argument |
426 # these arguments are extract from current context's arugment DataGear Interface | |
427 # and passed to the CodeGear | |
428 # struct Implementaion needs special handling | |
429 # __code next(...) ---> enum Code next | |
253 | 430 $prevCodeGearName = $codeGearName; |
431 $dataGearVar{$codeGearName} = []; | |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
432 $outputVar{$codeGearName} = ""; |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
433 $outputArgs{$codeGearName} = {}; |
259
195518ab62fc
fix type gathering pattern match in generate_stub.pl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
255
diff
changeset
|
434 my $newArgs = "struct Context *context,"; |
305 | 435 if ($args=~/^struct Context\s*\*\s*context/) { |
436 $newArgs = ""; | |
437 } | |
521
393e1d2d06f2
fix about no argument code gear of generate_stub.pl
mir3636
parents:
509
diff
changeset
|
438 if (!$args){ |
393e1d2d06f2
fix about no argument code gear of generate_stub.pl
mir3636
parents:
509
diff
changeset
|
439 $newArgs = "struct Context *context"; |
393e1d2d06f2
fix about no argument code gear of generate_stub.pl
mir3636
parents:
509
diff
changeset
|
440 } |
253 | 441 while($args) { |
442 if ($args =~ s/(^\s*,\s*)//) { | |
443 $newArgs .= $1; | |
444 } | |
262 | 445 # continuation case |
280 | 446 if ($args =~ s/^(\s)*\_\_code\s+(\w+)\(([^)]*)\)//) { |
447 my $next = $2; | |
448 my @args = split(/,/,$3); | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
449 if (&generateStubArgs($codeGearName, $next, "Code", "", $next, $interface,0) ) { |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
450 $newArgs .= "enum Code $next"; |
258 | 451 } |
262 | 452 # analyze continuation arguments |
453 # output arguments are defined in the Interface take the pointer of these | |
454 # output arguments are put into the Interface DataGear just before the goto | |
253 | 455 for my $arg (@args) { |
456 $arg =~ s/^\s*//; | |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
457 last if ($arg =~ /\.\.\./); |
625 | 458 $arg =~ s/^(struct|union|const|enum)?\s*(\w+)(\**)\s(\w+)//; |
253 | 459 my $structType = $1; |
460 my $typeName = $2; | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
461 my $ptrType = $3; |
253 | 462 my $varName = $4; |
625 | 463 if ($structType =~ /(const|enum)/) { |
598 | 464 $typeName = "$structType $typeName"; |
465 } | |
253 | 466 my $typeField = lcfirst($typeName); |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
467 push(@{$outputArgs{$codeGearName}->{$next}}, $varName); |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
468 if (&generateStubArgs($codeGearName, $varName, $typeName, $ptrType, $typeField, $interface,1)) { |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
469 $newArgs .= ",$structType $typeName **O_$varName"; |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
470 } |
253 | 471 } |
625 | 472 } elsif ($args =~ s/^(struct|union|const|enum)?\s*(\w+)(\**)\s(\w+)//) { |
253 | 473 my $structType = $1; |
474 my $typeName = $2; | |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
475 my $ptrType = $3; |
253 | 476 my $varName = $4; |
598 | 477 $newArgs .= $&; # assuming no duplicate |
625 | 478 if ($structType =~ /(const|enum)/) { |
598 | 479 $typeName = "$structType $typeName"; |
480 } | |
253 | 481 my $typeField = lcfirst($typeName); |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
482 &generateStubArgs($codeGearName, $varName, $typeName, $ptrType, $typeField, $interface,0); |
255 | 483 } elsif ($args =~ s/(.*,)//) { |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
484 $newArgs .= $1; |
255 | 485 } else { |
486 $newArgs .= $args; | |
487 last; | |
253 | 488 } |
489 } | |
262 | 490 # generate goto statement from stub to the CodeGear in the buffer |
253 | 491 $dataGearName{$codeGearName} .= "\tgoto $codeGearName(context"; |
492 for my $arg ( @{$dataGearVar{$codeGearName}}) { | |
493 $dataGearName{$codeGearName} .= ", $arg"; | |
494 } | |
495 $dataGearName{$codeGearName} .= ");"; | |
262 | 496 # generate CodeGear header with new arguments |
253 | 497 print $fd "__code $codeGearName($newArgs)$tail\n"; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
498 if ($outputVar{$codeGearName} ne "") { |
324 | 499 # output data var can be use before write |
500 # it should be initialze by gearef | |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
501 print $fd $outputVar{$codeGearName}; |
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
259
diff
changeset
|
502 } |
250 | 503 next; |
598 | 504 } elsif (! $inCode) { |
505 s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g; # replacing new | |
506 print $fd $_; | |
507 next; | |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
508 } elsif (/^(.*)goto (\w+)\-\>(\w+)\((.*)\);/) { |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
509 # handling goto statement |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
510 # convert it to the meta call form with two arugments, that is context and enum Code |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
511 my $prev = $1; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
512 my $next = $2; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
513 my $method = $3; |
529
e5e3025f503a
Generate twice stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
514 my $tmpArgs = $4; |
548 | 515 #$tmpArgs =~ s/\(.*\)/\(\)/; |
529
e5e3025f503a
Generate twice stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
516 my @args = split(/,/,$tmpArgs); |
598 | 517 if (! defined $dataGearVarType{$codeGearName}) { |
518 print $fd $_ ; | |
519 next ; | |
520 } | |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
521 my @types = @{$dataGearVarType{$codeGearName}}; |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
522 my $ntype; |
415 | 523 my $ftype; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
524 for my $v (@{$dataGearVar{$codeGearName}}) { |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
525 my $t = shift @types; |
528
82ff74c2f162
Delete stub for bitonicSort
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
527
diff
changeset
|
526 if ($v eq $next || $v eq "O_$next") { |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
527 $ntype = $t; |
415 | 528 $ftype = lcfirst($ntype); |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
529 } |
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
530 } |
444
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
531 if (!defined $ntype) { |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
532 $ntype = $localVarType{$next}; |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
533 $ftype = lcfirst($ntype); |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
534 } |
442
481fce540daf
Fix goto implement method of generate_stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
424
diff
changeset
|
535 print $fd "\tGearef(context, $ntype)->$ftype = (union Data*) $next;\n"; |
415 | 536 # Put interface argument |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
537 my $prot = $code{$ntype}->{$method}; |
385 | 538 my $i = 1; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
539 for my $arg (@args) { |
415 | 540 my $pType; |
541 my $pName; | |
385 | 542 my $p = @$prot[$i]; |
457
2b36a1878c6f
Refactor TaskManagerImpl
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
447
diff
changeset
|
543 next if ($p eq $arg); |
387 | 544 $p =~ s/^(.*)\s(\w+)//; |
415 | 545 $pType = $1; |
546 $pName = $2; | |
387 | 547 $arg =~ s/^(\s)*(\w+)/$2/; |
548 if ($pType =~ s/\_\_code$//) { | |
444
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
549 if ($arg =~ /(\w+)\(.*\)/) { |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
550 print $fd "\tGearef(context, $ntype)->$pName = $1;\n"; |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
551 } else { |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
552 print $fd "\tGearef(context, $ntype)->$pName = C_$arg;\n"; |
0c024ea61601
Using cas interface but occurred warning
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
553 } |
466
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
554 } elsif ($pType =~ /Data\**$/){ |
831b7f6fd687
Fix warning pointer type
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
464
diff
changeset
|
555 print $fd "\tGearef(context, $ntype)->$pName = (union $pType) $arg;\n"; |
387 | 556 } else { |
557 print $fd "\tGearef(context, $ntype)->$pName = $arg;\n"; | |
558 } | |
385 | 559 $i++; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
560 } |
547 | 561 print $fd "${prev}context->before = C_$codeGearName;\n"; |
442
481fce540daf
Fix goto implement method of generate_stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
424
diff
changeset
|
562 print $fd "${prev}goto meta(context, $next->$method);\n"; |
384
ee5d2b1685d7
Fix perlscript
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
383
diff
changeset
|
563 next; |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
564 } elsif(/^(.*)par goto (\w+)\((.*)\);/) { |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
565 # handling par goto statement |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
566 # convert it to the parallel |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
567 my $prev = $1; |
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
568 my $codeGearName = $2; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
569 my $args = $3; |
401
408b4aab7610
Supported par goto iterate statement for perl script
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
570 my $inputCount = $codeGear{$codeGearName}->{'input'}; |
408b4aab7610
Supported par goto iterate statement for perl script
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
571 my $outputCount = $codeGear{$codeGearName}->{'output'}; |
403
83c9aeb1fe3e
Generate MultiDimIterator by perl script
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
402
diff
changeset
|
572 my @iterateCounts; |
401
408b4aab7610
Supported par goto iterate statement for perl script
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
573 # parse examples 'par goto(.., iterate(10), exit);' |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
574 if ($args =~ /iterate\((.*)?\),/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
575 @iterateCounts = split(/,/,$1);; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
576 $inputCount--; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
577 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
578 # replace iterate keyword |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
579 $args =~ s/iterate\((.*)?\),//; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
580 my @dataGears = split(/,\s*/, $args); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
581 my $nextCodeGear = pop(@dataGears); |
546 | 582 if (! $hasParGoto) { |
583 $hasParGoto = 1; | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
584 print $fd "${prev}struct Element* element;\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
585 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
586 my $initTask = << "EOFEOF"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
587 ${prev}context->task = NEW(struct Context); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
588 ${prev}initContext(context->task); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
589 ${prev}context->task->next = C_$codeGearName; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
590 ${prev}context->task->idgCount = $inputCount; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
591 ${prev}context->task->idg = context->task->dataNum; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
592 ${prev}context->task->maxIdg = context->task->idg + $inputCount; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
593 ${prev}context->task->odg = context->task->maxIdg; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
594 ${prev}context->task->maxOdg = context->task->odg + $outputCount; |
396
bba401f93dcd
Add handle par goto statement
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
393
diff
changeset
|
595 EOFEOF |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
596 print $fd $initTask; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
597 if (@iterateCounts) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
598 print $fd "${prev}context->task->iterate = 0;\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
599 my $len = @iterateCounts; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
600 if ($len == 1) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
601 print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], 1, 1);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
602 } elsif ($len == 2) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
603 print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], $iterateCounts[1], 1);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
604 } elsif ($len == 3) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
605 print $fd "${prev}context->task->iterator = createMultiDimIterator(context, $iterateCounts[0], $iterateCounts[1], $iterateCounts[2]);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
606 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
607 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
608 for my $dataGear (@dataGears) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
609 print $fd "${prev}GET_META($dataGear)->wait = createSynchronizedQueue(context);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
610 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
611 for my $i (0..$inputCount-1) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
612 print $fd "${prev}context->task->data[context->task->idg+$i] = (union Data*)@dataGears[$i];\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
613 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
614 for my $i (0..$outputCount-1) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
615 print $fd "${prev}context->task->data[context->task->odg+$i] = (union Data*)@dataGears[$inputCount+$i];\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
616 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
617 my $putTask = << "EOFEOF"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
618 ${prev}element = &ALLOCATE(context, Element)->Element; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
619 ${prev}element->data = (union Data*)context->task; |
482
5859bed4edff
Refactoring spawnTasks method
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
468
diff
changeset
|
620 ${prev}element->next = context->taskList; |
5859bed4edff
Refactoring spawnTasks method
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
468
diff
changeset
|
621 ${prev}context->taskList = element; |
398
fc4fcd441700
Fix spanwTasks
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
397
diff
changeset
|
622 EOFEOF |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
623 print $fd $putTask; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
624 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
625 } elsif (/^(.*)goto (\w+)\((.*)\);/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
626 # handling goto statement |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
627 # convert it to the meta call form with two arugments, that is context and enum Code |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
628 my $prev = $1; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
629 my $next = $2; |
527
929aa06a12f9
Generate par goto code gear stub
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
521
diff
changeset
|
630 my @args = split(/,/, $3); |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
631 my $v = 0; |
598 | 632 if (defined $localCode{$next}) { |
633 print $fd $_; next; | |
634 } | |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
635 for my $n ( @{$dataGearVar{$codeGearName}} ) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
636 # continuation arguments |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
637 $v = 1 if ( $n eq $next); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
638 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
639 if ($v || defined $code{$interface}->{$next}) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
640 # write continuation's arguments into the interface arguments |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
641 # we may need a commit for a shared DataGear |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
642 for my $arg ( @{$outputArgs{$codeGearName}->{$next}} ) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
643 my $v = shift(@args); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
644 print $fd "\t*O_$arg = $v;\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
645 } |
546 | 646 if ($hasParGoto) { |
482
5859bed4edff
Refactoring spawnTasks method
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
468
diff
changeset
|
647 print $fd "${prev}Gearef(context, TaskManager)->taskList = context->taskList;\n"; |
467
4ec61e201c19
Fix segmentation fault for calc.cbc
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
466
diff
changeset
|
648 print $fd "${prev}Gearef(context, TaskManager)->next1 = C_$next;\n"; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
649 print $fd "${prev}goto meta(context, C_$next);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
650 } else { |
547 | 651 print $fd "${prev}context->before = C_$codeGearName;\n"; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
652 print $fd "${prev}goto meta(context, $next);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
653 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
654 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
655 } |
546 | 656 if ($hasParGoto) { |
482
5859bed4edff
Refactoring spawnTasks method
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
468
diff
changeset
|
657 print $fd "${prev}Gearef(context, TaskManager)->taskList = context->taskList;\n"; |
467
4ec61e201c19
Fix segmentation fault for calc.cbc
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
466
diff
changeset
|
658 print $fd "${prev}Gearef(context, TaskManager)->next1 = C_$next;\n"; |
546 | 659 print $fd "${prev}goto parGotoMeta(context, C_$next);\n"; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
660 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
661 } elsif ($next eq "meta") { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
662 print $fd $_; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
663 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
664 } else { |
547 | 665 print $fd "${prev}context->before = C_$codeGearName;\n"; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
666 print $fd "${prev}goto meta(context, C_$next);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
667 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
668 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
669 } elsif(/^.*(struct|union)?\s(\w+)\*\s(\w+)\s?[=;]/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
670 my $type = $2; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
671 my $varName = $3; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
672 $localVarType{$varName} = $type; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
673 s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g; # replacing new |
462
8d7e5d48cad3
Running CPU examples
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
461
diff
changeset
|
674 } elsif(/^}/) { |
546 | 675 $hasParGoto = 0; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
676 } else { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
677 s/new\s+(\w+)\(\)/\&ALLOCATE(context, \1)->\1/g; # replacing new |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
678 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
679 # gather type name and type |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
680 } elsif ($inMain) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
681 if (/^(.*)goto start_code\(main_context\);/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
682 print $fd $_; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
683 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
684 } elsif (/^(.*)goto (\w+)\((.*)\);/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
685 my $prev = $1; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
686 my $next = $2; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
687 print $fd "${prev}struct Context* main_context = NEW(struct Context);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
688 print $fd "${prev}initContext(main_context);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
689 print $fd "${prev}main_context->next = C_$next;\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
690 print $fd "${prev}goto start_code(main_context);\n"; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
691 next; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
692 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
693 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
694 if (/^}/) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
695 $inStub = 0; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
696 $inTypedef = 0; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
697 $inMain = 0; |
598 | 698 $inCode = 0; |
461
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
699 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
700 print $fd $_; |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
701 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
702 if (defined $prevCodeGearName) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
703 if (!defined $stub{$prevCodeGearName."_stub"}) { |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
704 $stub{$prevCodeGearName."_stub"} = &generateStub($fd,$prevCodeGearName,$dataGearName{$codeGearName}); |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
705 } |
6b71cf5b1c22
Change Interface files from cbc to header
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
458
diff
changeset
|
706 } |
194 | 707 } |
708 | |
709 # end |