Example #1
0
        public void ShouldCompileSetMethod()
        {
            PepsiMachine machine = new PepsiMachine();
            IClass       cls     = machine.CreateClass();

            cls.AddVariable("x");
            Compiler compiler = new Compiler("x: newX [x := newX]");

            compiler.CompileInstanceMethod(cls);

            Assert.IsNotNull(cls.Lookup("x:"));
        }
Example #2
0
        public void ShouldCompileMethodWithLocals()
        {
            PepsiMachine machine = new PepsiMachine();
            IClass       cls     = machine.CreateClass();

            cls.AddVariable("x");
            Compiler compiler = new Compiler("x [| temp | temp := x. ^temp]");

            compiler.CompileInstanceMethod(cls);

            Assert.IsNotNull(cls.Lookup("x"));
        }
Example #3
0
        public void ShouldCompile()
        {
            PepsiMachine machine = new PepsiMachine();
            IClass       cls     = machine.CreateClass();

            cls.AddVariable("x");

            Block block;

            block = new Block();
            block.CompileArgument("newX");
            block.CompileGet("newX");
            block.CompileSet("x");

            Assert.AreEqual(1, block.Arity);
            Assert.AreEqual(0, block.NoLocals);
            Assert.IsNotNull(block.ByteCodes);
            Assert.IsTrue(block.ByteCodes.Length > 0);
        }
Example #4
0
        public static IClass CompileClass(string clsname, string[] varnames, string[] methods)
        {
            PepsiMachine machine = new PepsiMachine();
            IClass       cls     = machine.CreateClass();

            if (varnames != null)
            {
                foreach (string varname in varnames)
                {
                    cls.AddVariable(varname);
                }
            }

            if (methods != null)
            {
                foreach (string method in methods)
                {
                    Compiler compiler = new Compiler(method);
                    compiler.CompileInstanceMethod(cls);
                }
            }

            return(cls);
        }