public override void Emit(Emitter e) { Logger.Assert(DataType.IsVariable || DataType == DataTypes.Void, DataType); e.Out(Opcodes.LDACCBLK); e.OutLoad(NumberValue.Create(AccumIndex)); e.OutLoad(DataType.DefaultValue()); var seed = FoldedOp.GetSeed(DataType); var code = (FoldedOp.IsDefFunc) ? FoldedExpr.Compile(InvokeOp, CallInfo.Name, seed) : FoldedExpr.Compile(FoldedOp, seed, CallInfo); var eb = ExpressionBlock.Create("&i", ExpressionKinds.IsFolded, code, FoldedExpr.DataType, null, AccumIndex); e.OutSeg(eb); e.OutCall(Func); }
public override void Emit(Emitter e) { Logger.Assert(DataType.IsVariable || DataType == DataTypes.Void, DataType); e.OutLoad(TextValue.Create(UserFunc.DataType.Name)); foreach (var a in Arguments) { a.Emit(e); } e.OutCall(Func, NumVarArgs); }
public override void Emit(Emitter e) { Logger.Assert(DataType is DataTypeRelation || DataType is DataTypeTuple); e.OutLoad(HeadingValue.Create(DataType.Heading)); foreach (var a in Arguments) { a.Emit(e); } e.OutCall(Func, Arguments.Length); }
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) { var kind = (HasWin) ? ExpressionKinds.HasWin : (Accums > 0) ? ExpressionKinds.HasFold : (Lookup == null) ? ExpressionKinds.Closed : ExpressionKinds.Open; var eb = ExpressionBlock.Create(Name, kind, Value.Compile(), DataType, Lookup, Accums); //var eb = ExpressionBlock.Create(Name, kind, Value.Compile(), Value.DataType, Lookup, Accums); if (AsCode) { e.OutLoad(CodeValue.Create(eb)); } else { e.OutSeg(eb); } }
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); }
public override void Emit(Emitter e) { e.OutLoad(Value); }