Commit 220a38ab by James E Wilson Committed by Jim Wilson

encode-2.m (main): New local string.

	* objc.dg/encode-2.m (main): New local string.  Set depending on
	sizeof long.  Use in sscanf call.
	* objc.dg/encode-3.m (main): New local string.  Set depending on
	sizeof long.  Use in scan_initial call.

From-SVN: r76783
parent faceece3
2004-01-27 James E Wilson <wilson@specifixinc.com>
* objc.dg/encode-2.m (main): New local string. Set depending on
sizeof long. Use in sscanf call.
* objc.dg/encode-3.m (main): New local string. Set depending on
sizeof long. Use in scan_initial call.
2004-01-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2004-01-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* objc.dg/call-super-2.m: Make LP64-safe. * objc.dg/call-super-2.m: Make LP64-safe.
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
- The k-th parameter (k > 1) has offset equal to the - The k-th parameter (k > 1) has offset equal to the
sum of: sum of:
- the offset of the k-1-st paramter - the offset of the k-1-st paramter
- the int-promoted size of the k-1-st parameter. - the (void *)-promoted size of the k-1-st parameter.
Note that the encoded offsets need not correspond Note that the encoded offsets need not correspond
to the actual placement of parameters (relative to 'self') to the actual placement of parameters (relative to 'self')
...@@ -78,6 +78,7 @@ int main(void) { ...@@ -78,6 +78,7 @@ int main(void) {
Foo *foo = [[Foo alloc] init]; Foo *foo = [[Foo alloc] init];
Class fooClass = OBJC_GETCLASS("Foo"); Class fooClass = OBJC_GETCLASS("Foo");
METHOD meth; METHOD meth;
const char *string;
meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(setRect:withInt:)); meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(setRect:withInt:));
offs2 = 9999; offs2 = 9999;
...@@ -88,8 +89,12 @@ int main(void) { ...@@ -88,8 +89,12 @@ int main(void) {
meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(char:float:double:long:)); meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(char:float:double:long:));
offs2 = 9999; offs2 = 9999;
sscanf(meth->method_types, "v%u@%u:%uc%uf%ud%ul%u", &offs1, &offs2, &offs3, if (sizeof (long) == 8)
&offs4, &offs5, &offs6, &offs7); string = "v%u@%u:%uc%uf%ud%uq%u";
else
string = "v%u@%u:%uc%uf%ud%ul%u";
sscanf(meth->method_types, string, &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6, &offs7);
CHECK_IF(!offs2); CHECK_IF(!offs2);
[foo char:'c' float:2.3 double:3.5 long:2345L]; [foo char:'c' float:2.3 double:3.5 long:2345L];
......
...@@ -46,8 +46,14 @@ static void scan_initial(const char *pattern) { ...@@ -46,8 +46,14 @@ static void scan_initial(const char *pattern) {
} }
int main(void) { int main(void) {
const char *string;
meth = [proto descriptionForInstanceMethod: @selector(char:float:double:unsigned:short:long:)]; meth = [proto descriptionForInstanceMethod: @selector(char:float:double:unsigned:short:long:)];
scan_initial("v%u@%u:%uc%uf%ud%uI%us%ul%u"); if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uI%us%uq%u";
else
string = "v%u@%u:%uc%uf%ud%uI%us%ul%u";
scan_initial(string);
CHECK_IF(offs3 == offs2 + sizeof(int) && offs4 == offs3 + sizeof(float)); CHECK_IF(offs3 == offs2 + sizeof(int) && offs4 == offs3 + sizeof(float));
CHECK_IF(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned)); CHECK_IF(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned));
CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long)); CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment