private static Evaluator Initialize(StringBuilder builder) { var settings = new CompilerSettings(); var writer = new StringWriter(builder); var printer = new StreamReportPrinter(writer); var context = new CompilerContext(settings, printer); var evaluator = new Evaluator(context) { InteractiveBaseClass = typeof(Interactive), DescribeTypeExpressions = true }; evaluator.ReferenceAssembly(typeof(CSharpEvaluator).Assembly); foreach (var assembly in AssemblyLoader.NewAssemblies) { evaluator.ReferenceAssembly(assembly); } var nameSpaces = new[] { "System", "System.Linq", "System.Linq.Expressions", "System.Collections.Generic" }.Concat(InteractiveSection.Namespaces.Select(n => n.Namespace)); foreach (var nameSpace in nameSpaces) { evaluator.Run(string.Format("using {0};", nameSpace)); } return(evaluator); }
/// <summary> /// compile script /// </summary> /// <param name="code"></param> /// <returns></returns> public override bool Compile(string code) { IsCompiled = false; var sourceCode = GetScript(code); var compilerSettings = new CompilerSettings { GenerateDebugInfo = false, WarningsAreErrors = false, WarningLevel = 0, }; compilerSettings.AssemblyReferences.AddRange(new[] { "System.dll", "System.Core.dll", }); var errSb = new StringBuilder(); using (var writer = new StringWriter(errSb)) { var streamReport = new StreamReportPrinter(writer); var ctx = new CompilerContext(compilerSettings, streamReport) { }; _evaluator = new Evaluator(ctx); try { var result = _evaluator.Compile(sourceCode); } catch (Exception ex) { Console.WriteLine(ex); } var errs = errSb.ToString(); Errors = new List <string>(); using (var reader = new StringReader(errs)) { var line = default(string); while ((line = reader.ReadLine()) != null) { Errors.Add(line); } } if (Errors.Count == 0) { Type botFactoryType = (Type)_evaluator.Evaluate($"typeof({typeof(BotFactory).FullName});"); IsCompiled = CreateInstance(botFactoryType); } } return(IsCompiled); }
private void initEvalEngine() { if (mEngine == null) { // Initialize the expression evaluator mEngineReport = new StringBuilder(); var writer = new StringWriter(mEngineReport); var printer = new StreamReportPrinter(writer); var evalSettings = new CompilerSettings(); evalSettings.AssemblyReferences.Add("Recomedia_de.Logic.VisuWeb.dll"); var evalContext = new CompilerContext(evalSettings, new StreamReportPrinter(writer)); mEngine = new Evaluator(evalContext); // Using supported namespaces mEngine.Run("using System;" + Environment.NewLine + "using Recomedia_de.Logic.VisuWeb;"); // Declare all variables we will ever use string declText = getVariableDecls(); mEngine.Run(declText); // After we declared all needed variables is the time to get access to // them for later field updates const BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance; FieldInfo fieldInfo = typeof(Evaluator).GetField("fields", bindingFlags); mFields = fieldInfo.GetValue(mEngine) as FieldDictionary; // Start with nulled compiled expressions (lazy-init in Execute) mCompiled = new List <CompiledMethod>( Enumerable.Repeat <CompiledMethod>(null, mOutputs.Count)); } }
static int Main(string [] args) { var cmd = new CommandLineParser(Console.Out); cmd.UnknownOptionHandler += HandleExtraArguments; var settings = cmd.ParseArguments(args); if (settings == null) { return(1); } var startup_files = new string [settings.SourceFiles.Count]; int i = 0; foreach (var source in settings.SourceFiles) { startup_files [i++] = source.FullPathName; } settings.SourceFiles.Clear(); TextWriter agent_stderr = null; ReportPrinter printer; if (agent != null) { agent_stderr = new StringWriter(); printer = new StreamReportPrinter(agent_stderr); } else { printer = new ConsoleReportPrinter(); } var eval = new Evaluator(new CompilerContext(settings, printer)); eval.InteractiveBaseClass = typeof(InteractiveBaseShell); eval.DescribeTypeExpressions = true; CSharpShell shell; #if !ON_DOTNET if (attach.HasValue) { shell = new ClientCSharpShell(eval, attach.Value); } else if (agent != null) { new CSharpAgent(eval, agent, agent_stderr).Run(startup_files); return(0); } else #endif { shell = new CSharpShell(eval); } return(shell.Run(startup_files)); }
public void Setup() { var builder = new StringBuilder(); var writer = new StringWriter(builder); var printer = new StreamReportPrinter(writer); var settings = new CompilerSettings(); settings.AssemblyReferences.Add("DbTool.Testing"); var context = new CompilerContext(settings, printer); _evaluator = new Evaluator(context); }
public static MonoScript New(TextWriter rw, Type ib, string tmp = null) { var reporter = new StreamReportPrinter(rw); var ms = new MonoScript(BuildContext(reporter)); ms.reporter = reporter; ms.tw = rw; ms.tempdir = tmp; ms.ImportAssemblies(ms.ReferenceAssembly); AppDomain.CurrentDomain.AssemblyLoad += ms.asmLoaded; return(ms); }
static void Main(string[] args) { var _stringBuilder = new StringBuilder(); var _writer = new StringWriter(_stringBuilder); var settings = new CompilerSettings(); var printer = new StreamReportPrinter(_writer); var context = new CompilerContext(settings, printer); var evaluator = new Evaluator(context); evaluator.ReferenceAssembly(Assembly.GetExecutingAssembly()); var input = ""; while (input != "exit") { Console.Write(">"); input = Console.ReadLine(); if (input.EndsWith(";")) { var result = evaluator.Run(input); if (printer.ErrorsCount > 0 || printer.WarningsCount > 0) { Console.WriteLine(_stringBuilder); _stringBuilder.Clear(); } else { Console.WriteLine(result); } } else { object result; bool result_set; var ret = evaluator.Evaluate(input, out result, out result_set); if (printer.ErrorsCount > 0 || printer.WarningsCount > 0) { Console.WriteLine(_stringBuilder); _stringBuilder.Clear(); } else if (result != null) { Console.WriteLine(result); } } } }
private static CompilerContext BuildContext(TextWriter tw) { var reporter = new StreamReportPrinter(tw); var settings = new CompilerSettings { Version = LanguageVersion.Experimental, GenerateDebugInfo = false, StdLib = true, Target = Target.Library, WarningLevel = 0, EnhancedWarnings = false }; return(new CompilerContext(settings, reporter)); }
public UCCE() { _stringBuilder = new StringBuilder(); TextWriter _writer = new StringWriter(_stringBuilder); CompilerSettings settings = new CompilerSettings(); settings.LoadDefaultReferences = false; settings.StdLib = false; ReportPrinter printer = new StreamReportPrinter(_writer); CompilerContext ctx = new CompilerContext(settings, printer); _evaluator = new Evaluator(ctx); InitEvaluator(); RegisterTypes(BuiltInTypes); RegisterTypes(AdditionalTypes); }
public void Init() { var printer = new StreamReportPrinter(_stringWriter); var settings = new CompilerSettings(); settings.AssemblyReferences.AddRange(InitialAssemblies); var report = new Report(printer); _evaluator = new Evaluator(settings, report) { InteractiveBaseClass = typeof(CodeGeneratorInteractive), DescribeTypeExpressions = true, }; TryUsing(InitialUsings); CodeGeneratorInteractive.Evaluator = _evaluator; CodeGeneratorInteractive.Output = _stringWriter; }
public void Init() { var printer = new StreamReportPrinter(_stringWriter); var settings = new CompilerSettings(); settings.AssemblyReferences.AddRange(InitialAssemblies); var context = new CompilerContext(settings, printer); _evaluator = new Evaluator(context) { InteractiveBaseClass = typeof(DbToolInteractive), DescribeTypeExpressions = true, }; ReferenceAssemblies(typeof(DynamicSqlQuery).Assembly); TryUsing(InitialUsings); DbToolInteractive.Evaluator = _evaluator; DbToolInteractive.Output = _stringWriter; }
public MonoCSharpExecutor() { _reportBuilder = new StringBuilder(); var writer = new StringWriter(_reportBuilder); var printer = new StreamReportPrinter(writer); var settings = new CompilerSettings(); var context = new CompilerContext(settings, printer); _evaluator = new Evaluator(context); _evaluator.InteractiveBaseClass = typeof(InteractiveStuff); _evaluator.ReferenceAssembly(typeof(HttpContext).Assembly); _evaluator.ReferenceAssembly(typeof(VisualFarmRepo).Assembly); _evaluator.ReferenceAssembly(typeof(BondegardFacade).Assembly); _evaluator.ReferenceAssembly(typeof(IVFSConfig).Assembly); Execute("using System;"); Execute("using System.Linq;"); Execute("using System.Web;"); Execute("using VisualFarmStudio.Core.Domain;"); Execute("using VisualFarmStudio.Core.Repository;"); Execute("using VisualFarmStudio.Lib.Model;"); Execute("using VisualFarmStudio.Lib.Containers;"); }
void Start() { try { if (GetComponent <SceneViewerFlag>() == null) { gameObject.AddComponent <SceneViewerFlag>(); } if (GetComponent <RectTransform>() == null) { gameObject.AddComponent <RectTransform>(); } gameObject.AddComponent <Image>().color = new Color(0.7f, 0.7f, 0.7f, 0.3f); var thisR = GetComponent <RectTransform>(); thisR.anchorMin = new Vector2(0.5f, 0); thisR.anchorMax = new Vector2(0.5f, 0); thisR.pivot = new Vector2(0.5f, 0); thisR.anchoredPosition = Vector2.zero; thisR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); thisR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height - 100); var codeInput = new GameObject("CodeInput"); codeInput.AddComponent <SceneViewerFlag>(); codeInput.transform.SetParent(transform); codeInput.AddComponent <Image>().color = Color.white; var codeInputR = codeInput.GetComponent <RectTransform>(); codeInputR.anchorMin = Vector2.zero; codeInputR.anchorMax = Vector2.right; codeInputR.pivot = new Vector2(0.5f, 0); codeInputR.anchoredPosition = Vector2.zero; codeInputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); codeInputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, ViewerCreater.size); var codeInputText = new GameObject("Text"); codeInputText.transform.SetParent(codeInput.transform); var codeInputTextT = codeInputText.AddComponent <Text>(); codeInputTextT.font = ViewerCreater.font; codeInputTextT.fontSize = ViewerCreater.fontSize; codeInputTextT.color = Color.black; var codeInputTextR = codeInputText.GetComponent <RectTransform>(); codeInputTextR.anchorMin = Vector2.zero; codeInputTextR.anchorMax = Vector2.one; codeInputTextR.pivot = new Vector2(0.5f, 0.5f); codeInputTextR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width - 10); codeInputTextR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, ViewerCreater.size - 10); codeInputTextR.anchoredPosition = Vector2.zero; var output = new GameObject("Output"); output.transform.parent = transform; var outputS = output.AddComponent <ScrollRect>(); var outputR = output.GetComponent <RectTransform>(); outputR.anchorMin = Vector2.up; outputR.anchorMax = Vector2.one; outputR.pivot = new Vector2(0.5f, 1); outputR.anchoredPosition = new Vector2(0, -10); outputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); outputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height - ViewerCreater.size - 120); var viewport = new GameObject("Viewport"); viewport.transform.parent = output.transform; viewportR = viewport.AddComponent <RectTransform>(); viewportR.anchorMin = Vector2.zero; viewportR.anchorMax = Vector2.one; viewportR.pivot = new Vector2(0, 1); viewportR.anchoredPosition = Vector2.zero; viewportR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); viewportR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height - ViewerCreater.size - 120); viewport.AddComponent <Mask>(); viewport.AddComponent <Image>().color = Color.white; var outputText = new GameObject("OutputText"); outputText.transform.parent = viewport.transform; outputT = outputText.AddComponent <Text>(); outputT.font = ViewerCreater.font; outputT.fontSize = ViewerCreater.fontSize; outputT.color = Color.black; outputT.text = "Output"; outputTR = outputText.GetComponent <RectTransform>(); outputTR = outputT.rectTransform; outputTR.anchorMin = new Vector2(0.5f, 1); outputTR.anchorMax = new Vector2(0.5f, 1); outputTR.pivot = new Vector2(0.5f, 1); outputTR.anchoredPosition = new Vector2(5, -5); outputTR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width - 10); outputT.gameObject.AddComponent <ContentSizeFitter>().verticalFit = ContentSizeFitter.FitMode.PreferredSize; outputS.content = outputTR; outputS.movementType = ScrollRect.MovementType.Clamped; outputS.decelerationRate = 0.5f; outputS.viewport = viewportR; codeInputTextT.supportRichText = false; codeInputI = codeInput.AddComponent <InputField>(); codeInputI.textComponent = codeInputTextT; var type = typeof(Debug); var s_Logger = type.GetField("s_Logger", BindingFlags.NonPublic | BindingFlags.Static); s_Logger.SetValue(type, new InGameLogger(Debug.unityLogger.logHandler)); InGameLogger.Logging = log => { switch (log.logType) { case LogType.Error: WriteLine($"<color=#ee0000ff>UnityError:\n{log.message}</color>"); break; case LogType.Assert: WriteLine($"<color=#ee0000ff>UnityAssert:\n{log.message}</color>"); break; case LogType.Warning: WriteLine($"<color=#55dd00ff>UnityWarning:\n{log.message}</color>"); break; case LogType.Log: WriteLine($"<color=#aaaaaaff>UnityLog:\n{log.message}</color>"); break; case LogType.Exception: WriteLine($"<color=#ee0000ff>UnityException:\n{log.message}</color>"); break; default: break; } }; var writer = new StringWriter(); var printer = new StreamReportPrinter(writer); var compilerContext = new CompilerContext(new CompilerSettings(), printer); evaluator = new Evaluator(compilerContext); evaluator.ReferenceAssembly(Assembly.Load("UnityEngine.CoreModule")); evaluator.ReferenceAssembly(Assembly.Load("UnityEngine.UI")); evaluator.Run("using System;using UnityEngine;using UnityEngine.UI;using UnityEngine.Events;using System.Reflection;using System.Collections;using System.Collections.Generic;"); codeInputI.onEndEdit.AddListener(new UnityAction <string>(str => { if (str == "") { return; } try { var method = evaluator.Compile(str); writer.Flush(); var builder = writer.GetStringBuilder(); var s = builder.ToString(); builder.Clear(); if (printer.ErrorsCount > 0) { WriteLine($"{str}\n<color=#ff0000ff>{s}</color>"); return; } object result = null; method.Invoke(ref result); if (result == null) { result = "Done"; } WriteLine($"{str}\n<color=#00aa00ff>{result}</color>"); } catch (Exception e) { WriteLine($"{str}\n<color=#ff0000ff>{e.Message}</color>"); } })); } catch (Exception e) { Utils.LogError(e.ToString(), "Error in InGameConsole Start"); } }
void Compile() { if (m_Xt_Del == null && m_X__Del == null) { using (var err = new StringWriter()) { var Settings = new CompilerSettings(); #if DEBUG Settings.Optimize = false; #else Settings.Optimize = false; #endif var Printer = new StreamReportPrinter(err); CompilerContext cmpCont = new CompilerContext(Settings, Printer); Evaluator eval = new Evaluator(cmpCont); eval.InteractiveBaseClass = typeof(Object); Assembly[] allAssis = BoSSS.Solution.Application.GetAllAssemblies().ToArray(); foreach (var assi in allAssis) { eval.ReferenceAssembly(assi); } eval.Compile(@" using System; using System.Collections.Generic; using System.Linq; using ilPSP; using ilPSP.Utils; using BoSSS.Platform; using BoSSS.Platform.Utils; using BoSSS.Foundation; using BoSSS.Foundation.Grid; using BoSSS.Foundation.IO; using BoSSS.Solution; using BoSSS.Solution.Utils; "); if (!m_AdditionalPrefixCode.IsEmptyOrWhite()) { try { object figdi; bool dummy; eval.Evaluate(m_AdditionalPrefixCode, out figdi, out dummy); } catch (Exception e) { throw new AggregateException(e.GetType().Name + " during the interpretation of code snippet '" + m_AdditionalPrefixCode + "'" + err.NewLine + "Error(s): " + err.NewLine + err.ToString(), e); } } object formula; { try { string Prefix = m_TimeDep ? "Func<double[], double, double>" : "Func<double[], double>"; Prefix = Prefix + " myfunc = "; object result; bool result_set; string ans = eval.Evaluate(Prefix + m_Code + ";", out result, out result_set); formula = eval.Evaluate("myfunc;"); } catch (Exception e) { throw new AggregateException(e.GetType().Name + " during the interpretation of code snippet '" + m_Code + "'" + err.NewLine + "Error(s): " + err.NewLine + err.ToString(), e); } } if (formula != null && cmpCont.Report.Errors == 0) { if (formula is Func <double[], double, double> ) { m_Xt_Del = (Func <double[], double, double>)formula; return; } if (formula is Func <double[], double> ) { m_X__Del = (Func <double[], double>)formula; return; } throw new ArgumentException("Unable to cast result of code snippet '" + m_Code + " to a valid expression (Func<double[],double,double> or Func<double[],double>)." + err.NewLine + "Error(s): " + err.NewLine + err.ToString()); } } } }
static int Main(string [] args) { if (!SplitDriverAndScriptArguments(ref args, out script_args)) { return(1); } var cmd = new CommandLineParser(Console.Out); cmd.UnknownOptionHandler += HandleExtraArguments; // Enable unsafe code by default var settings = new CompilerSettings() { Unsafe = true }; if (!cmd.ParseArguments(settings, args)) { return(1); } var startup_files = new string [settings.SourceFiles.Count]; int i = 0; foreach (var source in settings.SourceFiles) { startup_files [i++] = source.OriginalFullPathName; } settings.SourceFiles.Clear(); TextWriter agent_stderr = null; ReportPrinter printer; if (agent != null) { agent_stderr = new StringWriter(); printer = new StreamReportPrinter(agent_stderr); } else { printer = new ConsoleReportPrinter(); } var eval = new Evaluator(new CompilerContext(settings, printer)); eval.InteractiveBaseClass = typeof(InteractiveBaseShell); eval.DescribeTypeExpressions = true; eval.WaitOnTask = true; CSharpShell shell; #if !ON_DOTNET if (attach.HasValue) { shell = new ClientCSharpShell_v1(eval, attach.Value); } else if (agent != null) { new CSharpAgent(eval, agent, agent_stderr).Run(startup_files); return(0); } else #endif if (target_host != null) { shell = new ClientCSharpShell(eval, target_host, target_port); } else { shell = new CSharpShell(eval); } return(shell.Run(startup_files)); }
private void Awake() { try { Instance = this; if (GetComponent <SceneViewerFlag>() == null) { gameObject.AddComponent <SceneViewerFlag>(); } if (GetComponent <RectTransform>() == null) { gameObject.AddComponent <RectTransform>(); } var color = new Color(0.7f, 0.7f, 0.7f, 0.3f); gameObject.AddComponent <Image>().color = color; var thisR = GetComponent <RectTransform>(); thisR.anchorMin = new Vector2(0.5f, 0); thisR.anchorMax = new Vector2(0.5f, 0); thisR.pivot = new Vector2(0.5f, 0); thisR.anchoredPosition = Vector2.zero; thisR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); thisR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height - 100); var codeInput = new GameObject("CodeInput"); codeInput.AddComponent <SceneViewerFlag>(); codeInput.transform.SetParent(transform); codeInput.AddComponent <Image>().color = color; var codeInputR = codeInput.GetComponent <RectTransform>(); codeInputR.anchorMin = Vector2.zero; codeInputR.anchorMax = Vector2.right; codeInputR.pivot = new Vector2(0.5f, 0); codeInputR.anchoredPosition = Vector2.zero; codeInputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); codeInputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, ViewerCreator.Size); var codeInputText = new GameObject("Text"); codeInputText.transform.SetParent(codeInput.transform); var codeInputTextT = codeInputText.AddComponent <Text>(); codeInputTextT.font = ViewerCreator.font; codeInputTextT.fontSize = ViewerCreator.FontSize; codeInputTextT.color = Color.black; var codeInputTextR = codeInputText.GetComponent <RectTransform>(); codeInputTextR.anchorMin = Vector2.zero; codeInputTextR.anchorMax = Vector2.one; codeInputTextR.pivot = new Vector2(0.5f, 0.5f); codeInputTextR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width - 10); codeInputTextR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, ViewerCreator.Size - 10); codeInputTextR.anchoredPosition = Vector2.zero; var output = new GameObject("Output"); output.transform.parent = transform; var outputS = output.AddComponent <ScrollRect>(); var outputR = output.GetComponent <RectTransform>(); outputR.anchorMin = Vector2.up; outputR.anchorMax = Vector2.one; outputR.pivot = new Vector2(0.5f, 1); outputR.anchoredPosition = new Vector2(0, -10); outputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); outputR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height - ViewerCreator.Size - 120); var viewport = new GameObject("Viewport"); viewport.transform.parent = output.transform; viewportR = viewport.AddComponent <RectTransform>(); viewportR.anchorMin = Vector2.zero; viewportR.anchorMax = Vector2.one; viewportR.pivot = new Vector2(0, 1); viewportR.anchoredPosition = Vector2.zero; viewportR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width); viewportR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Screen.height - ViewerCreator.Size - 120); viewport.AddComponent <Mask>(); viewport.AddComponent <Image>().color = color; var outputText = new GameObject("OutputText"); outputText.transform.parent = viewport.transform; outputT = outputText.AddComponent <Text>(); outputT.font = ViewerCreator.font; outputT.fontSize = ViewerCreator.FontSize; outputT.color = Color.black; outputT.text = "Output"; outputTR = outputText.GetComponent <RectTransform>(); outputTR = outputT.rectTransform; outputTR.anchorMin = new Vector2(0.5f, 1); outputTR.anchorMax = new Vector2(0.5f, 1); outputTR.pivot = new Vector2(0.5f, 1); outputTR.anchoredPosition = new Vector2(5, -5); outputTR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width - 10); outputT.gameObject.AddComponent <ContentSizeFitter>().verticalFit = ContentSizeFitter.FitMode.PreferredSize; outputS.content = outputTR; outputS.movementType = ScrollRect.MovementType.Clamped; outputS.decelerationRate = 0.5f; outputS.viewport = viewportR; outputS.scrollSensitivity = 30f; codeInputTextT.supportRichText = false; codeInputI = codeInput.AddComponent <InputField>(); codeInputI.textComponent = codeInputTextT; var autoComplete = new GameObject("AutoComplete"); autoComplete.transform.parent = transform; var autoCompleteS = autoComplete.AddComponent <ScrollRect>(); var autoCompleteR = autoComplete.GetComponent <RectTransform>(); autoCompleteR.anchorMin = Vector2.zero; autoCompleteR.anchorMax = Vector2.zero; autoCompleteR.pivot = Vector2.zero; autoCompleteR.anchoredPosition = new Vector2(0, 40); autoCompleteR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 300); autoCompleteR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0); var aViewport = new GameObject("Viewport"); aViewport.transform.SetParent(autoCompleteR); var aViewportR = aViewport.AddComponent <RectTransform>(); aViewportR.anchorMin = Vector2.zero; aViewportR.anchorMax = Vector2.one; aViewportR.pivot = new Vector2(0, 1); aViewportR.anchoredPosition = Vector2.zero; aViewportR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 300); aViewportR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0); aViewport.AddComponent <Mask>(); aViewport.AddComponent <Image>().color = color; var content = new GameObject("Content"); content.transform.SetParent(aViewportR); var contentR = content.AddComponent <RectTransform>(); contentR.anchorMin = Vector2.zero; contentR.anchorMax = Vector2.one; contentR.pivot = new Vector2(0, 1); contentR.anchoredPosition = Vector2.zero; contentR.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 300); contentR.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 0); AutoComplete.ScrollView = autoCompleteR; AutoComplete.Content = contentR; autoCompleteS.movementType = ScrollRect.MovementType.Clamped; autoCompleteS.decelerationRate = 0.5f; autoCompleteS.viewport = aViewportR; autoCompleteS.content = contentR; autoCompleteS.scrollSensitivity = 30f; var type = typeof(Debug); var sLogger = type.GetField("s_Logger", BindingFlags.NonPublic | BindingFlags.Static); sLogger?.SetValue(type, new Logger(Debug.unityLogger.logHandler)); Logger.Logging = log => { switch (log.logType) { case LogType.Error: WriteLine($"<color=#ee0000ff>UnityError:\n{log.message}</color>"); break; case LogType.Assert: WriteLine($"<color=#ee0000ff>UnityAssert:\n{log.message}</color>"); break; case LogType.Warning: WriteLine($"<color=#55dd00ff>UnityWarning:\n{log.message}</color>"); break; case LogType.Log: WriteLine($"<color=#444444ff>UnityLog:\n{log.message}</color>"); break; case LogType.Exception: WriteLine($"<color=#ee0000ff>UnityException:\n{log.message}</color>"); break; } }; AutoComplete.Initialize(); AutoComplete.OnClick += AutoCompleteClick; ConsoleCommand.Initialize(); writer = new StringWriter(); printer = new StreamReportPrinter(writer); var compilerContext = new CompilerContext(new CompilerSettings(), printer); evaluator = new Evaluator(compilerContext); foreach (var assembly in AutoComplete.Assemblies) { evaluator.ReferenceAssembly(assembly); } evaluator.Run("using System;using UnityEngine;using UnityEngine.UI;using UnityEngine.Events;using System.Reflection;using System.Collections;using System.Collections.Generic;using System.Linq;using System.IO;using System.Text;"); codeInputI.onValueChanged.AddListener(str => { caretPosition = codeInputI.caretPosition; str = str.Substring(0, caretPosition); if (str == string.Empty) { autoComplete.SetActive(false); return; } //autoCompleteR.anchoredPosition = new Vector2(codeInputI.caretPosition * ViewerCreator.FontSize, autoCompleteR.anchoredPosition.y); var quo = false; startIndex = 0; for (var i = 0; i < str.Length; i++) { if (str[i] == '"') { quo = !quo; } if (str[i] == ';' || str[i] == '(' || str[i] == '[' || str[i] == '{' || str[i] == ',' || str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' || str[i] == '=' || str[i] == '|' || str[i] == '&' || str[i] == ':' || str[i] == '<' || str[i] == '>') { if (!quo) { startIndex = i + 1; } } } if (quo) { return; } str = str.Substring(startIndex); // 找到最后一个语句的位置,从此断开 endIndex = 0; for (var i = 0; i < str.Length; i++) { if (str[i] == '"') { quo = !quo; } if (str[i] == '.') { if (!quo && (i == str.Length - 1 || !char.IsDigit(str[i + 1]))) { var flag = true; for (var j = i + 1; j < str.Length; j++) { if (!char.IsLetterOrDigit(str[j]) && str[j] != '_') { flag = false; break; } } if (flag) { endIndex = i; // 找到最后一个.的位置 } } } } if (endIndex == 0) { AutoComplete.Update(null, str); } else { var prefix = str.Substring(0, endIndex); var t = AutoComplete.ParseType(prefix); if (t == null) { var method = evaluator.Compile(prefix); writer.Flush(); var builder = writer.GetStringBuilder(); if (printer.ErrorsCount > 0) { return; } builder.Clear(); t = method.Method.ReturnType; if (printer.ErrorsCount == 0 && t != typeof(void)) { AutoComplete.Update(t, str.Substring(endIndex + 1)); } } else { AutoComplete.Update(t, str.Substring(endIndex + 1)); } } }); if (PlayerPrefs.HasKey("InGameConsoleCommandHistory")) { foreach (var command in PlayerPrefs.GetString("InGameConsoleCommandHistory").Split('\n')) { commandList.AddLast(command); } } } catch (Exception e) { Utils.LogError(e.ToString(), "Error in Console Start"); } }