Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
    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));
    }
Beispiel #7
0
        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);
        }
Beispiel #8
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));
    }
Beispiel #11
0
    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));
    }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
 public FormatChanges()
 {
     font = null;
     color = Color.Empty;
     fontsize = 0f;
     fontfamily = String.Empty;
     bold = italic = strikeout = underline = subscript = superscript = Ternary.Indeterminate;
 }
Beispiel #15
0
 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;
     }
 }
Beispiel #16
0
 public static bool IsFalse(this Ternary t)
 {
     return(t == Ternary.No);
 }
Beispiel #17
0
 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);
 }
Beispiel #18
0
 public static bool?ToNullable(this Ternary t)
 {
     return(t != Ternary.Maybe ? t.IsTrue() : (bool?)null);
 }
Beispiel #19
0
 public string VisitConditional(Ternary ternary)
 {
     return($"(Conditional {ternary.Condition} {ternary.TrueCase} {ternary.FalseCase}");
 }
Beispiel #20
0
 public static bool IsTrue(this Ternary t)
 {
     return(t == Ternary.Yes);
 }
Beispiel #21
0
 string IVisitor <string> .VisitTernaryExpr(Ternary expr)
 {
     throw new NotImplementedException();
 }
Beispiel #22
0
 public string VisitTernaryExpr(Ternary expr)
 {
     throw new NotImplementedException();
 }
Beispiel #23
0
 public string visitTernaryExpr(Ternary t)
 {
     return(parenthesize("rny", t.Predcate, t.expre1, t.expre2));
 }
Beispiel #24
0
 object Expressions.IVisitor <object> .VisitTernaryExpr(Ternary expr)
 {
     throw new NotImplementedException();
 }
Beispiel #25
0
        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;
 }