Esempio n. 1
0
 public override void Emit(Emitter e)
 {
     Logger.Assert(DataType.IsVariable || DataType == DataTypes.Void, DataType);
     Logger.Assert(Arguments.Length == 1 && Arguments[0].DataType is DataTypeTuple);
     Arguments[0].Emit(e);
     e.OutName(Opcodes.LDFIELDT, Func.Name);
 }
Esempio n. 2
0
 public override void Emit(Emitter e)
 {
     if (IsArgless)
     {
         e.OutName(Opcodes.LDCATV, Variable.Name);
     }
     else
     {
         e.OutLoad(Variable);
     }
 }
Esempio n. 3
0
        // create code segment wrapped for fold and deffunc, called via Invoke
        public ByteCode Compile(Symbol invop, string opname, TypedValue seed)
        {
            var e = new Emitter();

            e.OutName(Opcodes.LDCATR, opname);
            e.Out(Opcodes.LDACCBLK);
            e.OutLoad(NumberValue.Create(-1));
            e.Out(Opcodes.LDAGG, seed);
            Emit(e);
            e.OutCall(invop, 2); // no choice but two args
            return(e.GetCode());
        }
Esempio n. 4
0
 public override void Emit(Emitter e)
 {
     Logger.Assert(DataType.IsVariable || DataType == DataTypes.Void, DataType);
     Logger.Assert(Name == null || Code == null);
     if (Name != null)
     {
         e.OutName(Opcodes.LDCATR, Name);
     }
     else
     {
         Code.Emit(e);
     }
     e.Out(Opcodes.LDACCBLK);
     e.OutLoad(NumberValue.Create(AccumBase));
     foreach (var a in Arguments)
     {
         a.Emit(e);
     }
     e.OutCall(Func, NumVarArgs);
 }