public override System.CodeDom.CodeMemberMethod GetDeserializerMethod() { CodeMemberMethod method = base.GetDeserializerMethod(); CodeTypeReference listType = CodeGen.CreateGenericType(typeof(List <>), BaseEntry.GetTypeReference()); method.Statements.Add(CodeGen.MakeVariable(listType, "ret", CodeGen.CreateObject(listType))); if (TrailingLength.IsValid) { int length; // If not a primitive expression or the length is not 0 if (!TrailingLength.ParseInt(out length) || (length != 0)) { method.Statements.Add(CodeGen.GetAssign(CodeGen.GetReader(), CodeGen.CreateObject(typeof(DataReader), CodeGen.CallMethod(CodeGen.GetReader(), "ReadToEndTrail", CodeGen.GetLength(TrailingLength))))); } } List <CodeStatement> loopStatements = new List <CodeStatement>(); loopStatements.Add(CodeGen.GetStatement(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "Add", _memberEntry.GetReaderExpression(CodeGen.GetReader())))); method.Statements.Add( CodeGen.GetTryCatch(new CodeStatement[] { CodeGen.GetInfLoop(loopStatements.ToArray()) }, typeof(EndOfStreamException))); method.Statements.Add(CodeGen.GetReturn(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "ToArray"))); return(method); }
public override int GetSize() { int ret = BaseEntry.GetSize(); int length; if ((ret >= 0) && (Length.ParseInt(out length))) { ret = ret * length; } return(ret); }
internal static CodeExpression GetLength(EvalExpression lengthExpression) { if (lengthExpression.IsValid) { int length; // If we can parse then just emit the primitive if (lengthExpression.ParseInt(out length)) { return(CodeGen.GetPrimitive(length)); } else { return(CodeGen.CallMethod(CodeGen.GetThis(), "CL", CodeGen.GetPrimitive(lengthExpression.Expression))); } } else { return(CodeGen.GetPrimitive(0)); } }
internal static CodeExpression GetLength(EvalExpression lengthExpression) { if (lengthExpression.IsValid) { int length; // If we can parse then just emit the primitive if (lengthExpression.ParseInt(out length)) { return CodeGen.GetPrimitive(length); } else { return CodeGen.CallMethod(CodeGen.GetThis(), "CL", CodeGen.GetPrimitive(lengthExpression.Expression)); } } else { return CodeGen.GetPrimitive(0); } }