コード例 #1
0
        private IParseTreeValue EvaluateLogicalNot(IParseTreeValue parseTreeValue)
        {
            var opProvider = new OperatorTypesProvider(parseTreeValue.ValueType, LogicalOperators.NOT);

            if (!parseTreeValue.ParsesToConstantValue)
            {
                //Unable to resolve to a value, return an expression
                var opType = opProvider.OperatorDeclaredType;
                opType = opType.Equals(string.Empty) ? Tokens.Variant : opProvider.OperatorDeclaredType;
                return(_valueFactory.CreateExpression($"{LogicalOperators.NOT} {parseTreeValue.Token}", opType));
            }

            var value = parseTreeValue.AsLong();

            return(_valueFactory.CreateDeclaredType((~value).ToString(CultureInfo.InvariantCulture), opProvider.OperatorDeclaredType));
        }
コード例 #2
0
        private static string Calculate(IParseTreeValue LHS, IParseTreeValue RHS, Func <bool, bool, bool> LogicCalc)
        {
            var calc = LogicCalc ?? throw new ArgumentNullException();

            return(calc(LHS.AsLong() != 0, RHS.AsLong() != 0).ToString());
        }