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); }
void IoList_rawAt_put_(IoList *self, int i, IoObject *v) { List_at_put_(DATA(self), i, IOREF(v)); IoObject_isDirty_(self, 1); }