Example #1
0
        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);
                    }
                }
Example #3
0
        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);
        }
Example #4
0
        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));
        }
Example #5
0
 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;
 }
Example #6
0
 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;
 }
Example #7
0
        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);
        }
Example #8
0
        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();
 }
Example #10
0
 /// <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);
Example #11
0
        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);
        }
Example #12
0
        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));
        }
Example #13
0
 public override Object GetObject(int token, NotFoundBehavior notFoundBehavior)
 {
     return(_tokens[(token & 0xFFFFFF) - 1]);
 }
Example #14
0
 /// <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);
 }
Example #15
0
 /// <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);
Example #16
0
 /// <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);
Example #17
0
 public override object GetType(string nameSpace, string name, NotFoundBehavior notFoundBehavior) => throw new NotImplementedException();
Example #18
0
        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));
        }
Example #19
0
        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);
        }