@@ -55,6 +55,9 @@ PikaObj* New_PikaStdData_Dict(Args* args);
5555PikaObj * New_PikaStdData_dict_keys (Args * args );
5656PikaObj * New_PikaStdData_List (Args * args );
5757PikaObj * New_PikaStdData_Tuple (Args * args );
58+ void PikaStdData_Tuple___init__ (PikaObj * self );
59+ void PikaStdData_List___init__ (PikaObj * self );
60+ void PikaStdData_List_append (PikaObj * self , Arg * arg );
5861void _mem_cache_deinit (void );
5962void _VMEvent_deinit (void );
6063void pikaGC_markObj (PikaGC * gc , PikaObj * self );
@@ -448,6 +451,44 @@ PikaObj* obj_newObjFromConstructor(PikaObj* context,
448451 return self ;
449452}
450453
454+ static PikaObj * _pika_new_obj_with_args (PikaObj * (* constructor )(),
455+ void (* init_func )(PikaObj * ),
456+ int num_args ,
457+ va_list args ) {
458+ PikaObj * obj = newNormalObj (constructor );
459+ init_func (obj );
460+
461+ for (int i = 0 ; i < num_args ; i ++ ) {
462+ Arg * arg = va_arg (args , Arg * );
463+ PikaStdData_List_append (obj , arg );
464+ arg_deinit (arg );
465+ }
466+
467+ return obj ;
468+ }
469+
470+ PikaObj * _pika_tuple_new (int num_args , ...) {
471+ va_list args ;
472+ va_start (args , num_args );
473+
474+ PikaObj * tuple = _pika_new_obj_with_args (
475+ New_PikaStdData_Tuple , PikaStdData_Tuple___init__ , num_args , args );
476+
477+ va_end (args );
478+ return tuple ;
479+ }
480+
481+ PikaObj * _pika_list_new (int num_args , ...) {
482+ va_list args ;
483+ va_start (args , num_args );
484+
485+ PikaObj * list = _pika_new_obj_with_args (
486+ New_PikaStdData_List , PikaStdData_List___init__ , num_args , args );
487+
488+ va_end (args );
489+ return list ;
490+ }
491+
451492Arg * _obj_getProp (PikaObj * obj , char * name ) {
452493 NativeProperty * prop = obj_getPtr (obj , "@p" );
453494 PikaObj * class_obj = NULL ;
0 commit comments