Expand PMF_FN_* macros.
[netbsd-mini2440.git] / regress / gnu / lib / libobjc / thread / thread.m
blob3610ffb2a78c21863b530840bc566989f3012be6
1 /* Written by David Wetzel */
3 #include <assert.h>
4 #include <stdio.h>
5 #include <unistd.h>
7 #include <objc/objc.h>
8 #include <objc/objc-api.h>
9 #include <objc/Object.h>
11 static const int debug = 0;
13 @interface MyClass : Object
15   char *myName;
17 -(void)setMyName:(const char *)n;
18 -(const char *)myName;
19 @end
21 @implementation MyClass
22 -(void)setMyName:(const char *)n
24     size_t len;
26     if (myName) {
27             if (strcmp(myName, n) != 0)
28                     return;
29             objc_free(myName);
30     }
31     len = strlen(n) + 1;
32     myName = objc_malloc(len);
33     strcpy(myName, n);
35 -(char *)myName
37     return myName;
39 -(void)start
41         if (debug)
42                 printf("detached thread started!\n");
44 @end
46 static void
47 becomeMultiThreaded(void)
49         if (debug)
50                 printf("becoming multithreaded!\n");
53 int
54 main(int argc, char *argv[])
56         id o = [MyClass new];
57         const char *c;
58         objc_thread_callback cb;
59         objc_thread_t rv;
61         [o setMyName:"thread"];
62         c = [o myName];
64         if (debug)
65                 printf("Testing: %s\n",c);
67         cb = objc_set_thread_callback(becomeMultiThreaded);
68         if (debug)
69                 printf("Old Callback: %p\n",cb);
71         rv = objc_thread_detach(@selector(start), o, nil);
72         if (debug)
73                 printf("detach value: %p\n",rv);
74         assert(rv != NULL);
76         return 0;