forked from M-Labs/nac3
call nac3_rc_incr(64) instead
This commit is contained in:
@@ -8,13 +8,13 @@ extern "C" void nac3_free(void *ptr);
|
||||
|
||||
template<typename SizeT>
|
||||
void __nac3_rc_incr_impl(void *obj) {
|
||||
SizeT *p = (SizeT *) ptr;
|
||||
SizeT *p = (SizeT *) obj;
|
||||
*(p - 1) += 1;
|
||||
}
|
||||
|
||||
template<typename SizeT>
|
||||
void __nac3_rc_decr_impl(void *obj) {
|
||||
SizeT *p = (SizeT *) ptr;
|
||||
SizeT *p = (SizeT *) obj;
|
||||
*(p - 1) -= 1;
|
||||
|
||||
if (!*(p - 1))
|
||||
@@ -23,19 +23,21 @@ void __nac3_rc_decr_impl(void *obj) {
|
||||
|
||||
extern "C" {
|
||||
|
||||
#define DEF_nac3_rc_incr_(T) \
|
||||
void __nac3_rc_incr_##T(void *ptr) { \
|
||||
return __nac3_rc_incr_impl<T>(ptr); \
|
||||
}
|
||||
#define DEF_nac3_rc_decr_(T) \
|
||||
void __nac3_rc_decr_##T(void *ptr) { \
|
||||
return __nac3_rc_incr_impl<T>(ptr); \
|
||||
}
|
||||
void nac3_rc_decr(int8_t *ptr) {
|
||||
__nac3_rc_decr_impl<uint32_t>(ptr);
|
||||
}
|
||||
|
||||
DEF_nac3_rc_decr_(uint32_t);
|
||||
DEF_nac3_rc_decr_(uint64_t);
|
||||
DEF_nac3_rc_incr_(uint32_t);
|
||||
DEF_nac3_rc_incr_(uint64_t);
|
||||
void nac3_rc_decr64(int8_t *ptr) {
|
||||
__nac3_rc_decr_impl<uint64_t>(ptr);
|
||||
}
|
||||
|
||||
void nac3_rc_incr(int8_t *ptr) {
|
||||
__nac3_rc_incr_impl<uint32_t>(ptr);
|
||||
}
|
||||
|
||||
void nac3_rc_incr64(int8_t *ptr) {
|
||||
__nac3_rc_incr_impl<uint64_t>(ptr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -45,12 +45,10 @@ use super::{
|
||||
},
|
||||
};
|
||||
use crate::{
|
||||
codegen::llvm_fns::FunctionDecl,
|
||||
codegen::{irrt::get_usize_dependent_function_name, llvm_fns::FunctionDecl},
|
||||
symbol_resolver::{SymbolValue, ValueEnum},
|
||||
toplevel::{
|
||||
DefinitionId, FunAttribute, TopLevelDef,
|
||||
helper::{PrimDef, arraylike_flatten_element_type, extract_ndims},
|
||||
numpy::unpack_ndarray_var_tys,
|
||||
helper::{arraylike_flatten_element_type, extract_ndims, PrimDef}, numpy::unpack_ndarray_var_tys, DefinitionId, FunAttribute, TopLevelDef
|
||||
},
|
||||
typecheck::{
|
||||
magic_methods::{Binop, BinopVariant, HasOpInfo},
|
||||
@@ -618,9 +616,9 @@ pub fn gen_constructor<'ctx, 'a, G: CodeGenerator>(
|
||||
.build_bit_cast(zelf_intptr, zelf_ty.ptr_type(AddressSpace::default()), "malloc")
|
||||
.unwrap();
|
||||
|
||||
// TODO(HTGAzureX1212): size_t
|
||||
let void = ctx.ctx.void_type();
|
||||
call_extern!(ctx: void _ = "nac3_rc_incr"(zelf_intptr));
|
||||
let name = get_usize_dependent_function_name(ctx, "nac3_rc_incr");
|
||||
call_extern!(ctx: void _ = name(zelf_intptr));
|
||||
|
||||
// call `__init__` if there is one
|
||||
if let Some(fun_id) = fun_id {
|
||||
|
||||
Reference in New Issue
Block a user