Пример #1
0
PmReturn_t
obj_print(pPmObj_t pobj, uint8_t is_expr_repr, uint8_t is_nested)
{
    PmReturn_t retval = PM_RET_OK;

    C_ASSERT(pobj != C_NULL);

    /* Something gets printed unless it's None in an unnested expression */
    if (!((OBJ_GET_TYPE(pobj) == OBJ_TYPE_NON) && is_expr_repr && !is_nested))
    {
        gVmGlobal.somethingPrinted = C_TRUE;
    }

    switch (OBJ_GET_TYPE(pobj))
    {
        case OBJ_TYPE_NON:
            if (!is_expr_repr || is_nested)
            {
                plat_putByte('N');
                plat_putByte('o');
                plat_putByte('n');
                retval = plat_putByte('e');
            }
            break;
        case OBJ_TYPE_INT:
            retval = int_print(pobj);
            break;
#ifdef HAVE_FLOAT
        case OBJ_TYPE_FLT:
            retval = float_print(pobj);
            break;
#endif /* HAVE_FLOAT */
        case OBJ_TYPE_STR:
            retval = string_print(pobj, (is_expr_repr || is_nested));
            break;
        case OBJ_TYPE_TUP:
            retval = tuple_print(pobj);
            break;
        case OBJ_TYPE_LST:
            retval = list_print(pobj);
            break;
        case OBJ_TYPE_DIC:
            retval = dict_print(pobj);
            break;
        case OBJ_TYPE_BOOL:
            if (((pPmBoolean_t) pobj)->val == C_TRUE)
            {
                plat_putByte('T');
                plat_putByte('r');
                plat_putByte('u');
            }
            else
            {
                plat_putByte('F');
                plat_putByte('a');
                plat_putByte('l');
                plat_putByte('s');
            }
            retval = plat_putByte('e');
            break;

        case OBJ_TYPE_CLI:
#ifdef HAVE_BYTEARRAY
            {
                pPmObj_t pobj2;

                retval = dict_getItem((pPmObj_t)((pPmInstance_t)pobj)->cli_attrs,
                                      PM_NONE,
                                      (pPmObj_t *)&pobj2);
                if ((retval == PM_RET_OK)
                    && (OBJ_GET_TYPE(pobj2) == OBJ_TYPE_BYA))
                {
                    retval = bytearray_print(pobj2);
                    break;
                }
            }
#endif /* HAVE_BYTEARRAY */

        case OBJ_TYPE_COB:
        case OBJ_TYPE_MOD:
        case OBJ_TYPE_CLO:
        case OBJ_TYPE_FXN:
        case OBJ_TYPE_CIM:
        case OBJ_TYPE_NIM:
        case OBJ_TYPE_NOB:
        case OBJ_TYPE_THR:
        case OBJ_TYPE_CIO:
        case OBJ_TYPE_MTH:
        case OBJ_TYPE_SQI:
            plat_putByte('<');
            plat_putByte('o');
            plat_putByte('b');
            plat_putByte('j');
            plat_putByte(' ');
            plat_putByte('t');
            plat_putByte('y');
            plat_putByte('p');
            plat_putByte('e');
            plat_putByte(' ');
            plat_putByte('0');
            plat_putByte('x');
            int_printHexByte(OBJ_GET_TYPE(pobj));
            plat_putByte(' ');
            plat_putByte('@');
            plat_putByte(' ');
            plat_putByte('0');
            plat_putByte('x');
            _int_printHex((intptr_t)pobj);
            retval = plat_putByte('>');
            break;

        default:
            /* Otherwise raise a TypeError */
            PM_RAISE(retval, PM_RET_EX_TYPE);
            break;
    }
    return retval;
}
Пример #2
0
PmReturn_t
obj_print(pPmObj_t pobj, uint8_t is_expr_repr, uint8_t is_nested)
{
    PmReturn_t retval = PM_RET_OK;

    C_ASSERT(pobj != C_NULL);

    /* Something gets printed unless it's None in an unnested expression */
    if (!((OBJ_GET_TYPE(pobj) == OBJ_TYPE_NON) && is_expr_repr && !is_nested))
    {
        gVmGlobal.somethingPrinted = C_TRUE;
    }

    switch (OBJ_GET_TYPE(pobj))
    {
    case OBJ_TYPE_NON:
        if (!is_expr_repr || is_nested)
        {
            sli_puts((uint8_t *)"None");
        }
        break;
    case OBJ_TYPE_INT:
        retval = int_print(pobj);
        break;
#ifdef HAVE_FLOAT
    case OBJ_TYPE_FLT:
        retval = float_print(pobj);
        break;
#endif /* HAVE_FLOAT */
    case OBJ_TYPE_STR:
        retval = string_print(pobj, (is_expr_repr || is_nested));
        break;
    case OBJ_TYPE_TUP:
        retval = tuple_print(pobj);
        break;
    case OBJ_TYPE_LST:
        retval = list_print(pobj);
        break;
    case OBJ_TYPE_DIC:
        retval = dict_print(pobj);
        break;
    case OBJ_TYPE_BOOL:
        sli_puts(
            (((pPmBoolean_t) pobj)->val == C_TRUE)
            ? (uint8_t *)"True"
            : (uint8_t *)"False");
        break;

    case OBJ_TYPE_CLI:
#ifdef HAVE_BYTEARRAY
    {
        pPmObj_t pobj2;

        retval = dict_getItem((pPmObj_t)((pPmInstance_t)pobj)->cli_attrs,
                              PM_NONE,
                              (pPmObj_t *)&pobj2);
        if ((retval == PM_RET_OK)
                && (OBJ_GET_TYPE(pobj2) == OBJ_TYPE_BYA))
        {
            retval = bytearray_print(pobj2);
            break;
        }
    }
#endif /* HAVE_BYTEARRAY */

    case OBJ_TYPE_COB:
    case OBJ_TYPE_MOD:
    case OBJ_TYPE_CLO:
    case OBJ_TYPE_FXN:
    case OBJ_TYPE_CIM:
    case OBJ_TYPE_NIM:
    case OBJ_TYPE_NOB:
    case OBJ_TYPE_THR:
    case OBJ_TYPE_CIO:
    case OBJ_TYPE_MTH:
    case OBJ_TYPE_SQI:
    {
        uint8_t buf[17];
        sli_puts((uint8_t *)"<obj type 0x");
        sli_btoa16(OBJ_GET_TYPE(pobj), buf, sizeof(buf), C_TRUE);
        sli_puts(buf);
        sli_puts((uint8_t *)" @ 0x");
        sli_ptoa16((intptr_t)pobj, buf, sizeof(buf), C_TRUE);
        sli_puts(buf);
        retval = plat_putByte('>');
        break;
    }

    default:
        /* Otherwise raise a TypeError */
        PM_RAISE(retval, PM_RET_EX_TYPE);
        break;
    }
    return retval;
}