Пример #1
0
        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);
        }
Пример #2
0
 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);
 }
Пример #3
0
        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);
        }
Пример #4
0
 public override void Emit(Emitter e)
 {
     if (IsArgless)
     {
         e.OutName(Opcodes.LDCATV, Variable.Name);
     }
     else
     {
         e.OutLoad(Variable);
     }
 }
Пример #5
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());
        }
Пример #6
0
        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);
            }
        }
Пример #7
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);
 }
Пример #8
0
 public override void Emit(Emitter e)
 {
     e.OutLoad(Value);
 }