Classes | |
| class | object |
| class | Exception |
| class | AssertionError |
| class | Generator |
Functions | |
| def | abs |
| def | chr |
| def | dir |
| def | eval |
| def | filter |
| def | globals |
| def | id |
| def | len |
| def | locals |
| def | map |
| def | ord |
| def | pow |
| def | range |
| def | sum |
| def | type |
| def | Co |
| def | ismain |
Variables | |
| string | __name__ = "TBD" |
USAGE
The builtins are loaded by the interpreter. The user SHOULD NOT import this module directly.
| def __bi::chr | ( | n | ) |
__NATIVE__
pPmObj_t ps;
pPmObj_t pn;
int32_t n;
PmReturn_t retval;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Raise TypeError if arg is not an int */
pn = NATIVE_GET_LOCAL(0);
if (OBJ_GET_TYPE(pn) != OBJ_TYPE_INT)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Raise ValueError if arg is not int within range(256) */
n = ((pPmInt_t)pn)->val;
if ((n < 0) || (n > 255))
{
PM_RAISE(retval, PM_RET_EX_VAL);
return retval;
}
/* Create char string from integer value */
retval = string_newFromChar((uint8_t)n, &ps);
NATIVE_SET_TOS(ps);
return retval;
| def __bi::Co | ( | i | ) |
__NATIVE__
PmReturn_t retval;
pPmObj_t pimg;
pPmObj_t pco;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Raise ValueError if arg is not a string */
pimg = NATIVE_GET_LOCAL(0);
if (OBJ_GET_TYPE(pimg) != OBJ_TYPE_CIO)
{
PM_RAISE(retval, PM_RET_EX_VAL);
return retval;
}
/* Create a code object from the image */
retval = obj_loadFromImgObj(pimg, &pco);
PM_RETURN_IF_ERROR(retval);
/* Return the code object */
NATIVE_SET_TOS(pco);
return retval;
| def __bi::dir | ( | o | ) |
__NATIVE__
PmReturn_t retval = PM_RET_OK;
pPmObj_t po;
pPmObj_t pk;
pPmObj_t pl;
pSeglist_t psl;
int16_t i;
/* Use globals if no arg given */
if (NATIVE_GET_NUM_ARGS() == 0)
{
/* Get the globals dict */
po = (pPmObj_t)NATIVE_GET_PFRAME()->fo_globals;
}
/* Otherwise use the given arg */
else if (NATIVE_GET_NUM_ARGS() == 1)
{
po = NATIVE_GET_LOCAL(0);
/* If object is a function or module, use its attrs dict */
if ((OBJ_GET_TYPE(po) == OBJ_TYPE_FXN)
|| (OBJ_GET_TYPE(po) == OBJ_TYPE_MOD))
{
po = (pPmObj_t)((pPmFunc_t)po)->f_attrs;
}
#ifdef HAVE_CLASSES
else if (OBJ_GET_TYPE(po) == OBJ_TYPE_CLO)
{
po = (pPmObj_t)((pPmClass_t)po)->cl_attrs;
}
else if (OBJ_GET_TYPE(po) == OBJ_TYPE_CLI)
{
po = (pPmObj_t)((pPmInstance_t)po)->cli_attrs;
}
else if (OBJ_GET_TYPE(po) == OBJ_TYPE_MTH)
{
po = (pPmObj_t)((pPmMethod_t)po)->m_attrs;
}
#endif /* HAVE_CLASSES */
else
{
po = C_NULL;
}
}
/* Raise TypeError if wrong number of args */
else
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
if (po == C_NULL)
{
pl = PM_NONE;
}
else
{
/* Create new list */
retval = list_new(&pl);
PM_RETURN_IF_ERROR(retval);
/* Copy dict's keys to the list */
psl = ((pPmDict_t)po)->d_keys;
for (i = 0; i < ((pPmDict_t)po)->length; i++)
{
retval = seglist_getItem(psl, i, &pk);
PM_RETURN_IF_ERROR(retval);
retval = list_append(pl, pk);
PM_RETURN_IF_ERROR(retval);
}
}
NATIVE_SET_TOS(pl);
return retval;
| def __bi::eval | ( | co, | ||
| g, | ||||
| l | ||||
| ) |
__NATIVE__
PmReturn_t retval;
pPmObj_t pco;
pPmObj_t pfunc;
pPmObj_t pnewframe;
pPmObj_t pg = C_NULL;
pPmObj_t pl = C_NULL;
/* If wrong number of args, raise TypeError */
if ((NATIVE_GET_NUM_ARGS() == 0) || (NATIVE_GET_NUM_ARGS() > 3))
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Raise ValueError if first arg is not a Code Object */
pco = NATIVE_GET_LOCAL(0);
if (OBJ_GET_TYPE(pco) != OBJ_TYPE_COB)
{
PM_RAISE(retval, PM_RET_EX_VAL);
return retval;
}
/* If 2nd arg exists, raise ValueError if it is not a Dict */
if (NATIVE_GET_NUM_ARGS() >= 2)
{
pg = NATIVE_GET_LOCAL(1);
if (OBJ_GET_TYPE(pg) != OBJ_TYPE_DIC)
{
PM_RAISE(retval, PM_RET_EX_VAL);
return retval;
}
}
/* If no args are given, use the caller's globals for the function's */
else
{
pg = (pPmObj_t)NATIVE_GET_PFRAME()->fo_globals;
}
/* If 3rd arg exists, raise ValueError if it is not a Dict */
if (NATIVE_GET_NUM_ARGS() >= 3)
{
pl = NATIVE_GET_LOCAL(2);
if (OBJ_GET_TYPE(pl) != OBJ_TYPE_DIC)
{
PM_RAISE(retval, PM_RET_EX_VAL);
return retval;
}
}
/* Create func from code object */
retval = func_new(pco, pg, &pfunc);
PM_RETURN_IF_ERROR(retval);
/* Create frame from module object; globals is set to null */
retval = frame_new(pfunc, &pnewframe);
PM_RETURN_IF_ERROR(retval);
/* TODO: Reclaim pnewframe's attrs dict created in frame_new */
/*
* By default use calling frame's attrs as local namespace.
* This works for ipm because the interactive mode
* needs a locals namespace that persists across calls to eval()
*/
((pPmFrame_t)pnewframe)->fo_attrs = NATIVE_GET_PFRAME()->fo_attrs;
/* If 2nd arg exists, use it as the global namespace for the new func */
if (NATIVE_GET_NUM_ARGS() >= 2)
{
((pPmFrame_t)pnewframe)->fo_globals = (pPmDict_t)pg;
/* If only globals is given, locals defaults to it */
((pPmFrame_t)pnewframe)->fo_attrs = (pPmDict_t)pg;
}
/* If 3rd arg exists, use it as the local namespace for the new func */
if (NATIVE_GET_NUM_ARGS() >= 3)
{
((pPmFrame_t)pnewframe)->fo_attrs = (pPmDict_t)pl;
}
/*
* Set the fo_back frame so flow returns to eval()'s caller when completed.
* Set the frame pointer so the new frame is interpreted immediately
* after this function returns.
*/
((pPmFrame_t)pnewframe)->fo_back = NATIVE_GET_PFRAME();
NATIVE_GET_PFRAME() = (pPmFrame_t)pnewframe;
retval = PM_RET_FRAME_SWITCH;
return retval;
| def __bi::globals | ( | ) |
__NATIVE__
pPmObj_t pr = C_NULL;
PmReturn_t retval;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 0)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Return calling frame's globals dict on stack*/
pr = (pPmObj_t)NATIVE_GET_PFRAME()->fo_globals;
NATIVE_SET_TOS(pr);
return PM_RET_OK;
| def __bi::id | ( | o | ) |
__NATIVE__
PmReturn_t retval;
pPmObj_t pr = C_NULL;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Return object's address as an int on the stack */
retval = int_new((intptr_t)NATIVE_GET_LOCAL(0), &pr);
NATIVE_SET_TOS(pr);
return retval;
| def __bi::ismain | ( | ) |
__NATIVE__ NATIVE_SET_TOS((NATIVE_GET_PFRAME()->fo_isImport) ? PM_FALSE : PM_TRUE); return PM_RET_OK;
| def __bi::len | ( | s | ) |
__NATIVE__
PmReturn_t retval;
pPmObj_t ps = C_NULL;
pPmObj_t pr = C_NULL;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Get first arg */
ps = NATIVE_GET_LOCAL(0);
/* Get the length of the arg based on its type */
switch (OBJ_GET_TYPE(ps))
{
case OBJ_TYPE_STR:
retval = int_new(((pPmString_t)ps)->length, &pr);
break;
case OBJ_TYPE_TUP:
retval = int_new(((pPmTuple_t)ps)->length, &pr);
break;
case OBJ_TYPE_LST:
retval = int_new(((pPmList_t)ps)->length, &pr);
break;
case OBJ_TYPE_DIC:
retval = int_new(((pPmDict_t)ps)->length, &pr);
break;
default:
/* If not a string or sequence type, raise TypeError */
PM_RAISE(retval, PM_RET_EX_TYPE);
}
NATIVE_SET_TOS(pr);
return retval;
| def __bi::locals | ( | ) |
__NATIVE__
pPmObj_t pr = C_NULL;
PmReturn_t retval;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 0)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Return calling frame's local attrs dict on the stack */
pr = (pPmObj_t)NATIVE_GET_PFRAME()->fo_attrs;
NATIVE_SET_TOS(pr);
return PM_RET_OK;
| def __bi::ord | ( | s | ) |
__NATIVE__
pPmObj_t ps;
pPmObj_t pn;
int32_t n;
PmReturn_t retval;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
ps = NATIVE_GET_LOCAL(0);
/* Raise TypeError if arg is not string of length 1 */
if ((OBJ_GET_TYPE(ps) != OBJ_TYPE_STR)
|| (((pPmString_t)ps)->length != 1))
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Get integer value of character */
n = ((pPmString_t)ps)->val[0];
retval = int_new(n, &pn);
NATIVE_SET_TOS(pn);
return retval;
| def __bi::range | ( | a, | ||
| b, | ||||
| c | ||||
| ) |
__NATIVE__
PmReturn_t retval;
pPmObj_t pa = C_NULL;
pPmObj_t pb = C_NULL;
pPmObj_t pc = C_NULL;
pPmObj_t pi = C_NULL;
pPmObj_t pr = C_NULL;
int16_t i = 0;
switch (NATIVE_GET_NUM_ARGS())
{
case 1:
pa = PM_ZERO;
pb = NATIVE_GET_LOCAL(0);
pc = PM_ONE;
break;
case 2:
pa = NATIVE_GET_LOCAL(0);
pb = NATIVE_GET_LOCAL(1);
pc = PM_ONE;
break;
case 3:
pa = NATIVE_GET_LOCAL(0);
pb = NATIVE_GET_LOCAL(1);
pc = NATIVE_GET_LOCAL(2);
/* If 3rd arg is 0, ValueError */
if (((pPmInt_t)pc)->val == 0)
{
PM_RAISE(retval, PM_RET_EX_VAL);
return retval;
}
break;
default:
/* If wrong number of args, raise TypeError */
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Allocate list */
retval = list_new(&pr);
PM_RETURN_IF_ERROR(retval);
/* Iterate depending on counting direction */
if (((pPmInt_t)pc)->val > 0)
{
for (i = ((pPmInt_t)pa)->val;
i < ((pPmInt_t)pb)->val;
i += ((pPmInt_t)pc)->val)
{
retval = int_new(i, &pi);
PM_RETURN_IF_ERROR(retval);
retval = list_append(pr, pi);
PM_RETURN_IF_ERROR(retval);
}
}
else
{
for (i = ((pPmInt_t)pa)->val;
i > ((pPmInt_t)pb)->val;
i += ((pPmInt_t)pc)->val)
{
retval = int_new(i, &pi);
PM_RETURN_IF_ERROR(retval);
retval = list_append(pr, pi);
PM_RETURN_IF_ERROR(retval);
}
}
/* Return list */
NATIVE_SET_TOS(pr);
return retval;
| def __bi::sum | ( | s | ) |
__NATIVE__
pPmObj_t ps;
pPmObj_t pn;
pPmObj_t po;
int32_t n;
uint16_t len;
uint16_t i;
PmReturn_t retval;
#ifdef HAVE_FLOAT
float f;
uint8_t usefloat = C_FALSE;
#endif /* HAVE_FLOAT */
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Get the length of the sequence */
ps = NATIVE_GET_LOCAL(0);
if (OBJ_GET_TYPE(ps) == OBJ_TYPE_TUP)
{
len = ((pPmTuple_t)ps)->length;
}
else if (OBJ_GET_TYPE(ps) == OBJ_TYPE_LST)
{
len = ((pPmTuple_t)ps)->length;
}
/* Raise TypeError if arg is not a sequence */
else
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Calculate the sum of the sequence */
n = 0;
#ifdef HAVE_FLOAT
f = 0.0;
#endif
for (i = 0; i < len; i++)
{
retval = seq_getSubscript(ps, i, &po);
if (OBJ_GET_TYPE(po) == OBJ_TYPE_INT)
{
/* Add value to sum */
n += ((pPmInt_t)po)->val;
#ifdef HAVE_FLOAT
f += (float)((pPmInt_t)po)->val;
#endif /* HAVE_FLOAT */
}
#ifdef HAVE_FLOAT
else if (OBJ_GET_TYPE(po) == OBJ_TYPE_FLT)
{
/* Add value to sum */
f += ((pPmFloat_t)po)->val;
usefloat = C_TRUE;
}
#endif /* HAVE_FLOAT */
/* Raise TypeError if item is not an integer */
else
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
}
#ifdef HAVE_FLOAT
if (usefloat)
{
retval = float_new(f, &pn);
}
else
#endif /* HAVE_FLOAT */
{
retval = int_new(n, &pn);
}
NATIVE_SET_TOS(pn);
return retval;
| def __bi::type | ( | o | ) |
__NATIVE__
PmReturn_t retval;
pPmObj_t po = C_NULL;
pPmObj_t pr = C_NULL;
/* If wrong number of args, raise TypeError */
if (NATIVE_GET_NUM_ARGS() != 1)
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Get arg */
po = NATIVE_GET_LOCAL(0);
/* Create int from type enum */
retval = int_new(OBJ_GET_TYPE(po), &pr);
NATIVE_SET_TOS(pr);
return retval;
1.5.9