internal override string ToString(string indent) { var sb = new StringBuilder(128); sb.AppendFormat("{0}WHEN ", indent); if (WhenExpression.OneLine()) { sb.Append(WhenExpression.ToString("")); } else { sb.Append("\r\n"); sb.Append(WhenExpression.ToString(indent + " ")); } sb.Append(" THEN "); if (ThenExpression.OneLine()) { sb.Append(ThenExpression.ToString("")); } else { sb.Append("\r\n"); sb.Append(ThenExpression.ToString(indent + " ")); } return(sb.ToString()); }
/// <summary> /// Tries to evaluate the given expression in the context of /// the given environment. /// </summary> /// <param name="env">Environment in which to evaluate the /// expression.</param> /// <param name="value">On success, receives the evaluation /// result.</param> /// <returns>true on success; false otherwise.</returns> public override bool TryEvaluate(ExpressionEnvironment env, out string value) { if (env == null) { throw new ArgumentNullException(nameof(env)); } if (!Condition.TryEvaluate(env, out string condition) || !ThenExpression.TryEvaluate(env, out string thenValue)) { value = null; return(false); } string elseValue = string.Empty; if (ElseExpression.HasValue && !ElseExpression.Value.TryEvaluate(env, out elseValue)) { value = null; return(false); } var conditionValue = !string.IsNullOrEmpty(condition); value = conditionValue ? thenValue : elseValue; return(true); }
public override int GetHashCode() { unchecked { var hashCode = 10 + Condition.GetHashCode(); hashCode = (hashCode * 397) ^ ThenExpression.GetHashCode(); hashCode = (hashCode * 397) ^ ElseExpression.GetHashCode(); return(hashCode); } }
/// <inheritdoc /> protected override EvaluationResult DoEval(Context context, ModuleLiteral env, EvaluationStackFrame frame) { var condition = ConditionExpression.Eval(context, env, frame); if (condition.IsErrorValue) { return(condition); } return(IsTruthy(condition.Value) ? ThenExpression.Eval(context, env, frame) : ElseExpression.Eval(context, env, frame)); }
public override void GenerateCode(CodeGeneration.CodeGenerator cg) { Label elseeval = cg.IlGenerator.DefineLabel(); Label endofif = cg.IlGenerator.DefineLabel(); IfCondition.GenerateCode(cg); cg.IlGenerator.Emit(OpCodes.Brfalse, elseeval); ThenExpression.GenerateCode(cg); cg.IlGenerator.Emit(OpCodes.Br, endofif); cg.IlGenerator.MarkLabel(elseeval); ElseExpression.GenerateCode(cg); cg.IlGenerator.MarkLabel(endofif); }
internal override bool OneLine() { return(WhenExpression.OneLine() && ThenExpression.OneLine()); }
/// <inheritdoc /> public override string ToDebugString() { return(I($"{ConditionExpression.ToDebugString()} ? {ThenExpression.ToDebugString()} : {ElseExpression.ToDebugString()}")); }
/// <inheritdoc /> protected override void DoSerialize(BuildXLWriter writer) { ConditionExpression.Serialize(writer); ThenExpression.Serialize(writer); ElseExpression.Serialize(writer); }