+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>
* objc.dg/call-super-2.m: Make LP64-safe.
- The k-th parameter (k > 1) has offset equal to the
sum of:
- 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
to the actual placement of parameters (relative to 'self')
Foo *foo = [[Foo alloc] init];
Class fooClass = OBJC_GETCLASS("Foo");
METHOD meth;
+ const char *string;
meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(setRect:withInt:));
offs2 = 9999;
meth = CLASS_GETINSTANCEMETHOD(fooClass, @selector(char:float:double:long:));
offs2 = 9999;
- sscanf(meth->method_types, "v%u@%u:%uc%uf%ud%ul%u", &offs1, &offs2, &offs3,
- &offs4, &offs5, &offs6, &offs7);
+ if (sizeof (long) == 8)
+ 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);
[foo char:'c' float:2.3 double:3.5 long:2345L];
}
int main(void) {
+ const char *string;
+
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(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned));
CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long));