/
main.macosx.clay
52 lines (38 loc) · 1.5 KB
/
main.macosx.clay
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import printer.(println);
import cocoa.objc.runtime.*;
import data.strings.*;
NSString(string) {
var class = objc_getClass(cstring("NSString"));
var sel_stringWithUTF8String_ = sel_registerName(cstring("stringWithUTF8String:"));
return objc_msgSend(Id(class), sel_stringWithUTF8String_, cstring(string));
}
NSStringWithFormat(format, ..args) {
var class = objc_getClass(cstring("NSString"));
var sel_stringWithFormat_ = sel_registerName(cstring("stringWithFormat:"));
return objc_msgSend(Id(class), sel_stringWithFormat_, format, ..args);
}
UTF8String(nsstring) {
var sel_UTF8String = sel_registerName(cstring("UTF8String"));
return Pointer[CChar](objc_msgSend(nsstring, sel_UTF8String));
}
NSNumber(n: Int) {
var class = objc_getClass(cstring("NSNumber"));
var sel_numberWithInt_ = sel_registerName(cstring("numberWithInt:"));
return objc_msgSend(Id(class), sel_numberWithInt_, n);
}
record AutoreleasePool (pool: Id);
overload AutoreleasePool() --> pool: AutoreleasePool {
var class = objc_getClass(cstring("NSAutoreleasePool"));
var sel_new = sel_registerName(cstring("new"));
pool.pool <-- objc_msgSend(Id(class), sel_new);
}
overload destroy(pool: AutoreleasePool) {
var sel_release = sel_registerName(cstring("release"));
objc_msgSend(pool.pool, sel_release);
}
main() {
var pool = AutoreleasePool();
var format = NSString("%@ didn't start the fire");
var n = NSNumber(451);
println(CStringRef(UTF8String(NSStringWithFormat(format, n))));
}