private IExternalResourceProvider <ILanguageRuntime> GetProvider() { if (provider != null) { return(provider); } var cilLanguageName = (CilGrammarSource)this.languageName; if (Attributes.Exists <DerivedAssemblyMarker>(cilLanguageName.SourceAssembly)) { provider = new CompiledLanguageProvider( cilLanguageName, new RequiredAssemblyProvider(cilLanguageName.SourceAssembly.GetName())); return(provider); } provider = new CompiledLanguageProvider( cilLanguageName, new DerivedAssemblyProvider(cilLanguageName.SourceAssembly, null, null)); if (!ResourceContext.Instance.CanLoadOrBuild(provider)) { provider = new ResourceGetter <ILanguageRuntime>( (ILogging logging, out ILanguageRuntime output) => { ILanguageRuntime l; if (!bootstrapLanguages.TryGetValue(cilLanguageName, out l)) { LanguageData data; if (!ResourceContext.Instance.LoadOrBuild( new LanguageDataProvider(cilLanguageName, true), out data)) { output = null; return(false); } l = new BootstrapLanguage(cilLanguageName, data); bootstrapLanguages[cilLanguageName] = l; } output = l; return(true); }); } return(provider); }
public bool LoadOrBuild <T>(IExternalResourceProvider <T> resource, out T output) where T : class { bool result = LoadOrBuild((IExternalResource)resource); if (result) { output = resource.Resource; } else { output = null; } return(result); }
public DelegateProvider(IExternalResourceProvider <Assembly> assemblyProvider, string typeName, string methodName) { this.assemblyProvider = assemblyProvider; this.typeName = typeName; this.methodName = methodName; }
public CompiledLanguageProvider(CilGrammarSource languageName, IExternalResourceProvider <Assembly> assemblyProvider) { this.languageName = languageName; this.assemblyProvider = assemblyProvider; }