private string Compile(List <Stmt> statements) { //RoslynGenerate roslynGenerate = new(); // Don't turn on until ready to emit Roslyn. // roslynGenerate.Generate(statements); var interpreter = new Interpreter.JukaInterpreter(serviceProvider); Resolver?resolver = new(interpreter); resolver.Resolve(statements); var currentOut = Console.Out; // Action<Interpreter.Interpreter, List<Stmt>> wrap; using (StringWriter stringWriter = new StringWriter()) { Console.SetOut(stringWriter); interpreter.Interpert(statements); String ConsoleOutput = stringWriter.ToString(); Console.SetOut(currentOut); return(ConsoleOutput); } }
internal Resolver(JukaInterpreter interpreter) { this.interpreter = interpreter; this.ServiceProvider = interpreter.ServiceProvider; if (this.ServiceProvider != null) { this.compilerError = this.ServiceProvider?.GetService <ICompilerError>(); } }
public object Call(JukaInterpreter interpreter, List <object> arguments) { JukaEnvironment environment = new(closure); for (int i = 0; i < declaration.Params.Count; i++) { string?name = declaration.Params[i].parameterName.ToString(); if (string.IsNullOrEmpty(name)) { throw new ArgumentException("unable to call function"); } object value = arguments[i]; environment.Define(name, value); } try { interpreter.ExecuteBlock(declaration.body, environment); } catch (Return ex) { if (isInitializer) { return(closure.GetAt(0, "this")); } return(ex.value); } if (isInitializer) { return(closure.GetAt(0, "this")); } return(null); }