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)); }
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()); }