@@ -53,7 +53,7 @@ use crate::{
5353 types:: { array:: ArrayMetadata , TypeBuilder } ,
5454 utils:: {
5555 decode_error_message, generate_function_name, get_integer_layout, get_types_total_size,
56- libc_free , libc_malloc , BuiltinCosts ,
56+ BuiltinCosts ,
5757 } ,
5858 OptLevel ,
5959} ;
@@ -499,7 +499,12 @@ impl AotContractExecutor {
499499
500500 let data_ptr = match args. len ( ) {
501501 0 => std:: ptr:: null_mut ( ) ,
502- _ => unsafe { libc_malloc ( felt_layout. size ( ) * args. len ( ) ) . cast :: < u8 > ( ) } ,
502+ _ => unsafe {
503+ crate :: runtime:: cairo_native__arena_alloc (
504+ ( felt_layout. size ( ) * args. len ( ) ) as u64 ,
505+ felt_layout. align ( ) as u64 ,
506+ )
507+ } ,
503508 } ;
504509
505510 for ( idx, elem) in args. iter ( ) . enumerate ( ) {
@@ -513,14 +518,17 @@ impl AotContractExecutor {
513518 } ;
514519 }
515520
516- // Allocate metadata struct: { refcount: u32, max_len: u32, data_ptr: *mut () }
521+ // Allocate metadata struct: { max_len: u32, data_ptr: *mut () }
517522 let metadata_ptr = if data_ptr. is_null ( ) {
518523 ptr:: null_mut ( )
519524 } else {
520525 unsafe {
521- let metadata = libc_malloc ( size_of :: < ArrayMetadata > ( ) ) . cast :: < ArrayMetadata > ( ) ;
526+ let metadata = crate :: runtime:: cairo_native__arena_alloc (
527+ size_of :: < ArrayMetadata > ( ) as u64 ,
528+ align_of :: < ArrayMetadata > ( ) as u64 ,
529+ )
530+ . cast :: < ArrayMetadata > ( ) ;
522531 metadata. write ( ArrayMetadata {
523- refcount : 1 ,
524532 max_len : len_u32,
525533 data_ptr,
526534 } ) ;
@@ -679,15 +687,6 @@ impl AotContractExecutor {
679687
680688 array_value. push ( Felt :: from_bytes_le ( & data) ) ;
681689 }
682-
683- unsafe {
684- native_assert ! (
685- metadata. refcount == 1 ,
686- "return array should have a reference count of 1"
687- ) ;
688- libc_free ( data_ptr. cast ( ) ) ;
689- libc_free ( metadata_ptr. cast ( ) ) ;
690- }
691690 }
692691
693692 let error_msg = match tag {
0 commit comments