private void SerializeIf(VarCommand cmd)
        {
            switch (cmd.Op)
            {
            case VarCommand.Operator.ASSIGN:
                sb.AppendFormat("setvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.ADD:
                sb.AppendFormat("addvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.SUB:
                sb.AppendFormat("subvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.MUL:
                sb.AppendFormat("mulvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.DIV:
                sb.AppendFormat("divvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.SHIFT:
                sb.AppendFormat("shiftvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.EQU:
                sb.AppendFormat("cmp_eq_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.GT:
                sb.AppendFormat("cmp_gt_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.GTE:
                sb.AppendFormat("cmp_ge_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.LTE:
                sb.AppendFormat("cmp_le_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.LT:
                sb.AppendFormat("cmp_lt_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.NEQ:
                sb.AppendFormat("cmp_ne_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            case VarCommand.Operator.RAND:
                sb.AppendFormat("randvar_if {0}, {1}\n", cmd.Variable, cmd.Operand);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
예제 #2
0
        public void ParseNewVariableDefinition()
        {
            ICommand command = ParseCommand("var x;");

            Assert.IsNotNull(command);
            Assert.IsInstanceOfType(command, typeof(VarCommand));

            VarCommand varcmd = (VarCommand)command;

            Assert.AreEqual("x", varcmd.Name);
        }
예제 #3
0
        public void ParseVarCommand()
        {
            ICommand command = ParseCommand("var x;");

            Assert.IsNotNull(command);
            Assert.IsInstanceOfType(command, typeof(VarCommand));

            VarCommand varcmd = (VarCommand)command;

            Assert.AreEqual("x", varcmd.Name);
            Assert.IsNull(varcmd.Expression);
        }
예제 #4
0
        public void ParseVarCommandWithInitialValue()
        {
            ICommand command = ParseCommand("var x = 10;");

            Assert.IsNotNull(command);
            Assert.IsInstanceOfType(command, typeof(VarCommand));

            VarCommand varcmd = (VarCommand)command;

            Assert.AreEqual("x", varcmd.Name);
            Assert.IsNotNull(varcmd.Expression);
            Assert.IsInstanceOfType(varcmd.Expression, typeof(ConstantExpression));
        }
예제 #5
0
        public void ExecuteVarCommandWithNullExpression()
        {
            VarCommand command = new VarCommand("foo", null);

            IBindingEnvironment environment = new BindingEnvironment();
            IBindingEnvironment local       = new LocalBindingEnvironment(environment);
            IBindingEnvironment local2      = new LocalBindingEnvironment(local);

            command.Execute(local2);

            Assert.IsTrue(local2.ContainsName("foo"));
            Assert.IsFalse(local.ContainsName("foo"));
            Assert.IsFalse(environment.ContainsName("foo"));

            Assert.IsNull(local2.GetValue("foo"));
        }
예제 #6
0
        public void ExecuteVarCommand()
        {
            VarCommand command = new VarCommand("foo", new ConstantExpression(10));

            IBindingEnvironment environment = new BindingEnvironment();
            IBindingEnvironment local       = new LocalBindingEnvironment(environment);
            IBindingEnvironment local2      = new LocalBindingEnvironment(local);

            command.Execute(local2);

            Assert.IsTrue(local2.ContainsName("foo"));
            Assert.IsFalse(local.ContainsName("foo"));
            Assert.IsFalse(environment.ContainsName("foo"));

            Assert.AreEqual(10, local2.GetValue("foo"));
        }
예제 #7
0
        public void ParseNewVariableDefinitionAndInitialization()
        {
            ICommand command = ParseCommand("var x = 1;");

            Assert.IsNotNull(command);
            Assert.IsInstanceOfType(command, typeof(CompositeCommand));

            CompositeCommand composite = (CompositeCommand)command;

            Assert.AreEqual(2, composite.CommandCount);
            Assert.IsInstanceOfType(composite.Commands.First(), typeof(VarCommand));
            VarCommand varcmd = (VarCommand)composite.Commands.First();

            Assert.AreEqual("x", varcmd.Name);
            Assert.IsInstanceOfType(composite.Commands.ElementAt(1), typeof(SetVariableCommand));
            SetVariableCommand setcmd = (SetVariableCommand)composite.Commands.ElementAt(1);

            Assert.IsInstanceOfType(setcmd.Expression, typeof(ConstantExpression));

            ConstantExpression consexpr = (ConstantExpression)setcmd.Expression;

            Assert.AreEqual(1, consexpr.Value);
        }
예제 #8
0
        public void DashVar(string op1, string opm, string op2)
        {
            IHalationCommand cmd = new VarCommand(Halation.CurrentSelectedLine, this.GetIndent(Halation.CurrentSelectedLine), Halation.currentCodePackage, op1, opm, op2);

            HalationInvoker.Dash(Halation.currentScriptName, cmd);
        }