Ejemplo n.º 1
0
PRT_VALUE *P_FUN__SENDRELIABLE_IMPL(PRT_MACHINEINST *context, PRT_UINT32 funIndex, PRT_VALUE *value)
{
	PRT_VALUE* target = PrtTupleGet(value, 0);
	while (PRT_FALSE == PrtDistSend(target, PrtTupleGet(value, 1), PrtTupleGet(value, 2)));

	return PrtMkNullValue();
}
Ejemplo n.º 2
0
void
PrtPushNewFrame(
_Inout_ PRT_MACHINEINST_PRIV	*context,
_In_ PRT_UINT32					funIndex,
_In_ PRT_VALUE					*parameters
)
{
	PRT_UINT16 length = context->funStack.length;
	PrtAssert(length < PRT_MAX_FUNSTACK_DEPTH, "Fun stack overflow");
	context->funStack.length = length + 1;
	context->funStack.funs[length].funIndex = funIndex;
	PRT_FUNDECL *funDecl = &(context->process->program->machines[context->instanceOf].funs[funIndex]);
	PRT_VALUE **locals = NULL;
	if (funDecl->maxNumLocals == 0)
	{
		PrtAssert(parameters == NULL && funDecl->localsNmdTupType == NULL, "Incorrect maxNumLocals value");
	}
	else
	{
		locals = PrtCalloc(funDecl->maxNumLocals, sizeof(PRT_VALUE *));
		for (PRT_UINT32 i = 0; i < funDecl->maxNumLocals; i++)
		{
			locals[i] = NULL;
		}
		PRT_UINT32 count = 0;
		if (parameters != NULL)
		{
			PRT_UINT32 size = parameters->valueUnion.tuple->size;
			for (PRT_UINT32 i = 0; i < size; i++)
			{
				locals[count] = PrtTupleGet(parameters, i);
				count++;
			}
			PrtFreeValue(parameters);
		}
		if (funDecl->localsNmdTupType != NULL)
		{
			PRT_UINT32 size = funDecl->localsNmdTupType->typeUnion.nmTuple->arity;
			for (PRT_UINT32 i = 0; i < size; i++)
			{
				PRT_TYPE *indexType = funDecl->localsNmdTupType->typeUnion.nmTuple->fieldTypes[i];
				locals[count] = PrtMkDefaultValue(indexType);
				count++;
			}
		}
	}
	context->funStack.funs[length].locals = locals;
	context->funStack.funs[length].freeLocals = PRT_TRUE;
	context->funStack.funs[length].returnTo = 0xFFFF;
	context->funStack.funs[length].rcase = NULL;
}
Ejemplo n.º 3
0
PRT_VALUE *P_FUN__SEND_IMPL(PRT_MACHINEINST *context, PRT_UINT32 funIndex, PRT_VALUE *value)
{
	PRT_VALUE* target = PrtTupleGet(value, 0);
	PrtDistSend(target, PrtTupleGet(value, 1), PrtTupleGet(value, 2));
	return PrtMkBoolValue(PRT_TRUE);
}