Пример #1
0
 public IValue interpret(IValue lval, IValue rval)
 {
     if (lval is BooleanValue && rval is BooleanValue)
     {
         return(BooleanValue.ValueOf(((BooleanValue)lval).Value || ((BooleanValue)rval).Value));
     }
     else
     {
         throw new SyntaxError("Illegal: " + lval.GetType().Name + " + " + rval.GetType().Name);
     }
 }
Пример #2
0
 public override IValue ConvertCSharpValueToIValue(Context context, Object value)
 {
     if (value is bool)
     {
         return(BooleanValue.ValueOf((bool)value));
     }
     else if (value is bool?)
     {
         return(BooleanValue.ValueOf(((bool?)value).Value));
     }
     else
     {
         return((IValue)value); // TODO for now
     }
 }
Пример #3
0
        public IValue interpret(Context context, IValue lval, IValue rval)
        {
            bool equal = false;

            switch (oper)
            {
            case EqOp.IS:
                equal = lval == rval;
                break;

            case EqOp.IS_NOT:
                equal = lval != rval;
                break;

            case EqOp.IS_A:
                equal = isA(context, lval, rval);
                break;

            case EqOp.IS_NOT_A:
                equal = !isA(context, lval, rval);
                break;

            case EqOp.EQUALS:
                equal = lval.Equals(context, rval);
                break;

            case EqOp.NOT_EQUALS:
                equal = !lval.Equals(context, rval);
                break;

            case EqOp.CONTAINS:
                equal = lval.Contains(context, rval);
                break;

            case EqOp.NOT_CONTAINS:
                equal = !lval.Contains(context, rval);
                break;

            case EqOp.ROUGHLY:
                equal = lval.Roughly(context, (IValue)rval);
                break;
            }
            return(BooleanValue.ValueOf(equal));
        }
Пример #4
0
        private BooleanValue compare(Context context, IValue lval, IValue rval)
        {
            Int32 cmp = lval.CompareTo(context, rval);

            switch (oper)
            {
            case CmpOp.GT:
                return(BooleanValue.ValueOf(cmp > 0));

            case CmpOp.LT:
                return(BooleanValue.ValueOf(cmp < 0));

            case CmpOp.GTE:
                return(BooleanValue.ValueOf(cmp >= 0));

            case CmpOp.LTE:
                return(BooleanValue.ValueOf(cmp <= 0));

            default:
                throw new SyntaxError("Illegal compare operand: " + oper.ToString());
            }
        }