Mercurial > hg > CbC > old > device
annotate test/tmp7.c @ 896:d712ee10feb7
local_nptr for locally defined struct
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Apr 2014 19:20:58 +0900 |
parents | 1a027275743d |
children |
rev | line source |
---|---|
467 | 1 int printf(const char *format, ...); |
574 | 2 #ifndef INLINE |
3 #define INLINE | |
4 #endif | |
13 | 5 int k=3; |
6 struct aa { int a[100]; } aaa,bbb; | |
258
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
7 struct bb { int b[2]; } aaa1,bbb1; |
574 | 8 INLINE void tmp(void); |
13 | 9 |
574 | 10 INLINE struct aa |
45 | 11 main0(int); |
0 | 12 |
624 | 13 INLINE void |
14 main01(int k, struct aa a) | |
15 { | |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
16 printf("#0015:main01 k=%d,a[0]=%d,a[99]=%d\n",k,a.a[0],a.a[99]); |
624 | 17 } |
18 | |
574 | 19 INLINE struct aa |
45 | 20 main0(int k) |
0 | 21 { |
39 | 22 int i; |
16 | 23 struct aa ccc; |
39 | 24 |
25 for(i=0;i<100;i++) ccc.a[i]=i; | |
45 | 26 ccc.a[55]=k; |
16 | 27 return ccc; |
0 | 28 } |
29 | |
574 | 30 INLINE struct aa |
45 | 31 main3(struct aa arg) |
32 { | |
33 int j=++arg.a[55]; | |
34 return main0(j); | |
35 } | |
36 | |
574 | 37 INLINE void |
8 | 38 main2(struct aa a1) |
39 { | |
37 | 40 /* main2 a1.a[99] 0 */ |
41 /* main2 a1.a[55] 0 */ | |
42 /* main2 a1.a[99] 55 */ | |
43 /* main2 a1.a[55] 44 */ | |
880 | 44 printf("#0043:main2 a1.a[99] %d\n",a1.a[99]); |
45 printf("#0044:main2 a1.a[55] %d\n",a1.a[55]); | |
8 | 46 } |
47 | |
574 | 48 INLINE struct bb |
258
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
49 main5(struct aa a1,struct bb a2) |
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
50 { |
880 | 51 printf("#0050:main5 a1.a[99] %d\n",a1.a[99]); |
52 printf("#0051:main5 a1.a[55] %d\n",a1.a[55]); | |
53 printf("#0052:main5 a2.b[0] %d\n",a2.b[0]); | |
54 printf("#0053:main5 a2.b[1] %d\n",a2.b[1]); | |
55 a2.b[0]=333; | |
56 a2.b[1]=555; | |
57 return a2; | |
258
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
58 } |
870
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
59 INLINE void main6(); INLINE void main7(); |
258
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
60 |
574 | 61 INLINE void |
0 | 62 main1(struct aa a1) |
63 { | |
37 | 64 /* main1 a1.a[0] 0 */ |
65 /* main1 a1.a[0] 44 */ | |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
66 printf("#0065:main1 a1.a[0] %d\n",a1.a[0]); |
15 | 67 a1.a[55]=44; |
0 | 68 if (a1.a[0]) |
880 | 69 main2(a1); |
0 | 70 else |
880 | 71 main2(aaa); |
0 | 72 } |
73 | |
487 | 74 int |
0 | 75 main(ac,av) |
76 int ac; | |
77 char *av[]; | |
78 { | |
79 register int i; | |
80 register char *p; | |
81 int j = 3; | |
16 | 82 struct { int b; void (*c)(struct aa); } q = {3,main1},r; |
39 | 83 struct aa *aap[3]; |
885
1a027275743d
struct returinng function have to be indirect.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
883
diff
changeset
|
84 struct bb bb0 = {{1,2}}; // = {1,2}; should be Ok |
0 | 85 j = 3; |
86 | |
624 | 87 aaa.a[0] = 55; |
88 aaa.a[99] = 66; | |
89 main01(j,aaa); | |
90 | |
45 | 91 bbb = main0(123); |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
92 printf("#0091:copied main0 ccc.a[55] %d==123\n",bbb.a[55]); |
39 | 93 aap[2] = &bbb; |
45 | 94 *aap[2] = main0(123); |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
95 printf("#0094:complex copied main0 ccc.a[55] %d==123\n",bbb.a[55]); |
39 | 96 bbb.a[55]=0; |
45 | 97 j = main0(123).a[55]; |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
98 printf("#0097:new main0 ccc.a[55] in temporal copy %d==123\n",j); |
39 | 99 |
45 | 100 j = 552; |
101 bbb = main3(bbb); | |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
102 printf("#0101:main3 bbb.a[55] in temporal copy %d==552 %d==1\n",j,bbb.a[55]); |
45 | 103 j = main3(bbb).a[55]; |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
104 printf("#0103:main3 bbb.a[55] in temporal copy %d==2 %d\n",j,bbb.a[53]); |
45 | 105 j = main3(bbb).a[53]; |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
106 printf("#0105:main3 bbb.a[55] in temporal copy %d==53 %d\n",j,bbb.a[53]); |
45 | 107 |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
108 printf("#0107:%d==3\n",q.b); |
37 | 109 /* 3==3 */ |
0 | 110 r = q; |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
111 printf("#0110:%d==3\n",r.b); |
37 | 112 /* 3==3 */ |
15 | 113 (*r.c)(aaa); |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
114 printf("#0113:main aaa.a[55] %d\n",aaa.a[55]); |
37 | 115 /* main aaa.a[55] 123 */ |
15 | 116 bbb.a[0]=44; |
0 | 117 aaa = bbb; |
15 | 118 aaa.a[99]=55; /* core dump? */ |
119 (*r.c)(aaa); | |
37 | 120 /* main aaa.a[55] 0 */ |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
121 printf("#0120:main aaa.a[55] %d\n",aaa.a[55]); |
8 | 122 p = av[0]; |
487 | 123 if (!p) return 55; |
0 | 124 i = p[1]; |
125 p = p+i; | |
37 | 126 /* 47 ./a.out */ |
748
c2c709727221
i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
624
diff
changeset
|
127 printf("#0126:%d %s\n",i,p-i+3); |
258
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
128 aaa1.b[0]=33; |
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
129 aaa1.b[1]=55; |
22949117768f
Complex function argments. Struct is done. Long long is odd.
kono
parents:
172
diff
changeset
|
130 bbb1 = main5(aaa,aaa1); |
885
1a027275743d
struct returinng function have to be indirect.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
883
diff
changeset
|
131 printf("#0130:main5-2 %d %d\n",bb0.b[0], |
880 | 132 main5(bbb,bbb1).b[0]); |
885
1a027275743d
struct returinng function have to be indirect.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
883
diff
changeset
|
133 printf("#0132:main5-1 %d %d\n",bb0.b[0], |
880 | 134 main5(bbb,main5(aaa,aaa1)).b[0]); |
820
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
135 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
136 main6(); |
883 | 137 main7(); |
172 | 138 return 0; |
0 | 139 } |
140 | |
820
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
141 typedef struct { |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
142 char x,y; |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
143 } s; |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
144 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
145 s P[15],Q[15]; |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
146 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
147 static void |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
148 l(s p, s q){ |
896
d712ee10feb7
local_nptr for locally defined struct
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
885
diff
changeset
|
149 printf("#0148:%d %d\n", p.x, p.y); |
820
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
150 } |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
151 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
152 INLINE void |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
153 main6() |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
154 { |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
155 int j = 0; |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
156 P[j].x = Q[j].x = 10; |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
157 P[j].y = Q[j].y = -7; |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
158 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
159 l(P[j],Q[j]); |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
160 } |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
161 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
162 |
9598ecec0af5
rvalue, RSTRUCT, non parse mode
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
748
diff
changeset
|
163 |
574 | 164 INLINE void |
0 | 165 tmp() |
166 { | |
167 } | |
37 | 168 |
169 | |
870
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
170 INLINE void |
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
171 main7(struct aa a1) |
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
172 { |
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
173 struct aa b = main0(0xff); |
896
d712ee10feb7
local_nptr for locally defined struct
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
885
diff
changeset
|
174 printf("#0173:main7 b.a[55] %d\n",b.a[55]); |
870
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
175 } |
e3de6b70abe9
struct initialization by function
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
820
diff
changeset
|
176 |