Ejemplo n.º 1
0
        public void GenerateSkip(IILGen ilGenerator, Action <IILGen> pushReader, Action <IILGen> pushCtx)
        {
            var localCount   = ilGenerator.DeclareLocal(typeof(uint));
            var skipFinished = ilGenerator.DefineLabel();
            var next         = ilGenerator.DefineLabel();

            ilGenerator
            .Do(pushReader)
            .Callvirt(() => default(AbstractBufferedReader).ReadVUInt32())
            .Stloc(localCount)
            .Ldloc(localCount)
            .Brfalse(skipFinished)
            .Mark(next)
            .Ldloc(localCount)
            .LdcI4(1)
            .Sub()
            .Stloc(localCount)
            .Ldloc(localCount)
            .Brfalse(skipFinished);
            _keyDescriptor.GenerateSkipEx(ilGenerator, pushReader, pushCtx);
            _valueDescriptor.GenerateSkipEx(ilGenerator, pushReader, pushCtx);
            ilGenerator
            .Br(next)
            .Mark(skipFinished);
        }
Ejemplo n.º 2
0
        public void GenerateSkip(IILGen ilGenerator, Action <IILGen> pushReader, Action <IILGen> pushCtx)
        {
            var finish = ilGenerator.DefineLabel();

            ilGenerator
            .Do(pushReader)
            .Callvirt(() => default(AbstractBufferedReader).ReadBool())
            .Brfalse(finish);
            _itemDescriptor.GenerateSkipEx(ilGenerator, pushReader, pushCtx);
            ilGenerator
            .Mark(finish);
        }