public object Execute(object receiver, params object[] arguments) { IClass self = (IClass)receiver; string name = (string)arguments[0]; self.AddVariable(name); // TODO review what to return return(name); }
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 ShouldDefineSubclassWithVariables() { IClass baseClass = new BaseClass(); baseClass.AddVariable("a"); IClass subClass = (IClass)baseClass.CreateDelegated(); subClass.AddVariable("b"); Assert.AreEqual(1, baseClass.InstanceSize); Assert.AreEqual(2, subClass.InstanceSize); Assert.AreEqual(0, baseClass.GetInstanceVariableOffset("a")); Assert.AreEqual(-1, subClass.GetInstanceVariableOffset("a")); Assert.AreEqual(1, subClass.GetInstanceVariableOffset("b")); }
public void ShouldCreateSubclassInstanceWithVariables() { IClass baseClass = new BaseClass(); baseClass.AddVariable("a"); IClass subClass = (IClass)baseClass.CreateDelegated(); subClass.AddVariable("b"); IObject instance = subClass.CreateInstance(); Assert.IsNotNull(instance); Assert.AreEqual(2, instance.Size); Assert.IsNull(instance.GetValueAt(0)); Assert.IsNull(instance.GetValueAt(1)); }
public IObject CreatePrototype(string prototypeName, string superName, List <string> variableNames) { IObject super = (IObject)this.globals[superName]; IBehavior superclass = (IBehavior)super.Behavior; IClass cls = (IClass)superclass.CreateDelegated(); if (variableNames != null) { foreach (string name in variableNames) { cls.AddVariable(name); } } IObject obj = cls.CreateInstance(); this.globals[prototypeName] = obj; return(obj); }
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); }