Skip to content

Commit fc71016

Browse files
committed
py/obj: Clean up and add comments describing mp_obj_type_t struct.
1 parent 81d302b commit fc71016

File tree

1 file changed

+32
-23
lines changed

1 file changed

+32
-23
lines changed

py/obj.h

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -470,16 +470,27 @@ typedef struct _mp_stream_p_t {
470470
} mp_stream_p_t;
471471

472472
struct _mp_obj_type_t {
473+
// A type is an object so must start with this entry, which points to mp_type_type.
473474
mp_obj_base_t base;
475+
476+
// The name of this type.
474477
qstr name;
478+
479+
// Corresponds to __repr__ and __str__ special methods.
475480
mp_print_fun_t print;
476-
mp_make_new_fun_t make_new; // to make an instance of the type
477481

482+
// Corresponds to __new__ and __init__ special methods, to make an instance of the type.
483+
mp_make_new_fun_t make_new;
484+
485+
// Corresponds to __call__ special method, ie T(...).
478486
mp_call_fun_t call;
479-
mp_unary_op_fun_t unary_op; // can return MP_OBJ_NULL if op not supported
480-
mp_binary_op_fun_t binary_op; // can return MP_OBJ_NULL if op not supported
481487

482-
// implements load, store and delete attribute
488+
// Implements unary and binary operations.
489+
// Can return MP_OBJ_NULL if the operation is not supported.
490+
mp_unary_op_fun_t unary_op;
491+
mp_binary_op_fun_t binary_op;
492+
493+
// Implements load, store and delete attribute.
483494
//
484495
// dest[0] = MP_OBJ_NULL means load
485496
// return: for fail, do nothing
@@ -492,35 +503,33 @@ struct _mp_obj_type_t {
492503
// for success set dest[0] = MP_OBJ_NULL
493504
mp_attr_fun_t attr;
494505

495-
mp_subscr_fun_t subscr; // implements load, store, delete subscripting
496-
// value=MP_OBJ_NULL means delete, value=MP_OBJ_SENTINEL means load, else store
497-
// can return MP_OBJ_NULL if op not supported
506+
// Implements load, store and delete subscripting:
507+
// - value = MP_OBJ_SENTINEL means load
508+
// - value = MP_OBJ_NULL means delete
509+
// - all other values mean store the value
510+
// Can return MP_OBJ_NULL if operation not supported.
511+
mp_subscr_fun_t subscr;
498512

499-
// corresponds to __iter__ special method
500-
// can use given mp_obj_iter_buf_t to store iterator
501-
// otherwise can return a pointer to an object on the heap
513+
// Corresponds to __iter__ special method.
514+
// Can use the given mp_obj_iter_buf_t to store iterator object,
515+
// otherwise can return a pointer to an object on the heap.
502516
mp_getiter_fun_t getiter;
503517

504-
mp_fun_1_t iternext; // may return MP_OBJ_STOP_ITERATION as an optimisation instead of raising StopIteration() (with no args)
518+
// Corresponds to __next__ special method. May return MP_OBJ_STOP_ITERATION
519+
// as an optimisation instead of raising StopIteration() with no args.
520+
mp_fun_1_t iternext;
505521

522+
// Implements the buffer protocol if supported by this type.
506523
mp_buffer_p_t buffer_p;
524+
507525
// One of disjoint protocols (interfaces), like mp_stream_p_t, etc.
508526
const void *protocol;
509527

510-
// these are for dynamically created types (classes)
528+
// A tuple containing all the base types of this type.
511529
struct _mp_obj_tuple_t *bases_tuple;
512-
struct _mp_obj_dict_t *locals_dict;
513-
514-
/*
515-
What we might need to add here:
516530

517-
len str tuple list map
518-
abs float complex
519-
hash bool int none str
520-
equal int str
521-
522-
unpack seq list tuple
523-
*/
531+
// A dict mapping qstrs to objects local methods/constants/etc.
532+
struct _mp_obj_dict_t *locals_dict;
524533
};
525534

526535
// Constant types, globally accessible

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy