Go to the source code of this file.
Classes | |
struct | PmObj_s |
struct | PmBoolean_s |
Defines | |
#define | OD_MARK_SHIFT 14 |
#define | OD_FREE_SHIFT 15 |
#define | OD_MARK_BIT (uint16_t)(1 << OD_MARK_SHIFT) |
#define | OD_FREE_BIT (uint16_t)(1 << OD_FREE_SHIFT) |
#define | OD_SIZE_MASK (uint16_t)(0x01FF) |
#define | OD_TYPE_MASK (uint16_t)(0x3E00) |
#define | OD_TYPE_SHIFT 9 |
#define | HD_SIZE_MASK (uint16_t)(0x3FFF) |
#define | OBJ_GET_FREE(pobj) ((((pPmObj_t)pobj)->od >> OD_FREE_SHIFT) & (uint8_t)1) |
#define | OBJ_SET_FREE(pobj, free) |
#define | OBJ_GET_SIZE(pobj) |
#define | OBJ_SET_SIZE(pobj, size) |
#define | OBJ_GET_TYPE(pobj) (((((pPmObj_t)pobj)->od) & OD_TYPE_MASK) >> OD_TYPE_SHIFT) |
#define | OBJ_SET_TYPE(pobj, type) |
Typedefs | |
typedef enum PmType_e | PmType_t |
typedef enum PmType_e * | pPmType_t |
typedef uint16_t | PmObjDesc_t |
typedef uint16_t * | pPmObjDesc_t |
typedef struct PmObj_s | PmObj_t |
typedef struct PmObj_s * | pPmObj_t |
typedef struct PmBoolean_s | PmBoolean_t |
typedef struct PmBoolean_s * | pPmBoolean_t |
Enumerations | |
enum | PmType_e { OBJ_TYPE_HASHABLE_MIN = 0x00, OBJ_TYPE_NON = 0x00, OBJ_TYPE_INT = 0x01, OBJ_TYPE_FLT = 0x02, OBJ_TYPE_STR = 0x03, OBJ_TYPE_TUP = 0x04, OBJ_TYPE_COB = 0x05, OBJ_TYPE_MOD = 0x06, OBJ_TYPE_CLO = 0x07, OBJ_TYPE_FXN = 0x08, OBJ_TYPE_CLI = 0x09, OBJ_TYPE_CIM = 0x0A, OBJ_TYPE_NIM = 0x0B, OBJ_TYPE_NOB = 0x0C, OBJ_TYPE_THR = 0x0D, OBJ_TYPE_BOOL = 0x0F, OBJ_TYPE_CIO = 0x10, OBJ_TYPE_MTH = 0x11, OBJ_TYPE_HASHABLE_MAX = 0x11, OBJ_TYPE_LST = 0x12, OBJ_TYPE_DIC = 0x13, OBJ_TYPE_ACCESSIBLE_MAX = 0x18, OBJ_TYPE_FRM = 0x19, OBJ_TYPE_BLK = 0x1A, OBJ_TYPE_SEG = 0x1B, OBJ_TYPE_SGL = 0x1C, OBJ_TYPE_SQI = 0x1D, OBJ_TYPE_NFM = 0x1E } |
Functions | |
PmReturn_t | obj_loadFromImg (PmMemSpace_t memspace, uint8_t const **paddr, pPmObj_t *r_pobj) |
PmReturn_t | obj_loadFromImgObj (pPmObj_t pimg, pPmObj_t *r_pobj) |
int8_t | obj_isFalse (pPmObj_t pobj) |
PmReturn_t | obj_isIn (pPmObj_t pobj, pPmObj_t pitem) |
int8_t | obj_compare (pPmObj_t pobj1, pPmObj_t pobj2) |
PmReturn_t | obj_print (pPmObj_t pobj, uint8_t is_expr_repr, uint8_t is_nested) |
Object type header.
Definition in file obj.h.
#define HD_SIZE_MASK (uint16_t)(0x3FFF) |
#define OBJ_GET_SIZE | ( | pobj | ) |
Value:
((((pPmObj_t)pobj)->od & OD_FREE_BIT) \ ? ((((pPmObj_t)pobj)->od & HD_SIZE_MASK) << 2) \ : ((((pPmObj_t)pobj)->od & OD_SIZE_MASK) << 2))
#define OBJ_GET_TYPE | ( | pobj | ) | (((((pPmObj_t)pobj)->od) & OD_TYPE_MASK) >> OD_TYPE_SHIFT) |
#define OBJ_SET_FREE | ( | pobj, | |||
free | ) |
Value:
Sets the free bit of the given object to the given value. Setting the free bit means that the object will use the heap descriptor structure instead of the object descriptor structure.#define OBJ_SET_SIZE | ( | pobj, | |||
size | ) |
Value:
do \ { \ if (((pPmObj_t)pobj)->od & OD_FREE_BIT) \ { \ ((pPmObj_t)pobj)->od &= ~HD_SIZE_MASK; \ ((pPmObj_t)pobj)->od |= (((size) >> 2) & HD_SIZE_MASK); \ } \ else \ { \ ((pPmObj_t)pobj)->od &= ~OD_SIZE_MASK; \ ((pPmObj_t)pobj)->od |= (((size) >> 2) & OD_SIZE_MASK); \ } \ } \ while (0)
#define OBJ_SET_TYPE | ( | pobj, | |||
type | ) |
typedef struct PmBoolean_s PmBoolean_t |
Boolean object
typedef uint16_t PmObjDesc_t |
Object Descriptor
All active PyMite "objects" must have this at the top of their struct. (CodeObj, Frame, Dict, List, Tuple, etc.).
The following is a diagram of the object descriptor:
* MSb LSb * 7 6 5 4 3 2 1 0 * pchunk-> +-+-+-+-+-+-+-+-+ S := Size of the chunk (2 LSbs dropped) * | S[9:2] | F := Free bit * +-+-+---------+-+ M := GC Mark bit * |F|M| T |S| T := Object type (PyMite specific) * +-+-+---------+-+ * | object data | * ... ... * | end data | Theoretical min size == 2 * +---------------+ Effective min size == 8 * (due to pmHeapDesc_t) *
Object type enum
These values go in the od_type fields of the obj descriptor. Be sure these values correspond to those in the image creator tool. The hashable types are grouped together for convenience.
WARNING: od_type must be at most 5 bits! (must be < 0x20)
enum PmType_e |
Object type enum
These values go in the od_type fields of the obj descriptor. Be sure these values correspond to those in the image creator tool. The hashable types are grouped together for convenience.
WARNING: od_type must be at most 5 bits! (must be < 0x20)
PmReturn_t obj_isIn | ( | pPmObj_t | pobj, | |
pPmObj_t | pitem | |||
) |
PmReturn_t obj_loadFromImg | ( | PmMemSpace_t | memspace, | |
uint8_t const ** | paddr, | |||
pPmObj_t * | r_pobj | |||
) |
Loads an object from an image in memory. Return pointer to object. Leave add pointing one byte past end of obj.
The following lists the simple object types and their image structures: -None: -type: int8_t - OBJ_TYPE_NON
-Int: -type: int8_t - OBJ_TYPE_INT -value: int32_t - signed integer value
-Float: -type: int8_t - OBJ_TYPE_FLOAT -value: float32_t - 32-bit floating point value
-Slice (is this allowed in img?): -type: int8_t - OBJ_TYPE_SLICE -index1: int16_t - first index. -index2: int16_t - second index.
memspace | memory space/type | |
paddr | ptr to ptr to obj return by reference: paddr pts to first byte after obj | |
r_pobj | Return arg, the loaded object. |
PmReturn_t obj_loadFromImgObj | ( | pPmObj_t | pimg, | |
pPmObj_t * | r_pobj | |||
) |
PmReturn_t obj_print | ( | pPmObj_t | pobj, | |
uint8_t | is_expr_repr, | |||
uint8_t | is_nested | |||
) |
Print an object, thereby using objects helpers.
pobj | Ptr to object for printing. | |
is_expr_repr | Influences the way None and strings are printed. If 0, None is printed, strings are printed. If 1, None is not printed and strings are printed surrounded with single quotes and unprintable characters are escaped. | |
is_nested | Influences the way None and strings are printed. If 1, None will be printed and strings will be surrounded with single quotes and escaped. This argument overrides the is_expr_repr argument. |