public Object GetObject(EntityHandle handle, NotFoundBehavior notFoundBehavior = NotFoundBehavior.Throw) { IEntityHandleObject obj = _resolvedTokens.GetOrCreateValue(handle); if (obj is EcmaObjectLookupWrapper) { object result = ((EcmaObjectLookupWrapper)obj).Object; if ((result is ResolutionFailure failure) && (notFoundBehavior != NotFoundBehavior.ReturnResolutionFailure)) { if (notFoundBehavior == NotFoundBehavior.ReturnNull) { return(null); } else { failure.Throw(); } } return(result); } else { return(obj); } }
public override MetadataType GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) { TypeSystemContext context = Context; if (context.SupportsCanon && (nameSpace == context.CanonType.Namespace) && (name == context.CanonType.Name)) { return(Context.CanonType); } if (context.SupportsUniversalCanon && (nameSpace == context.UniversalCanonType.Namespace) && (name == context.UniversalCanonType.Name)) { return(Context.UniversalCanonType); } else { if (notFoundBehavior != NotFoundBehavior.ReturnNull) { var failure = ResolutionFailure.GetTypeLoadResolutionFailure(nameSpace, name, "System.Private.Canon"); ModuleDesc.GetTypeResolutionFailure = failure; if (notFoundBehavior == NotFoundBehavior.Throw) { failure.Throw(); } return(null); } return(null); } }
public override Object GetObject(int token, NotFoundBehavior notFoundBehavior) { Object o = _methodIL.GetObject(token, notFoundBehavior); if (o is MethodDesc) { o = ((MethodDesc)o).InstantiateSignature(_typeInstantiation, _methodInstantiation); } else if (o is TypeDesc) { o = ((TypeDesc)o).InstantiateSignature(_typeInstantiation, _methodInstantiation); } else if (o is FieldDesc) { o = ((FieldDesc)o).InstantiateSignature(_typeInstantiation, _methodInstantiation); } else if (o is MethodSignature) { MethodSignature template = (MethodSignature)o; MethodSignatureBuilder builder = new MethodSignatureBuilder(template); builder.ReturnType = template.ReturnType.InstantiateSignature(_typeInstantiation, _methodInstantiation); for (int i = 0; i < template.Length; i++) { builder[i] = template[i].InstantiateSignature(_typeInstantiation, _methodInstantiation); } o = builder.ToSignature(); } return(o); }
public override object GetObject(int token, NotFoundBehavior notFoundBehavior = NotFoundBehavior.Throw) { // UserStrings cannot be wrapped in EntityHandle if ((token & 0xFF000000) == 0x70000000) { return(_module.GetUserString(MetadataTokens.UserStringHandle(token))); } return(_module.GetObject(MetadataTokens.EntityHandle(token), notFoundBehavior)); }
public EcmaSignatureParser(TypeSystemContext tsc, Func <EntityHandle, NotFoundBehavior, TypeDesc> typeResolver, BlobReader reader, NotFoundBehavior notFoundBehavior) { _notFoundBehavior = notFoundBehavior; _ecmaModule = null; _tsc = tsc; _typeResolver = typeResolver; _reader = reader; _indexStack = null; _embeddedSignatureDataList = null; _resolutionFailure = null; }
public EcmaSignatureParser(EcmaModule ecmaModule, BlobReader reader, NotFoundBehavior notFoundBehavior) { _notFoundBehavior = notFoundBehavior; _ecmaModule = ecmaModule; _tsc = ecmaModule.Context; _typeResolver = null; _reader = reader; _indexStack = null; _embeddedSignatureDataList = null; _resolutionFailure = null; }
public override object GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) { MetadataType type = GetTypeInternal(nameSpace, name); if ((type == null) && notFoundBehavior != NotFoundBehavior.ReturnNull) { ResolutionFailure failure = ResolutionFailure.GetTypeLoadResolutionFailure(nameSpace, name, this); if (notFoundBehavior == NotFoundBehavior.Throw) { failure.Throw(); } return(failure); } return(type); }
public object GetObject(EntityHandle handle, NotFoundBehavior notFoundBehavior = NotFoundBehavior.Throw) { lock (_cache) { if (_cache.Entities.TryGetValue(MetadataTokens.GetToken(handle), out var result)) { return(result); } var reader = MetadataReader; if (_cache.Entities.TryGetValue(MetadataTokens.GetToken(handle), out result)) { return(result); } } throw new ArgumentException($"Invalid EntityHandle {MetadataTokens.GetToken(handle):X} passed to MutableModule.GetObject"); }
public override object GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) { Debug.Fail("Resolving a TypeRef in the compiler generated assembly?"); throw new NotImplementedException(); }
/// <summary> /// Resolves a token from within the method body into a type system object /// (typically a <see cref="MethodDesc"/>, <see cref="FieldDesc"/>, <see cref="TypeDesc"/>, /// or <see cref="MethodSignature"/>). /// </summary> public abstract Object GetObject(int token, NotFoundBehavior notFoundBehavior = NotFoundBehavior.Throw);
public sealed override MetadataType GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) { var stringComparer = _metadataReader.StringComparer; // TODO: More efficient implementation? foreach (var typeDefinitionHandle in _metadataReader.TypeDefinitions) { var typeDefinition = _metadataReader.GetTypeDefinition(typeDefinitionHandle); if (stringComparer.Equals(typeDefinition.Name, name) && stringComparer.Equals(typeDefinition.Namespace, nameSpace)) { return((MetadataType)GetType((EntityHandle)typeDefinitionHandle)); } } foreach (var exportedTypeHandle in _metadataReader.ExportedTypes) { var exportedType = _metadataReader.GetExportedType(exportedTypeHandle); if (stringComparer.Equals(exportedType.Name, name) && stringComparer.Equals(exportedType.Namespace, nameSpace)) { if (exportedType.IsForwarder) { Object implementation = GetObject(exportedType.Implementation, notFoundBehavior); if (implementation == null) { return(null); } if (implementation is ModuleDesc) { return(((ModuleDesc)(implementation)).GetType(nameSpace, name)); } else if (implementation is ResolutionFailure failure) { ModuleDesc.GetTypeResolutionFailure = failure; return(null); } // TODO throw new NotImplementedException(); } // TODO: throw new NotImplementedException(); } } if (notFoundBehavior != NotFoundBehavior.ReturnNull) { var failure = ResolutionFailure.GetTypeLoadResolutionFailure(nameSpace, name, this); if (notFoundBehavior == NotFoundBehavior.Throw) { failure.Throw(); } ModuleDesc.GetTypeResolutionFailure = failure; return(null); } return(null); }
private IFeatureService CreateFeatureService(List <Feature> configuredFeatures, OnErrorBehavior onErrorBehavior = OnErrorBehavior.SetDisabled, NotFoundBehavior notFoundBehavior = NotFoundBehavior.SetDisabled) { var store = new FakeRuntimeStore(configuredFeatures); var activator = new FakeToggleActivator(); var esquioOptions = new EsquioOptions(); esquioOptions.ConfigureOnErrorBehavior(onErrorBehavior); esquioOptions.ConfigureNotFoundBehavior(notFoundBehavior); var options = Options.Create <EsquioOptions>(esquioOptions); var loggerFactory = new LoggerFactory(); var logger = loggerFactory.CreateLogger <global::Esquio.Diagnostics.Esquio>(); var listener = new DiagnosticListener("Esquio"); var esquioDiagnostics = new EsquioDiagnostics(listener, logger); return(new DefaultFeatureService(store, activator, options, esquioDiagnostics)); }
public override Object GetObject(int token, NotFoundBehavior notFoundBehavior) { return(_tokens[(token & 0xFFFFFF) - 1]); }
/// <summary> /// Configure default <see cref="NotFoundBehavior"/> to used when feature to evaluate not exist in the store. Default value is SetDisabled. /// </summary> /// <param name="notFoundBehavior">The <see cref="NotFoundBehavior"/> to configure as default.</param> /// <returns>The same configuration to be chained.</returns> public EsquioOptions ConfigureNotFoundBehavior(NotFoundBehavior notFoundBehavior) { NotFoundBehavior = notFoundBehavior; return(this); }
/// <summary> /// Gets a type in this module with the specified name, a resolution failure object, or null. /// </summary> public abstract object GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior);
/// <summary> /// Gets a type in this module with the specified name. /// If notFoundBehavior == NotFoundBehavior.ReturnResolutionFailure /// then ModuleDesc.GetTypeResolutionFailure will be set to the failure, and the function will return null /// </summary> public abstract MetadataType GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior = NotFoundBehavior.Throw);
public override object GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) => throw new NotImplementedException();
private IFeatureService CreateFeatureService(List <Feature> configuredFeatures, IScopedEvaluationHolder evaluationSession = null, OnErrorBehavior onErrorBehavior = OnErrorBehavior.SetDisabled, NotFoundBehavior notFoundBehavior = NotFoundBehavior.SetDisabled) { var store = new FakeRuntimeStore(configuredFeatures); var activator = new FakeToggleActivator(); var session = evaluationSession ?? new NoScopedEvaluationHolder(); var esquioOptions = new EsquioOptions(); esquioOptions.ConfigureOnErrorBehavior(onErrorBehavior); esquioOptions.ConfigureNotFoundBehavior(notFoundBehavior); var options = Options.Create <EsquioOptions>(esquioOptions); var loggerFactory = new LoggerFactory(); var esquioDiagnostics = new EsquioDiagnostics(loggerFactory); return(new DefaultFeatureService(store, activator, session, options, esquioDiagnostics)); }
public sealed override object GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) { var currentModule = this; // src/coreclr/vm/clsload.cpp use the same restriction to detect a loop in the type forwarding. for (int typeForwardingChainSize = 0; typeForwardingChainSize <= 1024; typeForwardingChainSize++) { var metadataReader = currentModule._metadataReader; var stringComparer = metadataReader.StringComparer; // TODO: More efficient implementation? foreach (var typeDefinitionHandle in metadataReader.TypeDefinitions) { var typeDefinition = metadataReader.GetTypeDefinition(typeDefinitionHandle); if (stringComparer.Equals(typeDefinition.Name, name) && stringComparer.Equals(typeDefinition.Namespace, nameSpace)) { return(currentModule.GetType(typeDefinitionHandle)); } } foreach (var exportedTypeHandle in metadataReader.ExportedTypes) { var exportedType = metadataReader.GetExportedType(exportedTypeHandle); if (stringComparer.Equals(exportedType.Name, name) && stringComparer.Equals(exportedType.Namespace, nameSpace)) { if (exportedType.IsForwarder) { object implementation = currentModule.GetObject(exportedType.Implementation, notFoundBehavior); if (implementation == null) { return(null); } if (implementation is EcmaModule ecmaModule) { currentModule = ecmaModule; break; } if (implementation is ModuleDesc moduleDesc) { return(moduleDesc.GetType(nameSpace, name, notFoundBehavior)); } if (implementation is ResolutionFailure failure) { // No need to check notFoundBehavior - the callee already handled ReturnNull and Throw return(implementation); } // TODO throw new NotImplementedException(); } // TODO: throw new NotImplementedException(); } } } if (notFoundBehavior != NotFoundBehavior.ReturnNull) { var failure = ResolutionFailure.GetTypeLoadResolutionFailure(nameSpace, name, this); if (notFoundBehavior == NotFoundBehavior.Throw) { failure.Throw(); } return(failure); } return(null); }