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 = 0x19, 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 marshallString) |
Object type header.
#define HD_SIZE_MASK (uint16_t)(0x3FFF) |
Heap descriptor size mask
#define OBJ_GET_FREE | ( | pobj | ) | ((((pPmObj_t)pobj)->od >> OD_FREE_SHIFT) & (uint8_t)1) |
Gets the free bit of the given object to the given value. If the object is marked free, it is not being used by the VM.
#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) |
Gets the type of the object This MUST NOT be called on objects that are free.
#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 | ) |
#define OD_MARK_SHIFT 14 |
Object descriptor field constants
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)
Macros are used to get and set field values. Using macros eliminates declaring bit fields which fails on some compilers.
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)
Compares two objects for equality.
pobj1 | Ptr to first object. | |
pobj2 | Ptr to second object. |
int8_t obj_isFalse | ( | pPmObj_t | pobj | ) |
Finds the boolean value of the given object.
pobj | Ptr to object to test. |
PmReturn_t obj_isIn | ( | pPmObj_t | pobj, | |
pPmObj_t | pitem | |||
) |
Returns the boolean true if the item is in the object
pobj | Ptr to container object | |
pitem | Ptr to item |
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 | |||
) |
Loads a code object from a code image object
pimg | Ptr to a code image object | |
r_pobj | Return arg, the loaded object |
PmReturn_t obj_print | ( | pPmObj_t | pobj, | |
uint8_t | marshallString | |||
) |
Print an object, thereby using objects helpers.
pobj | Ptr to object for printing. | |
marshallString | Only has influence on the way strings are printed. If 0, just output the string bytewise. Otherwise, surround with single quotes and escape unprintable characters. |