blob: ca0eb94933870e7bc161cbeb929915012dab8dc2 [file] [log] [blame]
Daniel Dunbard7d5f022009-03-24 02:24:46 +00001// RUN: clang-cc -fnext-runtime --emit-llvm -o %t %s
Daniel Dunbarb21d6af2008-09-04 04:36:23 +00002
3#include <stdio.h>
4
5@interface Root
6@end
7
8typedef struct {
9 int x, y, z[10];
10} MyPoint;
11typedef struct {
12 float width, height;
13} MySize;
14
15@interface A : Root
16+(void) printThisInt: (int) arg0 andThatFloat: (float) arg1 andADouble: (double) arg2 andAPoint: (MyPoint) arg3;
17+(float) returnAFloat;
18+(double) returnADouble;
19+(MyPoint) returnAPoint;
20+(void) printThisSize: (MySize) arg0;
21+(MySize) returnASize;
22
23-(void) printThisInt: (int) arg0 andThatFloat: (float) arg1 andADouble: (double) arg2 andAPoint: (MyPoint) arg3;
24-(float) returnAFloat;
25-(double) returnADouble;
26-(MyPoint) returnAPoint;
27-(void) printThisSize: (MySize) arg0;
28-(MySize) returnASize;
29@end
30@interface B : A
31@end
32
33@implementation A
34+(void) printThisInt: (int) arg0 andThatFloat: (float) arg1 andADouble: (double) arg2 andAPoint: (MyPoint) arg3 {
35 printf("(CLASS) theInt: %d, theFloat: %f, theDouble: %f, thePoint: { %d, %d }\n",
36 arg0, arg1, arg2, arg3.x, arg3.y);
37}
38+(float) returnAFloat {
39 return 15.;
40}
41+(double) returnADouble {
42 return 25.;
43}
44+(MyPoint) returnAPoint {
45 MyPoint x = { 35, 45 };
46 return x;
47}
48+(void) printThisSize: (MySize) arg0 {
49 printf("(CLASS) theSize: { %f, %f }\n",
50 arg0.width, arg0.height);
51}
52+(MySize) returnASize {
53 MySize x = { 32, 44 };
54 return x;
55}
56
57-(void) printThisInt: (int) arg0 andThatFloat: (float) arg1 andADouble: (double) arg2 andAPoint: (MyPoint) arg3 {
58 printf("theInt: %d, theFloat: %f, theDouble: %f, thePoint: { %d, %d }\n",
59 arg0, arg1, arg2, arg3.x, arg3.y);
60}
61-(float) returnAFloat {
62 return 10.;
63}
64-(double) returnADouble {
65 return 20.;
66}
67-(MyPoint) returnAPoint {
68 MyPoint x = { 30, 40 };
69 return x;
70}
71-(void) printThisSize: (MySize) arg0 {
72 printf("theSize: { %f, %f }\n",
73 arg0.width, arg0.height);
74}
75-(MySize) returnASize {
76 MySize x = { 22, 34 };
77 return x;
78}
79@end
80
81@implementation B
82+(void) printThisInt: (int) arg0 andThatFloat: (float) arg1 andADouble: (double) arg2 andAPoint: (MyPoint) arg3 {
83 arg3.x *= 2;
84 arg3.y *= 2;
85 [ super printThisInt: arg0*2 andThatFloat: arg1*2 andADouble: arg2*2 andAPoint: arg3 ];
86}
87+(void) printThisSize: (MySize) arg0 {
88 arg0.width *= 2;
89 arg0.height *= 2;
90 [ super printThisSize: arg0 ];
91}
92+(float) returnAFloat {
93 return [ super returnAFloat ]*2;
94}
95+(double) returnADouble {
96 return [ super returnADouble ]*2;
97}
98+(MyPoint) returnAPoint {
99 MyPoint x = [ super returnAPoint ];
100 x.x *= 2;
101 x.y *= 2;
102 return x;
103}
104+(MySize) returnASize {
105 MySize x = [ super returnASize ];
106 x.width *= 2;
107 x.height *= 2;
108 return x;
109}
110
111-(void) printThisInt: (int) arg0 andThatFloat: (float) arg1 andADouble: (double) arg2 andAPoint: (MyPoint) arg3 {
112 arg3.x *= 2;
113 arg3.y *= 2;
114 [ super printThisInt: arg0*2 andThatFloat: arg1*2 andADouble: arg2*2 andAPoint: arg3 ];
115}
116-(void) printThisSize: (MySize) arg0 {
117 arg0.width *= 2;
118 arg0.height *= 2;
119 [ super printThisSize: arg0 ];
120}
121-(float) returnAFloat {
122 return [ super returnAFloat ]*2;
123}
124-(double) returnADouble {
125 return [ super returnADouble ]*2;
126}
127-(MyPoint) returnAPoint {
128 MyPoint x = [ super returnAPoint ];
129 x.x *= 2;
130 x.y *= 2;
131 return x;
132}
133-(MySize) returnASize {
134 MySize x = [ super returnASize ];
135 x.width *= 2;
136 x.height *= 2;
137 return x;
138}
139@end