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:")); }
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")); }
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); }
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); }