public RuntimeContext(Runnable runnable, IHospedagem hospedagem)
        {
            Runnable = runnable;

            Hospedagem = hospedagem;

            executor = new Executor(this);
        }
        public RuntimeContext(Runnable runnable)
        {
            Runnable = runnable;

            Hospedagem = new Hospedagem();

            executor = new Executor(this);
        }
        public void Process_Should_Declare_Variable()
        {
            var contextMock = new Mock<IRuntimeContext>();

            contextMock.Setup(x => x.CurrentInst).Returns(
                new Instruction(OpCode.JMP, 0, new Operand(OperandType.Literal, 5))
                );

            contextMock.Setup(x => x.CurrentFunction).Returns(GetMainFunction());

            contextMock.Setup(x => x.Runnable).Returns(GetRunnable());

            var executor = new Executor(contextMock.Object);

            executor.ExecuteInstruction();

            Assert.AreEqual(5, contextMock.Object.Runnable.IP);
        }
        public void Process_Should_Declare_Variable()
        {
            var contextMock = new Mock<IRuntimeContext>();

            contextMock.Setup(x => x.CurrentInst).Returns(
                new Instruction(OpCode.DCL, 0, new Operand(OperandType.Variable, "x"))
                );

            contextMock.Setup(x => x.CurrentFunction).Returns(GetMainFunction());

            contextMock.Setup(x => x.Runnable).Returns(GetRunnable());

            var executor = new Executor(contextMock.Object);

            executor.ExecuteInstruction();

            Assert.IsTrue(executor.SymbolTable.ContainsKey(SymbolId("x")));
        }