internal static IClass CompileClass(string clsname, string[] varnames, string[] methods, string[] clsmethods) { Machine machine = new Machine(); IClass cls = machine.CreateClass(clsname); if (varnames != null) { foreach (string varname in varnames) { cls.DefineInstanceVariable(varname); } } if (methods != null) { foreach (string method in methods) { Parser compiler = new Parser(method); cls.DefineInstanceMethod(compiler.CompileInstanceMethod(cls)); } } if (clsmethods != null) { foreach (string method in clsmethods) { Parser compiler = new Parser(method); cls.DefineClassMethod(compiler.CompileClassMethod(cls)); } } return cls; }
private void CompileClassMethod(IBehavior cls, string text, Machine machine) { Parser parser = new Parser(text); cls.DefineClassMethod(parser.CompileClassMethod(cls)); }
public void EvaluateSelfAsReturnInMethodWithoutReturn() { var cls = this.machine.CreateClass("MyClass"); this.machine.SetCurrentEnvironmentObject(cls.Name, cls); Parser parser = new Parser("mymethod [1] value"); cls.DefineClassMethod(parser.CompileClassMethod(cls)); Assert.AreEqual(cls, this.Evaluate("MyClass mymethod")); }
public void EvaluateMethodWithInternalReturnIfFalse() { IClass testclass = this.machine.CreateClass("Test"); this.machine.SetCurrentEnvironmentObject("Test", testclass); Parser parser = new Parser("test false ifFalse: [^1]. ^2"); Method method = parser.CompileClassMethod(testclass); testclass.DefineClassMethod(method); Assert.AreEqual(1, this.Evaluate("Test test")); }
public void EvaluateBlockWithIntegerInMethod() { var cls = this.machine.CreateClass("MyClass"); this.machine.SetCurrentEnvironmentObject(cls.Name, cls); Parser parser = new Parser("mymethod ^[1] value"); cls.DefineClassMethod(parser.CompileClassMethod(cls)); Assert.AreEqual(1, this.Evaluate("MyClass mymethod")); }
public Method CompileClassMethod(string text, IBehavior cls) { Parser parser = new Parser(text); return parser.CompileClassMethod(cls); }