/// <summary> /// Optional initialization for the Evaluator. /// </summary> /// <remarks> /// Initializes the Evaluator with the command line /// options that would be processed by the command /// line compiler. Only the first call to /// InitAndGetStartupFiles or Init will work, any future /// invocations are ignored. /// /// You can safely avoid calling this method if your application /// does not need any of the features exposed by the command line /// interface. /// /// This method return an array of strings that contains any /// files that were specified in `args'. /// </remarks> public static string [] InitAndGetStartupFiles(string [] args) { lock (evaluator_lock){ if (inited) { return(new string [0]); } driver = Driver.Create(args, false, new ConsoleReportPrinter()); if (driver == null) { throw new Exception("Failed to create compiler driver with the given arguments"); } RootContext.ToplevelTypes = new ModuleContainer(ctx, true); driver.ProcessDefaultConfig(); ArrayList startup_files = new ArrayList(); foreach (CompilationUnit file in Location.SourceFiles) { startup_files.Add(file.Path); } CompilerCallableEntryPoint.Reset(); RootContext.ToplevelTypes = new ModuleContainer(ctx, true); driver.LoadReferences(); RootContext.EvalMode = true; inited = true; return((string [])startup_files.ToArray(typeof(string))); } }
void Init() { var loader = new DynamicLoader(importer, ctx); CompilerCallableEntryPoint.Reset(); RootContext.ToplevelTypes = module; //var startup_files = new List<string> (); //foreach (CompilationUnit file in Location.SourceFiles) // startup_files.Add (file.Path); loader.LoadReferences(module); ctx.BuiltinTypes.CheckDefinitions(module); module.InitializePredefinedTypes(); inited = true; }
/// <summary> /// Optional initialization for the Evaluator. /// </summary> /// <remarks> /// Initializes the Evaluator with the command line /// options that would be processed by the command /// line compiler. Only the first call to /// InitAndGetStartupFiles or Init will work, any future /// invocations are ignored. /// /// You can safely avoid calling this method if your application /// does not need any of the features exposed by the command line /// interface. /// /// This method return an array of strings that contains any /// files that were specified in `args'. /// /// If the unknownOptionParser is not null, this function is invoked /// with the current args array and the index of the option that is not /// known. A value of true means that the value was processed, otherwise /// it will be reported as an error /// </remarks> public static string [] InitAndGetStartupFiles(string [] args, Func <string [], int, int> unknownOptionParser) { lock (evaluator_lock) { if (inited) { return(new string [0]); } CompilerCallableEntryPoint.Reset(); var crp = new ConsoleReportPrinter(); driver = Driver.Create(args, false, unknownOptionParser, crp); if (driver == null) { throw new Exception("Failed to create compiler driver with the given arguments"); } crp.Fatal = driver.fatal_errors; ctx = driver.ctx; RootContext.ToplevelTypes = new ModuleContainer(ctx); var startup_files = new List <string> (); foreach (CompilationUnit file in Location.SourceFiles) { startup_files.Add(file.Path); } CompilerCallableEntryPoint.PartialReset(); var importer = new ReflectionImporter(ctx.BuildinTypes); loader = new DynamicLoader(importer, ctx); RootContext.ToplevelTypes.SetDeclaringAssembly(new AssemblyDefinitionDynamic(RootContext.ToplevelTypes, "temp")); loader.LoadReferences(RootContext.ToplevelTypes); ctx.BuildinTypes.CheckDefinitions(RootContext.ToplevelTypes); RootContext.ToplevelTypes.InitializePredefinedTypes(); RootContext.EvalMode = true; inited = true; return(startup_files.ToArray()); } }
/// <summary> /// Optional initialization for the Evaluator. /// </summary> /// <remarks> /// Initializes the Evaluator with the command line options /// that would be processed by the command line compiler. Only /// the first call to Init will work, any future invocations are /// ignored. /// /// You can safely avoid calling this method if your application /// does not need any of the features exposed by the command line /// interface. /// </remarks> public static void Init(string [] args) { lock (evaluator_lock){ if (inited) { return; } RootContext.Version = LanguageVersion.Default; driver = Driver.Create(args, false); if (driver == null) { throw new Exception("Failed to create compiler driver with the given arguments"); } driver.ProcessDefaultConfig(); CompilerCallableEntryPoint.Reset(); Driver.LoadReferences(); RootContext.EvalMode = true; inited = true; } }