protected override void SetCustomOption(String name, Object value){ try{ if (String.Compare(name, "CLSCompliant", StringComparison.OrdinalIgnoreCase) == 0) this.isCLSCompliant = (bool)value; else if (String.Compare(name, "fast", StringComparison.OrdinalIgnoreCase) == 0) this.doFast = (bool)value; else if (String.Compare(name, "output", StringComparison.OrdinalIgnoreCase) == 0){ if (value is String){ this.PEFileName = (String)value; this.doSaveAfterCompile = true; } }else if (String.Compare(name, "PEFileKind", StringComparison.OrdinalIgnoreCase) == 0) this.PEFileKind = (PEFileKinds)value; else if (String.Compare(name, "PortableExecutableKind", StringComparison.OrdinalIgnoreCase) == 0) this.PEKindFlags = (PortableExecutableKinds)value; else if (String.Compare(name, "ImageFileMachine", StringComparison.OrdinalIgnoreCase) == 0) this.PEMachineArchitecture = (ImageFileMachine)value; else if (String.Compare(name, "ReferenceLoaderAPI", StringComparison.OrdinalIgnoreCase) == 0) { String loaderAPI = (string)value; if (String.Compare(loaderAPI, "LoadFrom", StringComparison.OrdinalIgnoreCase) == 0) this.ReferenceLoaderAPI = LoaderAPI.LoadFrom; else if (String.Compare(loaderAPI, "LoadFile", StringComparison.OrdinalIgnoreCase) == 0) this.ReferenceLoaderAPI = LoaderAPI.LoadFile; else if (String.Compare(loaderAPI, "ReflectionOnlyLoadFrom", StringComparison.OrdinalIgnoreCase) == 0) this.ReferenceLoaderAPI = LoaderAPI.ReflectionOnlyLoadFrom; else throw new VsaException(VsaError.OptionInvalid); } else if (String.Compare(name, "print", StringComparison.OrdinalIgnoreCase) == 0) this.doPrint = (bool)value; else if (String.Compare(name, "UseContextRelativeStatics", StringComparison.OrdinalIgnoreCase) == 0) this.doCRS = (bool)value; // the next two are needed because of the ICompiler interface. They should not fail even though they may not do anything else if (String.Compare(name, "optimize", StringComparison.OrdinalIgnoreCase) == 0) return; else if (String.Compare(name, "define", StringComparison.OrdinalIgnoreCase) == 0) return; else if (String.Compare(name, "defines", StringComparison.OrdinalIgnoreCase) == 0) this.Defines = (Hashtable)value; else if (String.Compare(name, "ee", StringComparison.OrdinalIgnoreCase) == 0) VsaEngine.executeForJSEE = (Boolean)value; else if (String.Compare(name, "version", StringComparison.OrdinalIgnoreCase) == 0) this.versionInfo = (Version)value; else if (String.Compare(name, "VersionSafe", StringComparison.OrdinalIgnoreCase) == 0) this.versionSafe = (Boolean)value; else if (String.Compare(name, "libpath", StringComparison.OrdinalIgnoreCase) == 0) this.libpath = (String)value; else if (String.Compare(name, "warnaserror", StringComparison.OrdinalIgnoreCase) == 0) this.doWarnAsError = (bool)value; else if (String.Compare(name, "WarningLevel", StringComparison.OrdinalIgnoreCase) == 0) this.nWarningLevel = (int)value; else if (String.Compare(name, "managedResources", StringComparison.OrdinalIgnoreCase) == 0) this.managedResources = (ICollection)value; else if (String.Compare(name, "alwaysGenerateIL", StringComparison.OrdinalIgnoreCase) == 0) this.alwaysGenerateIL = (bool)value; else if (String.Compare(name, "DebugDirectory", StringComparison.OrdinalIgnoreCase) == 0){ // use null to turn off SaveSourceState source generation if (value == null){ this.debugDirectory = null; return; } string dir = value as string; if (dir == null) throw new VsaException(VsaError.OptionInvalid); try{ dir = Path.GetFullPath(dir + Path.DirectorySeparatorChar); if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); }catch(Exception e){ // we couldn't create the specified directory throw new VsaException(VsaError.OptionInvalid, "", e); }catch{ // we couldn't create the specified directory throw new VsaException(VsaError.OptionInvalid); } this.debugDirectory = dir; }else if (String.Compare(name, "AutoRef", StringComparison.OrdinalIgnoreCase) == 0) this.autoRef = (bool)value; else throw new VsaException(VsaError.OptionNotSupported); }catch(VsaException){ throw; }catch{ throw new VsaException(VsaError.OptionInvalid); } }
/// <summary> /// Initializes the <see cref="PluginManager"/> /// </summary> /// <param name="loader">Instance of the mod loader.</param> /// <param name="sharedContext">Used only for testing. Sets shared load context used for plugins.</param> public PluginManager(Loader loader, LoadContext sharedContext = null) { _loader = loader; LoaderApi = new LoaderAPI(_loader); _sharedContext = sharedContext ?? LoadContext.BuildSharedLoadContext(); }
public VsaEngine(bool fast) : base("JScript", VsaEngine.engineVersion, true){ this.alwaysGenerateIL = false; this.autoRef = false; this.doCRS = false; this.doFast = fast; this.genDebugInfo = false; this.genStartupClass = true; this.doPrint = false; this.doWarnAsError = false; this.nWarningLevel = 4; this.isCLSCompliant = false; this.versionSafe = false; this.PEFileName = null; this.PEFileKind = PEFileKinds.Dll; this.PEKindFlags = PortableExecutableKinds.ILOnly; this.PEMachineArchitecture = ImageFileMachine.I386; this.ReferenceLoaderAPI = LoaderAPI.LoadFrom; this.errorCultureInfo = null; this.libpath = null; this.libpathList = null; this.globalScope = null; this.vsaItems = new VsaItems(this); this.packages = null; this.scopes = null; this.classCounter = 0; this.implicitAssemblies = null; this.implicitAssemblyCache = null; this.cachedTypeLookups = null; this.isEngineRunning = false; this.isEngineCompiled = false; this.isCompilerSet = false; this.isClosed = false; this.runningThread = null; this.compilerGlobals = null; this.globals = null; this.runtimeDirectory = null; Globals.contextEngine = this; this.runtimeAssembly = null; this.typenameTable = null; }
protected override void SetCustomOption(string name, object value) { try { if (string.Compare(name, "CLSCompliant", StringComparison.OrdinalIgnoreCase) == 0) { this.isCLSCompliant = (bool) value; } else if (string.Compare(name, "fast", StringComparison.OrdinalIgnoreCase) == 0) { this.doFast = (bool) value; } else if (string.Compare(name, "output", StringComparison.OrdinalIgnoreCase) == 0) { if (value is string) { this.PEFileName = (string) value; this.doSaveAfterCompile = true; } } else if (string.Compare(name, "PEFileKind", StringComparison.OrdinalIgnoreCase) == 0) { this.PEFileKind = (PEFileKinds) value; } else if (string.Compare(name, "PortableExecutableKind", StringComparison.OrdinalIgnoreCase) == 0) { this.PEKindFlags = (PortableExecutableKinds) value; } else if (string.Compare(name, "ImageFileMachine", StringComparison.OrdinalIgnoreCase) == 0) { this.PEMachineArchitecture = (ImageFileMachine) value; } else if (string.Compare(name, "ReferenceLoaderAPI", StringComparison.OrdinalIgnoreCase) == 0) { string strA = (string) value; if (string.Compare(strA, "LoadFrom", StringComparison.OrdinalIgnoreCase) != 0) { if (string.Compare(strA, "LoadFile", StringComparison.OrdinalIgnoreCase) != 0) { if (string.Compare(strA, "ReflectionOnlyLoadFrom", StringComparison.OrdinalIgnoreCase) != 0) { throw new JSVsaException(JSVsaError.OptionInvalid); } this.ReferenceLoaderAPI = LoaderAPI.ReflectionOnlyLoadFrom; } else { this.ReferenceLoaderAPI = LoaderAPI.LoadFile; } } else { this.ReferenceLoaderAPI = LoaderAPI.LoadFrom; } } else if (string.Compare(name, "print", StringComparison.OrdinalIgnoreCase) == 0) { this.doPrint = (bool) value; } else if (string.Compare(name, "UseContextRelativeStatics", StringComparison.OrdinalIgnoreCase) == 0) { this.doCRS = (bool) value; } else if ((string.Compare(name, "optimize", StringComparison.OrdinalIgnoreCase) != 0) && (string.Compare(name, "define", StringComparison.OrdinalIgnoreCase) != 0)) { if (string.Compare(name, "defines", StringComparison.OrdinalIgnoreCase) == 0) { this.Defines = (Hashtable) value; } else if (string.Compare(name, "ee", StringComparison.OrdinalIgnoreCase) == 0) { executeForJSEE = (bool) value; } else if (string.Compare(name, "version", StringComparison.OrdinalIgnoreCase) == 0) { this.versionInfo = (Version) value; } else if (string.Compare(name, "VersionSafe", StringComparison.OrdinalIgnoreCase) == 0) { this.versionSafe = (bool) value; } else if (string.Compare(name, "libpath", StringComparison.OrdinalIgnoreCase) == 0) { this.libpath = (string) value; } else if (string.Compare(name, "warnaserror", StringComparison.OrdinalIgnoreCase) == 0) { this.doWarnAsError = (bool) value; } else if (string.Compare(name, "WarningLevel", StringComparison.OrdinalIgnoreCase) == 0) { this.nWarningLevel = (int) value; } else if (string.Compare(name, "win32resource", StringComparison.OrdinalIgnoreCase) == 0) { this.win32resource = (string) value; } else if (string.Compare(name, "managedResources", StringComparison.OrdinalIgnoreCase) == 0) { this.managedResources = (ICollection) value; } else if (string.Compare(name, "alwaysGenerateIL", StringComparison.OrdinalIgnoreCase) == 0) { this.alwaysGenerateIL = (bool) value; } else if (string.Compare(name, "DebugDirectory", StringComparison.OrdinalIgnoreCase) == 0) { if (value == null) { this.debugDirectory = null; } else { string path = value as string; if (path == null) { throw new JSVsaException(JSVsaError.OptionInvalid); } try { path = Path.GetFullPath(path + Path.DirectorySeparatorChar); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } } catch (Exception exception) { throw new JSVsaException(JSVsaError.OptionInvalid, "", exception); } this.debugDirectory = path; } } else { if (string.Compare(name, "AutoRef", StringComparison.OrdinalIgnoreCase) != 0) { throw new JSVsaException(JSVsaError.OptionNotSupported); } this.autoRef = (bool) value; } } } catch (JSVsaException) { throw; } catch { throw new JSVsaException(JSVsaError.OptionInvalid); } }