示例#1
0
IoObject *demarshal(IoObject *self, IoObject *arg, intptr_t n)
{
	if (ISNUMBER(arg))
	{
		return IONUMBER(n);
	}
	else if (ISSYMBOL(arg))
	{
		if (n == 0)
			return IOSYMBOL("");
		return IOSYMBOL((char*)n);
	}
	else if (ISLIST(arg))
	{
		intptr_t *values = (intptr_t *)n;
		int i;

		for (i = 0; i < IoList_rawSize(arg); i ++)
		{
			IoObject *value = List_at_(IoList_rawList(arg), i);
			List_at_put_(IoList_rawList(arg), i, demarshal(self, value, values[i]));
		}

		io_free(values);
		return arg;
	}
	else if (ISBUFFER(arg))
	{
		return arg;
	}
	else if (ISBLOCK(arg))
	{
		return arg;
	}

	return IONIL(self);
}
示例#2
0
文件: IoList.c 项目: doublec/io
void IoList_rawAt_put_(IoList *self, int i, IoObject *v)
{
	List_at_put_(DATA(self), i, IOREF(v));
	IoObject_isDirty_(self, 1);
}