Ejemplo n.º 1
0
        public override void Eval(VM vm)
        {
            HeronValue initVal = initial.Eval(vm);
            VarDesc    desc    = new VarDesc(name);

            using (vm.CreateScope())
            {
                vm.AddVar(desc, initVal);
                while (true)
                {
                    HeronValue condVal = vm.Eval(condition);
                    bool       b       = condVal.ToBool();
                    if (!b)
                    {
                        return;
                    }
                    vm.Eval(body);
                    if (vm.ShouldExitScope())
                    {
                        return;
                    }
                    vm.Eval(next);
                }
            }
        }
Ejemplo n.º 2
0
        public override HeronValue InvokeBinaryOperator(VM vm, OpCode opcode, HeronValue val)
        {
            bool x = GetValue();
            bool y = val.ToBool();

            switch (opcode)
            {
            case OpCode.opAnd: return(vm.MakeTemporary(x && y));

            case OpCode.opOr: return(vm.MakeTemporary(x || y));

            case OpCode.opXOr: return(vm.MakeTemporary(x ^ y));

            default: return(base.InvokeBinaryOperator(vm, opcode, val));
            }
        }
Ejemplo n.º 3
0
 public override void Eval(VM vm)
 {
     while (true)
     {
         HeronValue o = condition.Eval(vm);
         bool       b = o.ToBool();
         if (!b)
         {
             break;
         }
         vm.Eval(body);
         if (vm.ShouldExitScope())
         {
             break;
         }
     }
 }