Ejemplo n.º 1
0
 public void EmitStloc(ILocalBuilder local)
 {
     if (local == null)
     {
         throw new ArgumentNullException(nameof(local));
     }
     OpCodes.Add($"stloc {local.LocalIndex}");
 }
Ejemplo n.º 2
0
 public LocalBindingRecord(LocalBindingType type, [NotNull] ISourceLine definition, [NotNull] string boundName,
                           [NotNull] ILocalBuilder storage)
 {
     Type         = type;
     Definition   = definition;
     LocalBuilder = storage;
     BoundName    = boundName;
 }
Ejemplo n.º 3
0
 public void EmitLdloca(ILocalBuilder local)
 {
     if (local == null)
     {
         throw new ArgumentNullException(nameof(local));
     }
     generator.Emit(OpCodes.Ldloca, ((EmitLocalBuilder)local).LocalBuilder);
 }
Ejemplo n.º 4
0
                protected override void EmitBeforeBlock(IRoutineBuilder rb, ILabel exhaustedLabel)
                {
                    // initialize counter
                    this.counter = cc.PushInnerLocal(rb, atom, LocalBindingType.LoopState, src);
                    var operand = cc.CompileAsOperand(rb, start, src, counter);

                    if (operand != counter)
                    {
                        rb.EmitStore(counter, operand);
                    }
                }
Ejemplo n.º 5
0
        public void EmitStloc(ILocalBuilder local)
        {
            if (local == null)
            {
                throw new ArgumentNullException(nameof(local));
            }

            switch (local.LocalIndex)
            {
            case 0:
                generator.Emit(OpCodes.Stloc_0);
                break;

            case 1:
                generator.Emit(OpCodes.Stloc_1);
                break;

            case 2:
                generator.Emit(OpCodes.Stloc_2);
                break;

            case 3:
                generator.Emit(OpCodes.Stloc_3);
                break;

            default:
                if (local.LocalIndex < 256)
                {
                    generator.Emit(OpCodes.Stloc_S, (byte)local.LocalIndex);
                }
                else
                {
                    generator.Emit(OpCodes.Stloc, ((EmitLocalBuilder)local).LocalBuilder);
                }
                break;
            }
        }