Use objc_allocateClassPair for intrinsics.objc_register_class

This commit is contained in:
gingerBill
2022-02-14 18:32:10 +00:00
parent 03aec70287
commit 32c7e81745
3 changed files with 7 additions and 3 deletions

View File

@@ -12,6 +12,7 @@ objc_SEL :: ^intrinsics.objc_selector
foreign Foundation {
objc_lookUpClass :: proc "c" (name: cstring) -> objc_Class ---
sel_registerName :: proc "c" (name: cstring) -> objc_SEL ---
objc_allocateClassPair :: proc "c" (superclass: objc_Class, name: cstring, extraBytes: uint) ---
objc_msgSend :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) ---
objc_msgSend_fpret :: proc "c" (self: objc_id, op: objc_SEL, #c_vararg args: ..any) -> f64 ---

View File

@@ -225,6 +225,7 @@ void add_objc_proc_type(CheckerContext *c, Ast *call, Type *return_type, Slice<T
add_package_dependency(c, "runtime", "objc_lookUpClass");
add_package_dependency(c, "runtime", "sel_registerName");
add_package_dependency(c, "runtime", "objc_allocateClassPair");
add_package_dependency(c, "runtime", "objc_msgSend");
add_package_dependency(c, "runtime", "objc_msgSend_fpret");

View File

@@ -1908,9 +1908,11 @@ lbValue lb_handle_objc_register_class(lbProcedure *p, Ast *expr) {
String name = tav.value.value_string;
lbAddr dst = lb_handle_objc_find_or_register_class(p, name);
auto args = array_make<lbValue>(permanent_allocator(), 1);
args[0] = lb_const_value(m, t_cstring, exact_value_string(name));
lbValue ptr = lb_emit_runtime_call(p, "objc_lookUpClass", args);
auto args = array_make<lbValue>(permanent_allocator(), 3);
args[0] = lb_const_nil(m, t_objc_Class);
args[1] = lb_const_nil(m, t_objc_Class);
args[2] = lb_const_int(m, t_uint, 0);
lbValue ptr = lb_emit_runtime_call(p, "objc_allocateClassPair", args);
lb_addr_store(p, dst, ptr);
return lb_addr_load(p, dst);