示例#1
0
        public override string Template()
        {
            var endFunc   = Healpers.GetFunctionId();
            var falseFunc = Healpers.GetFunctionId();
            var compare   = $"cmpq\t$0, %rax\nje\t{falseFunc}";

            return($"{Expression.Template()}\n{compare}\n{TrueResult.Template()}\njmp\t{endFunc}\n{falseFunc}:\n{FalseResult.Template()}\n{endFunc}:");
        }
示例#2
0
        public override object GetProcessedValue()
        {
            if (Expression.StartsWith("$if{") && Expression.EndsWith("}"))
            {
                int len = Expression.Length - 4;


                string[] args   = Expression.Remove(0, 4).Remove(len - 1, 1).Split(',');
                var      rpnExp = ExpressionTools.ExpressionTools.ConvertToRpnExpression(args[0]);
                TrueResult  = args[1];
                FalseResult = args[2];
                if (!TrueResult.StartsWith("\"") && !TrueResult.EndsWith("\""))
                {
                    TrueResult = ExpressionTools.ExpressionTools.CalcRpnExpression(ExpressionTools.ExpressionTools.ConvertToRpnExpression(TrueResult), Target);
                }
                else
                {
                    TrueResult = TrueResult.Trim('\"');
                }
                if (!FalseResult.StartsWith("\"") && !FalseResult.EndsWith("\""))
                {
                    FalseResult = ExpressionTools.ExpressionTools.CalcRpnExpression(ExpressionTools.ExpressionTools.ConvertToRpnExpression(FalseResult), Target);
                }
                else
                {
                    FalseResult = FalseResult.Trim('\"');
                }
                if (bool.Parse(ExpressionTools.ExpressionTools.CalcRpnExpression(rpnExp, Target)))
                {
                    return(TrueResult);
                }
                return(FalseResult);
            }
            else
            {
                return("Invalid Format! Please use $if{<condition>,<ifTrue>,<ifFalse>}");
            }
        }
示例#3
0
 public void FutureResultTests_True_Or_False_EqualsTrue()
 {
     Assert.IsTrue(TrueResult.Or(FalseResult).Result);
 }
示例#4
0
 public void FutureResultTests_True_And_False_EqualsFalse()
 {
     Assert.IsFalse(TrueResult.And(FalseResult).Result);
 }