public override Value Evaluate() { var value = Runtime.State.Stack.Pop(false, STR_LOCATION); var special = Runtime.State.Stack.Pop(true, STR_LOCATION); Ternary ternary; switch (special.Type) { case Value.ValueType.Ternary: ternary = (Ternary)special; return(ternary.IsTrue && ternary.Value.Compare(value) <= 0); default: ternary = new Ternary { Truth = value.Compare(special) >= 0 }; if (ternary.IsTrue) { ternary.Value = value.Resolve(); } return(ternary); } }
public void Logics() { Ternary t = true; Ternary n = null; Ternary f = false; var b = new[] { t, n, f }; for (int i = 0; i < 3; i++) { Assert.AreEqual(!b[i].Value, (!b[i]).Value); } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Assert.AreEqual(b[i].Value & b[j].Value, (b[i] & b[j]).Value); Assert.AreEqual(b[i].Value ^ b[j].Value, (b[i] ^ b[j]).Value); Assert.AreEqual(b[i].Value | b[j].Value, (b[i] | b[j]).Value); Assert.AreEqual(!(b[i].Value ^ b[j].Value), (b[i] == b[j]).Value); Assert.AreEqual(b[i].Value ^ b[j].Value, (b[i] != b[j]).Value); } } // bool? で && および || は利用できません。 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Assert.AreEqual(b[i].Value & b[j].Value, (b[i] && b[j]).Value); Assert.AreEqual(b[i].Value | b[j].Value, (b[i] || b[j]).Value); } } }
public override Value Evaluate() { var stack = State.Stack; var y = stack.Pop(true, LOCATION); var x = stack.Pop(true, LOCATION); if (x.IsArray && y.IsArray) { var verb = new PlainLessThanEqual(x, y); return(verb.Evaluate()); } if (x.Type == ValueType.Set && y.Type == ValueType.Set) { return(SendMessage(x, "isPropSubset", y)); } switch (x.Type) { case ValueType.Ternary: var ternary = (Ternary)x; return(ternary.IsTrue && ternary.Value.Compare(y) <= 0); default: ternary = new Ternary { Truth = Compare(x, y) <= 0 }; if (ternary.IsTrue) { ternary.Value = y.Resolve(); } return(ternary); } }
public TypeRef VisitTernary(Ternary ternary) { var conditionType = CompileExpression(ternary.Condition); if (conditionType != allTypes.Bool) { throw UnexpectedType(ternary.Condition, conditionType, allTypes.Bool); } var alternativeExpression = Instruction.Create(OpCodes.Nop); cil.Emit(OpCodes.Brfalse, alternativeExpression); var consequentType = CompileExpression(ternary.Consequent); var afterIf = Instruction.Create(OpCodes.Nop); cil.Emit(OpCodes.Br, afterIf); cil.Append(alternativeExpression); var alternativeType = CompileExpression(ternary.Alternative); cil.Append(afterIf); var commonType = allTypes.TryGetCommonType(consequentType, alternativeType); if (commonType == null) { throw NoCommonType(ternary, consequentType, alternativeType); } return(commonType.Value); }
public void TestGetChildren_ThreeChildren() { var c = new Lit(0); var t = new Lit(1); var f = new Lit(2); var ternary = new Ternary(c, t, f); Assert.Equal(new[] { c, t, f }, _rewriter.GetChildren(ternary)); }
public void TestGetChildren_ThreeChildren() { var c = new Lit(0); var l = new Lit(1); var r = new Lit(2); var tern = new Ternary(c, l, r); Assert.Equal(new[] { c, l, r }, _rewriter.GetChildren(tern)); }
public void Conditions() { Ternary t = true; Ternary n = null; Ternary f = false; if (t) { } else { Assert.Fail(); } if (!t) { Assert.Fail(); } else { } if (f) { Assert.Fail(); } else { } if (!f) { } else { Assert.Fail(); } if (n) { Assert.Fail(); } else { } if (!n) { Assert.Fail(); } else { } Assert.AreEqual(1, t ? 1 : 0); Assert.AreEqual(0, !t ? 1 : 0); Assert.AreEqual(0, f ? 1 : 0); Assert.AreEqual(1, !f ? 1 : 0); Assert.AreEqual(0, n ? 1 : 0); Assert.AreEqual(0, !n ? 1 : 0); }
public object visitTernaryExpr(Ternary t) { object predcate = evaluate(t.Predcate); if (isTruthy(predcate)) { return(evaluate(t.expre1)); } return(evaluate(t.expre2)); }
private void SetFontEffect(uint mask, uint effect, Ternary val) { if (val == Ternary.Indeterminate) { return; } STRUCT_CHARFORMAT2 charFormat2 = new STRUCT_CHARFORMAT2(); charFormat2.dwMask = mask; charFormat2.dwEffects = val == Ternary.Yes ? effect : 0; SetCharFormat(ref charFormat2); }
public void TestSetChildren_ThreeChildren() { var c = new Lit(0); var l = new Lit(1); var r = new Lit(2); var tern = new Ternary(c, l, r); var newC = new Lit(3); var newL = new Lit(4); var newR = new Lit(5); var newTern = _rewriter.SetChildren(new[] { newC, newL, newR }, tern); Assert.Equal(new[] { newC, newL, newR }, _rewriter.GetChildren(newTern)); }
public void TestSetChildren_ThreeChildren() { var c = new Lit(0); var t = new Lit(1); var f = new Lit(2); var ternary = new Ternary(c, t, f); var newC = new Lit(3); var newT = new Lit(4); var newF = new Lit(5); var newTernary = _rewriter.SetChildren(new[] { newC, newT, newF }, ternary); Assert.Equal(new[] { newC, newT, newF }, _rewriter.GetChildren(newTernary)); }
private Expression ParseConditional() { var expr = ParseLogicalOr(); while (Match(TokenType.Question)) { var trueCase = ParseConditional(); if (Match(TokenType.Colon)) { var falseCase = ParseConditional(); expr = new Ternary(expr, trueCase, falseCase); } else { _errorCallBack(Peek(), "Ternary operations are separated with a colon"); } } return(expr); }
Expression Parse_LowPrecedenceTernary() { Expression expr = Parse_OpOr(); while (m_Tokenizer.PeekNextToken().type == TokenType.Ternary) { m_Tokenizer.ConsumeNextToken(); Expression true_expr = Parse_OpOr(); Expression false_expr; if (m_Tokenizer.PeekNextToken().type == TokenType.TernarySeparator) { m_Tokenizer.ConsumeNextToken(); false_expr = Parse_OpOr(); } else { false_expr = m_DefaultValue; } expr = new Ternary(expr, true_expr, false_expr); } return(expr); }
public FormatChanges() { font = null; color = Color.Empty; fontsize = 0f; fontfamily = String.Empty; bold = italic = strikeout = underline = subscript = superscript = Ternary.Indeterminate; }
private static void CheckButton(ToolStripButton button, Ternary t) { switch (t) { case Ternary.Yes: button.CheckState = CheckState.Checked; break; case Ternary.No: button.CheckState = CheckState.Unchecked; break; default: case Ternary.Indeterminate: button.CheckState = CheckState.Indeterminate; break; } }
public static bool IsFalse(this Ternary t) { return(t == Ternary.No); }
private void SetFontEffect(uint mask, uint effect, Ternary val) { if (val == Ternary.Indeterminate) return; STRUCT_CHARFORMAT2 charFormat2 = new STRUCT_CHARFORMAT2(); charFormat2.dwMask = mask; charFormat2.dwEffects = val == Ternary.Yes ? effect : 0; SetCharFormat(ref charFormat2); }
public static bool?ToNullable(this Ternary t) { return(t != Ternary.Maybe ? t.IsTrue() : (bool?)null); }
public string VisitConditional(Ternary ternary) { return($"(Conditional {ternary.Condition} {ternary.TrueCase} {ternary.FalseCase}"); }
public static bool IsTrue(this Ternary t) { return(t == Ternary.Yes); }
string IVisitor <string> .VisitTernaryExpr(Ternary expr) { throw new NotImplementedException(); }
public string VisitTernaryExpr(Ternary expr) { throw new NotImplementedException(); }
public string visitTernaryExpr(Ternary t) { return(parenthesize("rny", t.Predcate, t.expre1, t.expre2)); }
object Expressions.IVisitor <object> .VisitTernaryExpr(Ternary expr) { throw new NotImplementedException(); }
public static void Compile(ByteCodeCompiler bcc, ParserContext parser, ByteBuffer buffer, Ternary ternary, bool outputUsed) { ByteCodeCompiler.EnsureUsed(ternary, outputUsed); bcc.CompileExpression(parser, buffer, ternary.Condition, true); ByteBuffer trueBuffer = new ByteBuffer(); bcc.CompileExpression(parser, trueBuffer, ternary.TrueValue, true); ByteBuffer falseBuffer = new ByteBuffer(); bcc.CompileExpression(parser, falseBuffer, ternary.FalseValue, true); trueBuffer.Add(null, OpCode.JUMP, falseBuffer.Size); buffer.Add(ternary.Condition.FirstToken, OpCode.JUMP_IF_FALSE, trueBuffer.Size); buffer.Concat(trueBuffer); buffer.Concat(falseBuffer); }
Expression Parse_LowPrecedenceTernary() { Expression expr = Parse_OpOr(); while (m_Tokenizer.PeekNextToken().type == TokenType.Ternary) { m_Tokenizer.ConsumeNextToken(); Expression true_expr = Parse_OpOr(); Expression false_expr; if (m_Tokenizer.PeekNextToken().type == TokenType.TernarySeparator) { m_Tokenizer.ConsumeNextToken(); false_expr = Parse_OpOr(); } else { false_expr = m_DefaultValue; } expr = new Ternary(expr, true_expr, false_expr); } return expr; }