annotate src/gearsTools/generate_stub.pl @ 395:17e8a4bc06a7 default tip

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