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); }
public override void Emit(Emitter e) { if (IsArgless) { e.OutName(Opcodes.LDCATV, Variable.Name); } else { e.OutLoad(Variable); } }
// 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()); }
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); }