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);
        }
Example #3
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));
            }
        }
Example #4
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);
            }
        }