void read_invoke_res(PacketReader r, out ValueImpl v, out ValueImpl exc, out ValueImpl out_this, out ValueImpl[] out_args) { int resflags = r.ReadByte (); v = null; exc = null; out_this = null; out_args = null; if (resflags == 0) { exc = r.ReadValue (); } else { v = r.ReadValue (); if ((resflags & 2) != 0) out_this = r.ReadValue (); if ((resflags & 4) != 0) { int nargs = r.ReadInt (); out_args = new ValueImpl [nargs]; for (int i = 0; i < nargs; ++i) out_args [i] = r.ReadValue (); } } }
CattrInfo[] ReadCattrs(PacketReader r) { CattrInfo[] res = new CattrInfo [r.ReadInt ()]; for (int i = 0; i < res.Length; ++i) { CattrInfo info = new CattrInfo (); info.ctor_id = r.ReadId (); info.ctor_args = new ValueImpl [r.ReadInt ()]; for (int j = 0; j < info.ctor_args.Length; ++j) { info.ctor_args [j] = r.ReadValue (); } info.named_args = new CattrNamedArgInfo [r.ReadInt ()]; for (int j = 0; j < info.named_args.Length; ++j) { CattrNamedArgInfo arg = new CattrNamedArgInfo (); int arg_type = r.ReadByte (); arg.is_property = arg_type == 0x54; arg.id = r.ReadId (); arg.value = r.ReadValue (); info.named_args [j] = arg; } res [i] = info; } return res; }