public static void Main() { var codeReader = new StringReader(_code); var rawTokens = new LuaRawTokenizer(); var luaTokens = new LuaTokenizer(); rawTokens.Reset(codeReader); luaTokens.Reset(rawTokens); var parser = new LuaParser(); var builder = new SyntaxTreeBuilder(); builder.Start(); luaTokens.EnsureMoveNext(); parser.Reset(luaTokens, builder); parser.Parse(); var ast = builder.Finish(); var env = new Table(); env.SetRaw(TypedValue.MakeString("print"), TypedValue.MakeNClosure(Print)); var codeGen = new CodeGenerator(); var closure = codeGen.Compile(ast, env); var thread = new Thread(); var stack = thread.AllocateRootCSharpStack(1); var arg = TypedValue.MakeString("C#"); stack.Write(0, in arg); LuaInterpreter.Execute(stack, closure, 0, 1); stack.Read(0, out var ret); }
public void HelloWorldTest() { LuaParser parser; var context = new LuaContext(); context.AddBasicLibrary(); context.AddIoLibrary(); parser = new LuaParser(context, "helloworld.lua"); parser.Parse(); }
public void FunctionScopesTest() { LuaParser parser; var context = new LuaContext(); context.AddBasicLibrary(); context.AddIoLibrary(); parser = new LuaParser(context, "functionscopes.lua"); parser.Parse(); }
public void DoFileTest() { LuaParser parser; var context = new LuaContext(); context.AddBasicLibrary(); context.AddIoLibrary(); parser = new LuaParser(context, "dofile.lua"); parser.Parse(); }
// Compiling. public static LuaPrototype Compile(TextWriter errorWriter, TextReader sourceReader, string sourceName) { // Parse the function. LuaAST LuaAST = LuaParser.Parse(errorWriter, sourceReader, sourceName); if (LuaAST == null) { return(null); } // Compile. BytecodeCompiler compiler = new BytecodeCompiler(sourceName); LuaPrototype prototype = compiler.BuildPrototype(LuaAST); return(prototype); }
public void MethodBinding() { LuaParser parser; var context = new LuaContext(); context.AddBasicLibrary(); context.AddIoLibrary(); double res = 0; var func = (Func<double, double>)((a) => { res = a; return a + 1; }); context.SetGlobal("test", LuaObject.FromDelegate(func)); parser = new LuaParser(context, new StringReader("test(123)")); parser.Parse(); Assert.AreEqual(123.0,res); }
public void MethodBinding() { LuaParser parser; var context = new LuaContext(); context.AddBasicLibrary(); context.AddIoLibrary(); double res = 0; var func = (Func <double, double>)((a) => { res = a; return(a + 1); }); context.SetGlobal("test", LuaObject.FromDelegate(func)); parser = new LuaParser(context, new StringReader("test(123)")); parser.Parse(); Assert.AreEqual(123.0, res); }
public SavedVariable(string path) { var fields = path.Split("."); foreach (var field in fields) { _path.Add(field); } Name = _path[fields.Length - 1]; var parser = LuaParser.Parse(File.ReadAllText(_filePath)); foreach (var s in _path) { parser = parser.Field(s); } Fields = parser.GetList(); }
private static LClosure Compile(string code) { var codeReader = new StringReader(code); var rawTokens = new LuaRawTokenizer(); var luaTokens = new LuaTokenizer(); rawTokens.Reset(codeReader); luaTokens.Reset(rawTokens); var parser = new LuaParser(); var builder = new SyntaxTreeBuilder(); builder.Start(); luaTokens.EnsureMoveNext(); parser.Reset(luaTokens, builder); parser.Parse(); var ast = builder.Finish(); return(_fastLuaCodeGen.Compile(ast, _fastLuaEnv)); }