コード例 #1
0
        public IType ResolveType(int token, IGenericContext genericContext)
        {
            if (tokenResolutions != null && tokenResolutions.Count >= token)
            {
                return tokenResolutions[token - 1] as IType;
            }

            return this.method.Module.ResolveType(token, genericContext);
        }
コード例 #2
0
        public IMethod ResolveMethod(int token, IGenericContext genericContext)
        {
            if (this.tokenResolutions != null && this.tokenResolutions.Count >= token)
            {
                return this.tokenResolutions[token - 1] as IMethod;
            }

            return this.method.Module.ResolveMethod(token, genericContext);
        }
コード例 #3
0
		internal static FieldSignature ReadSig(ModuleReader module, ByteReader br, IGenericContext context)
		{
			if (br.ReadByte() != FIELD)
			{
				throw new BadImageFormatException();
			}
			CustomModifiers mods = CustomModifiers.Read(module, br, context);
			Type fieldType = ReadType(module, br, context);
			return new FieldSignature(fieldType, mods);
		}
コード例 #4
0
ファイル: Method.cs プロジェクト: ngraziano/mono
		internal MethodBody GetMethodBody(IGenericContext context)
		{
			if ((GetMethodImplementationFlags() & MethodImplAttributes.CodeTypeMask) != MethodImplAttributes.IL)
			{
				// method is not IL
				return null;
			}
			int rva = module.MethodDef.records[index].RVA;
			return rva == 0 ? null : new MethodBody(module, rva, context);
		}
コード例 #5
0
ファイル: ExceptionHandlingClause.cs プロジェクト: koush/mono
		internal ExceptionHandlingClause(ModuleReader module, int flags, int tryOffset, int tryLength, int handlerOffset, int handlerLength, int classTokenOrfilterOffset, IGenericContext context)
		{
			this.flags = flags;
			this.tryOffset = tryOffset;
			this.tryLength = tryLength;
			this.handlerOffset = handlerOffset;
			this.handlerLength = handlerLength;
			this.catchType = flags == (int)ExceptionHandlingClauseOptions.Clause && classTokenOrfilterOffset != 0 ? module.ResolveType(classTokenOrfilterOffset, context) : null;
			this.filterOffset = flags == (int)ExceptionHandlingClauseOptions.Filter ? classTokenOrfilterOffset : 0;
		}
コード例 #6
0
        /// <summary>
        /// </summary>
        /// <param name="methodDef">
        /// </param>
        /// <param name="genericContext">
        /// </param>
        internal MetadataMethodAdapter(MethodSymbol methodDef, IGenericContext genericContext)
            : this(methodDef)
        {
            this.GenericContext = genericContext;

            var peMethodSymbol = methodDef as PEMethodSymbol;
            if (peMethodSymbol != null)
            {
                this.Token = MetadataTokens.GetToken(peMethodSymbol.Handle);
            }
        }
コード例 #7
0
        /// <summary>
        /// </summary>
        /// <param name="token">
        /// </param>
        /// <param name="genericContext">
        /// </param>
        /// <returns>
        /// </returns>
        /// <exception cref="KeyNotFoundException">
        /// </exception>
        public IField ResolveField(int token, IGenericContext genericContext)
        {
            var peModuleSymbol = this.moduleDef as PEModuleSymbol;

            var fieldHandle = MetadataTokens.Handle(token);

            var fieldSymbol = peModuleSymbol.GetMetadataDecoder(genericContext).GetSymbolForILToken(fieldHandle) as FieldSymbol;
            if (fieldSymbol != null)
            {
                return new MetadataFieldAdapter(SubstituteFieldSymbolIfNeeded(fieldSymbol, genericContext));
            }

            return null;
        }
コード例 #8
0
        /// <summary>
        /// </summary>
        /// <param name="token">
        /// </param>
        /// <param name="genericContext">
        /// </param>
        /// <returns>
        /// </returns>
        /// <exception cref="NotImplementedException">
        /// </exception>
        public IMember ResolveMember(int token, IGenericContext genericContext)
        {
            var peModuleSymbol = this.moduleDef as PEModuleSymbol;

            var methodHandle = MetadataTokens.Handle(token);

            var methodSymbol = peModuleSymbol.GetMetadataDecoder(genericContext).GetSymbolForILToken(methodHandle) as MethodSymbol;
            if (methodSymbol != null)
            {
                if (methodSymbol.MethodKind == MethodKind.Constructor)
                {
                    return new MetadataConstructorAdapter(SubstituteMethodSymbolIfNeeded(methodSymbol, genericContext));
                }

                return new MetadataMethodAdapter(SubstituteMethodSymbolIfNeeded(methodSymbol, genericContext));
            }

            throw new NotImplementedException();
        }
コード例 #9
0
ファイル: Signature.cs プロジェクト: ngraziano/mono
		private static Type ReadGenericInst(ModuleReader module, ByteReader br, IGenericContext context)
		{
			Type type;
			switch (br.ReadByte())
			{
				case ELEMENT_TYPE_CLASS:
					type = ReadTypeDefOrRefEncoded(module, br, context).MarkNotValueType();
					break;
				case ELEMENT_TYPE_VALUETYPE:
					type = ReadTypeDefOrRefEncoded(module, br, context).MarkValueType();
					break;
				default:
					throw new BadImageFormatException();
			}
			if (!type.__IsMissing && !type.IsGenericTypeDefinition)
			{
				throw new BadImageFormatException();
			}
			int genArgCount = br.ReadCompressedInt();
			Type[] args = new Type[genArgCount];
			Type[][] reqmod = null;
			Type[][] optmod = null;
			for (int i = 0; i < genArgCount; i++)
			{
				// LAMESPEC the Type production (23.2.12) doesn't include CustomMod* for genericinst, but C++ uses it, the verifier allows it and ildasm also supports it
				CustomModifiers mods = ReadCustomModifiers(module, br, context);
				if (mods.required != null || mods.optional != null)
				{
					if (reqmod == null)
					{
						reqmod = new Type[genArgCount][];
						optmod = new Type[genArgCount][];
					}
					reqmod[i] = mods.required;
					optmod[i] = mods.optional;
				}
				args[i] = ReadType(module, br, context);
			}
			return GenericTypeInstance.Make(type, args, reqmod, optmod);
		}
コード例 #10
0
ファイル: Import.cs プロジェクト: FreshBirdZhe/LSharp
        public TypeReference ImportType(TypeReference type, IGenericContext context)
        {
            if (Mixin.IsTypeSpecification(type))
                return ImportTypeSpecification(type, context);

            var reference = new TypeReference(
                type.Namespace,
                type.Name,
                module,
                ImportScope(type.Scope),
                type.IsValueType);

            MetadataSystem.TryProcessPrimitiveTypeReference(reference);

            if (type.IsNested)
                reference.DeclaringType = ImportType(type.DeclaringType, context);

            if (type.HasGenericParameters)
                ImportGenericParameters(reference, type);

            return reference;
        }
コード例 #11
0
ファイル: Import.cs プロジェクト: jeroldhaas/ContinuousTests
		public TypeReference ImportType (Type type, IGenericContext context, ImportGenericKind import_kind)
		{
			if (IsTypeSpecification (type) || ImportOpenGenericType (type, import_kind))
				return ImportTypeSpecification (type, context);

			var reference = new TypeReference (
				string.Empty,
				type.Name,
				module,
				ImportScope (type.Assembly),
				type.IsValueType);

			reference.etype = ImportElementType (type);

			if (IsNestedType (type))
				reference.DeclaringType = ImportType (type.DeclaringType, context, import_kind);
			else
				reference.Namespace = type.Namespace;

			if (type.IsGenericType)
				ImportGenericParameters (reference, type.GetGenericArguments ());

			return reference;
		}
コード例 #12
0
ファイル: Import.cs プロジェクト: jeroldhaas/ContinuousTests
		public MethodReference ImportMethod (MethodReference method, IGenericContext context)
		{
			if (method.IsGenericInstance)
				return ImportMethodSpecification (method, context);

			var declaring_type = ImportType (method.DeclaringType, context);

			var reference = new MethodReference {
				Name = method.Name,
				HasThis = method.HasThis,
				ExplicitThis = method.ExplicitThis,
				DeclaringType = declaring_type,
			};

			reference.CallingConvention = method.CallingConvention;

			if (method.HasGenericParameters)
				ImportGenericParameters (reference, method);

			reference.ReturnType = ImportType (method.ReturnType, context ?? reference);

			if (!method.HasParameters)
				return reference;

			var reference_parameters = reference.Parameters;

			var parameters = method.Parameters;
			for (int i = 0; i < parameters.Count; i++)
				reference_parameters.Add (
					new ParameterDefinition (ImportType (parameters [i].ParameterType, context ?? reference)));

			return reference;
		}
コード例 #13
0
ファイル: Import.cs プロジェクト: jeroldhaas/ContinuousTests
		public TypeReference ImportType (Type type, IGenericContext context)
		{
			return ImportType (type, context, ImportGenericKind.Open);
		}
コード例 #14
0
 public AddElementsSystem(Contexts contexts, IServices services) : base(contexts.Game, Trigger)
 {
     _elementService = services.ElementService;
     _game           = contexts.Game;
     _config         = contexts.Config;
 }
コード例 #15
0
 /// <summary>
 /// </summary>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 public IMethod ToSpecialization(IGenericContext genericContext)
 {
     return(MetadataModuleAdapter.SubstituteMethodSymbolIfNeeded(this.methodDef, genericContext).ToAdapter());
 }
コード例 #16
0
 /// <summary>
 /// </summary>
 /// <param name="token">
 /// </param>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 /// <exception cref="KeyNotFoundException">
 /// </exception>
 public IType ResolveType(int token, IGenericContext genericContext)
 {
     var peModuleSymbol = this.moduleDef as PEModuleSymbol;
     var typeDefHandle = MetadataTokens.Handle(token);
     var typeSymbol = peModuleSymbol.GetMetadataDecoder(genericContext).GetSymbolForILToken(typeDefHandle) as TypeSymbol;
     return SubstituteTypeSymbolIfNeeded(typeSymbol, genericContext).ToAdapter();
 }
コード例 #17
0
 public static Type DecodeType(IGenericContext gc, TypeSpecificationHandle handle) =>
 gc.Context.MdReader.GetTypeSpecification(handle).DecodeSignature(gc.Context.TypeSignatureDecoder, gc);
コード例 #18
0
ファイル: SignatureDecoder.cs プロジェクト: raulgarciamsft/ql
            public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
            {
                var type = (Type)gc.Context.Create(handle);

                type.WriteId(trapFile);
            }
コード例 #19
0
        private static FieldSymbol SubstituteFieldSymbolIfNeeded(FieldSymbol fieldSymbol, IGenericContext genericContext)
        {
            if (MetadataGenericContext.IsNullOrEmptyOrNoSpecializations(genericContext))
            {
                return fieldSymbol;
            }

            var resolvedFieldSymbol = fieldSymbol;
            var field = new MetadataFieldAdapter(fieldSymbol);
            if (field.DeclaringType.IsGenericTypeDefinition)
            {
                var constructedContainingType = SubstituteTypeSymbolIfNeeded(fieldSymbol.ContainingType, genericContext);
                var substitutedNamedTypeSymbol = constructedContainingType as SubstitutedNamedTypeSymbol;
                resolvedFieldSymbol = new SubstitutedFieldSymbol(substitutedNamedTypeSymbol, fieldSymbol);
                return resolvedFieldSymbol;
            }

            return resolvedFieldSymbol;
        }
コード例 #20
0
ファイル: SignatureDecoder.cs プロジェクト: raulgarciamsft/ql
 public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
 {
     trapFile.Write("T!");
     trapFile.Write(index);
 }
コード例 #21
0
ファイル: SignatureDecoder.cs プロジェクト: raulgarciamsft/ql
 public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
 {
     trapFile.Write(typeCode.Id());
 }
コード例 #22
0
 public DecoratorICreateUoW(IGenericContext context)
 {
     _context = context;
 }
コード例 #23
0
 public void WriteId(TextWriter trapFile, IGenericContext gc)
 {
     elementType.WriteId(trapFile, gc);
     trapFile.Write("[]");
 }
コード例 #24
0
 private static bool Filter(IGenericContext <GameEntity> context, GameEntity entity)
 {
     return(entity.IsFlagged <MatchedComponent>());
 }
コード例 #25
0
 private static ICollector <GameEntity> Trigger(IGenericContext <GameEntity> context)
 {
     return(context.GetTriggerCollector <MatchedComponent>(GroupEvent.Added));
 }
コード例 #26
0
ファイル: SignatureDecoder.cs プロジェクト: raulgarciamsft/ql
 public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
 {
     elementType.WriteId(trapFile, gc);
     trapFile.Write('&');
 }
コード例 #27
0
        internal static TypeSymbol SubstituteTypeSymbolIfNeeded(TypeSymbol typeSymbol, IGenericContext genericContext)
        {
            if (typeSymbol == null || typeSymbol.TypeKind == TypeKind.Error)
            {
                throw new KeyNotFoundException();
            }

            if (MetadataGenericContext.IsNullOrEmptyOrNoSpecializations(genericContext))
            {
                return typeSymbol;
            }

            var typeSubstitution = GetTypeSubstitutionMap(genericContext);
            var resolvedType = typeSubstitution.SubstituteType(typeSymbol);
            return resolvedType;
        }
コード例 #28
0
ファイル: MethodBody.cs プロジェクト: windward-studios/ikvm
        internal MethodBody(ModuleReader module, int rva, IGenericContext context)
        {
            const byte CorILMethod_TinyFormat     = 0x02;
            const byte CorILMethod_FatFormat      = 0x03;
            const byte CorILMethod_MoreSects      = 0x08;
            const byte CorILMethod_InitLocals     = 0x10;
            const byte CorILMethod_Sect_EHTable   = 0x01;
            const byte CorILMethod_Sect_FatFormat = 0x40;
            const byte CorILMethod_Sect_MoreSects = 0x80;

            List <ExceptionHandlingClause> exceptionClauses = new List <ExceptionHandlingClause>();
            List <LocalVariableInfo>       locals           = new List <LocalVariableInfo>();

            module.SeekRVA(rva);
            BinaryReader br = new BinaryReader(module.stream);
            byte         b  = br.ReadByte();

            if ((b & 3) == CorILMethod_TinyFormat)
            {
                initLocals = true;
                body       = br.ReadBytes(b >> 2);
                maxStack   = 8;
            }
            else if ((b & 3) == CorILMethod_FatFormat)
            {
                initLocals = (b & CorILMethod_InitLocals) != 0;
                short flagsAndSize = (short)(b | (br.ReadByte() << 8));
                if ((flagsAndSize >> 12) != 3)
                {
                    throw new BadImageFormatException("Fat format method header size should be 3");
                }
                maxStack = br.ReadUInt16();
                int codeLength = br.ReadInt32();
                localVarSigTok = br.ReadInt32();
                body           = br.ReadBytes(codeLength);
                if ((b & CorILMethod_MoreSects) != 0)
                {
                    module.stream.Position = (module.stream.Position + 3) & ~3;
                    int hdr = br.ReadInt32();
                    if ((hdr & CorILMethod_Sect_MoreSects) != 0 || (hdr & CorILMethod_Sect_EHTable) == 0)
                    {
                        throw new NotImplementedException();
                    }
                    else if ((hdr & CorILMethod_Sect_FatFormat) != 0)
                    {
                        int count = ComputeExceptionCount((hdr >> 8) & 0xFFFFFF, 24);
                        for (int i = 0; i < count; i++)
                        {
                            int flags                    = br.ReadInt32();
                            int tryOffset                = br.ReadInt32();
                            int tryLength                = br.ReadInt32();
                            int handlerOffset            = br.ReadInt32();
                            int handlerLength            = br.ReadInt32();
                            int classTokenOrFilterOffset = br.ReadInt32();
                            exceptionClauses.Add(new ExceptionHandlingClause(module, flags, tryOffset, tryLength, handlerOffset, handlerLength, classTokenOrFilterOffset, context));
                        }
                    }
                    else
                    {
                        int count = ComputeExceptionCount((hdr >> 8) & 0xFF, 12);
                        for (int i = 0; i < count; i++)
                        {
                            int flags                    = br.ReadUInt16();
                            int tryOffset                = br.ReadUInt16();
                            int tryLength                = br.ReadByte();
                            int handlerOffset            = br.ReadUInt16();
                            int handlerLength            = br.ReadByte();
                            int classTokenOrFilterOffset = br.ReadInt32();
                            exceptionClauses.Add(new ExceptionHandlingClause(module, flags, tryOffset, tryLength, handlerOffset, handlerLength, classTokenOrFilterOffset, context));
                        }
                    }
                }
                if (localVarSigTok != 0)
                {
                    ByteReader sig = module.GetStandAloneSig((localVarSigTok & 0xFFFFFF) - 1);
                    Signature.ReadLocalVarSig(module, sig, context, locals);
                }
            }
            else
            {
                throw new BadImageFormatException();
            }
            this.exceptionClauses = exceptionClauses.AsReadOnly();
            this.locals           = locals.AsReadOnly();
        }
コード例 #29
0
        private static MethodSymbol ConstructMethodSymbol(MethodSymbol methodSymbol, AbstractTypeParameterMap methodTypeSubstitution, IGenericContext genericContext)
        {
            var metadataGenericContext = genericContext as MetadataGenericContext;
            if (metadataGenericContext != null)
            {
                var customTypeSubstitution = metadataGenericContext.CustomTypeSubstitution;
                if (customTypeSubstitution != null)
                {
                    return new ConstructedMethodSymbol(methodSymbol, GetTypeArguments(methodSymbol.OriginalDefinition.TypeParameters, customTypeSubstitution, null));
                }
            }

            var metadataMethodAdapter = genericContext.MethodSpecialization as MetadataMethodAdapter;
            if (metadataMethodAdapter != null)
            {
                var methodSymbolContext = metadataMethodAdapter.MethodDef;
                var constructedFrom = methodSymbol.ConstructedFrom;
                return new ConstructedMethodSymbol(constructedFrom.ConstructedFrom, GetTypeArguments(constructedFrom.TypeParameters, methodSymbolContext, methodTypeSubstitution));
            }

            var metadataTypeAdapter = genericContext.TypeSpecialization as MetadataTypeAdapter;
            if (metadataTypeAdapter != null)
            {
                var namedTypeSymbolContext = metadataTypeAdapter.TypeDef as NamedTypeSymbol;
                var constructedFrom = methodSymbol.ConstructedFrom;
                return new ConstructedMethodSymbol(constructedFrom.ConstructedFrom, GetTypeArguments(constructedFrom.TypeParameters, namedTypeSymbolContext, methodTypeSubstitution));
            }

            return null;
        }
コード例 #30
0
 public MethodTypeParameter(IGenericContext gc, Method m, int index) : base(gc)
 {
     method     = m;
     this.index = index;
 }
コード例 #31
0
 internal sealed override Type ResolveType(int metadataToken, IGenericContext context)
 {
     throw ArgumentOutOfRangeException();
 }
コード例 #32
0
 public WorkPlaceRepository(IGenericContext dbContext, IMapper mapper) : base(dbContext, mapper)
 {
 }
コード例 #33
0
 internal ExceptionHandlingClause(ModuleReader module, int flags, int tryOffset, int tryLength, int handlerOffset, int handlerLength, int classTokenOrfilterOffset, IGenericContext context)
 {
     this.flags         = flags;
     this.tryOffset     = tryOffset;
     this.tryLength     = tryLength;
     this.handlerOffset = handlerOffset;
     this.handlerLength = handlerLength;
     this.catchType     = flags == (int)ExceptionHandlingClauseOptions.Clause && classTokenOrfilterOffset != 0 ? module.ResolveType(classTokenOrfilterOffset, context) : null;
     this.filterOffset  = flags == (int)ExceptionHandlingClauseOptions.Filter ? classTokenOrfilterOffset : 0;
 }
コード例 #34
0
 public override TypeSignature InstantiateGenericTypes(IGenericContext context)
 {
     return(new OptionalModifierSignature(ModifierType, BaseType.InstantiateGenericTypes(context)));
 }
コード例 #35
0
 private static ICollector <GameEntity> Trigger(IGenericContext <GameEntity> context)
 {
     return(context.GetTriggerCollector <RestartHappenedComponent>());
 }
コード例 #36
0
        internal static __StandAloneMethodSig ReadStandAloneMethodSig(ModuleReader module, ByteReader br, IGenericContext context)
        {
            CallingConventions callingConvention = 0;

            System.Runtime.InteropServices.CallingConvention unmanagedCallingConvention = 0;
            bool unmanaged;
            byte flags = br.ReadByte();

            switch (flags & 0xf)
            {
            case DEFAULT:
                callingConvention = CallingConventions.Standard;
                unmanaged         = false;
                break;

            case 0x01:                          // C
                unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl;
                unmanaged = true;
                break;

            case 0x02:                          // STDCALL
                unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall;
                unmanaged = true;
                break;

            case 0x03:                          // THISCALL
                unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.ThisCall;
                unmanaged = true;
                break;

            case 0x04:                          // FASTCALL
                unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.FastCall;
                unmanaged = true;
                break;

            case 0x09:                          // UNMANAGED
                unmanagedCallingConvention = (System.Runtime.InteropServices.CallingConvention) 0x9;
                unmanaged = true;
                break;

            case VARARG:
                callingConvention = CallingConventions.VarArgs;
                unmanaged         = false;
                break;

            default:
                throw new BadImageFormatException();
            }
            if ((flags & HASTHIS) != 0)
            {
                callingConvention |= CallingConventions.HasThis;
            }
            if ((flags & EXPLICITTHIS) != 0)
            {
                callingConvention |= CallingConventions.ExplicitThis;
            }
            if ((flags & GENERIC) != 0)
            {
                throw new BadImageFormatException();
            }
            int paramCount = br.ReadCompressedUInt();

            CustomModifiers[] customModifiers = null;
            PackedCustomModifiers.Pack(ref customModifiers, 0, CustomModifiers.Read(module, br, context), paramCount + 1);
            Type        returnType             = ReadRetType(module, br, context);
            List <Type> parameterTypes         = new List <Type>();
            List <Type> optionalParameterTypes = new List <Type>();
            List <Type> curr = parameterTypes;

            for (int i = 0; i < paramCount; i++)
            {
                if (br.PeekByte() == SENTINEL)
                {
                    br.ReadByte();
                    curr = optionalParameterTypes;
                }
                PackedCustomModifiers.Pack(ref customModifiers, i + 1, CustomModifiers.Read(module, br, context), paramCount + 1);
                curr.Add(ReadParam(module, br, context));
            }
            return(new __StandAloneMethodSig(unmanaged, unmanagedCallingConvention, callingConvention, returnType, parameterTypes.ToArray(), optionalParameterTypes.ToArray(), PackedCustomModifiers.Wrap(customModifiers)));
        }
コード例 #37
0
 /// <summary>
 /// </summary>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 public IMethodBody GetMethodBody(IGenericContext genericContext = null)
 {
     return(new MetadataMethodBodyAdapter(this.methodDef, genericContext));
 }
コード例 #38
0
ファイル: MethodSignature.cs プロジェクト: ngraziano/mono
		internal static __StandAloneMethodSig ReadStandAloneMethodSig(ModuleReader module, ByteReader br, IGenericContext context)
		{
			CallingConventions callingConvention = 0;
			System.Runtime.InteropServices.CallingConvention unmanagedCallingConvention = 0;
			bool unmanaged;
			byte flags = br.ReadByte();
			switch (flags & 7)
			{
				case DEFAULT:
					callingConvention = CallingConventions.Standard;
					unmanaged = false;
					break;
				case 0x01:	// C
					unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl;
					unmanaged = true;
					break;
				case 0x02:	// STDCALL
					unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall;
					unmanaged = true;
					break;
				case 0x03:	// THISCALL
					unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.ThisCall;
					unmanaged = true;
					break;
				case 0x04:	// FASTCALL
					unmanagedCallingConvention = System.Runtime.InteropServices.CallingConvention.FastCall;
					unmanaged = true;
					break;
				case VARARG:
					callingConvention = CallingConventions.VarArgs;
					unmanaged = false;
					break;
				default:
					throw new BadImageFormatException();
			}
			if ((flags & HASTHIS) != 0)
			{
				callingConvention |= CallingConventions.HasThis;
			}
			if ((flags & EXPLICITTHIS) != 0)
			{
				callingConvention |= CallingConventions.ExplicitThis;
			}
			if ((flags & GENERIC) != 0)
			{
				throw new BadImageFormatException();
			}
			int paramCount = br.ReadCompressedInt();
			SkipCustomModifiers(br);
			Type returnType = ReadRetType(module, br, context);
			List<Type> parameterTypes = new List<Type>();
			List<Type> optionalParameterTypes = new List<Type>();
			List<Type> curr = parameterTypes;
			for (int i = 0; i < paramCount; i++)
			{
				if (br.PeekByte() == SENTINEL)
				{
					br.ReadByte();
					curr = optionalParameterTypes;
				}
				SkipCustomModifiers(br);
				curr.Add(ReadParam(module, br, context));
			}
			return new __StandAloneMethodSig(unmanaged, unmanagedCallingConvention, callingConvention, returnType, parameterTypes.ToArray(), optionalParameterTypes.ToArray());
		}
コード例 #39
0
ファイル: Import.cs プロジェクト: jeroldhaas/ContinuousTests
		MethodSpecification ImportMethodSpecification (MethodReference method, IGenericContext context)
		{
			if (!method.IsGenericInstance)
				throw new NotSupportedException ();

			var instance = (GenericInstanceMethod) method;
			var element_method = ImportMethod (instance.ElementMethod, context);
			var imported_instance = new GenericInstanceMethod (element_method);

			var arguments = instance.GenericArguments;
			var imported_arguments = imported_instance.GenericArguments;

			for (int i = 0; i < arguments.Count; i++)
				imported_arguments.Add (ImportType (arguments [i], context));

			return imported_instance;
		}
コード例 #40
0
ファイル: MethodSignature.cs プロジェクト: ngraziano/mono
		internal static MethodSignature ReadSig(ModuleReader module, ByteReader br, IGenericContext context)
		{
			CallingConventions callingConvention;
			int genericParamCount;
			Type returnType;
			Type[] parameterTypes;
			byte flags = br.ReadByte();
			switch (flags & 7)
			{
				case DEFAULT:
					callingConvention = CallingConventions.Standard;
					break;
				case VARARG:
					callingConvention = CallingConventions.VarArgs;
					break;
				default:
					throw new BadImageFormatException();
			}
			if ((flags & HASTHIS) != 0)
			{
				callingConvention |= CallingConventions.HasThis;
			}
			if ((flags & EXPLICITTHIS) != 0)
			{
				callingConvention |= CallingConventions.ExplicitThis;
			}
			genericParamCount = 0;
			if ((flags & GENERIC) != 0)
			{
				genericParamCount = br.ReadCompressedInt();
				context = new UnboundGenericMethodContext(context);
			}
			int paramCount = br.ReadCompressedInt();
			Type[][][] modifiers = null;
			Type[] optionalCustomModifiers;
			Type[] requiredCustomModifiers;
			ReadCustomModifiers(module, br, context, out requiredCustomModifiers, out optionalCustomModifiers);
			returnType = ReadRetType(module, br, context);
			parameterTypes = new Type[paramCount];
			PackedCustomModifiers.SetModifiers(ref modifiers, 0, 0, optionalCustomModifiers, paramCount + 1);
			PackedCustomModifiers.SetModifiers(ref modifiers, 0, 1, requiredCustomModifiers, paramCount + 1);
			for (int i = 0; i < parameterTypes.Length; i++)
			{
				if ((callingConvention & CallingConventions.VarArgs) != 0 && br.PeekByte() == SENTINEL)
				{
					Array.Resize(ref parameterTypes, i);
					if (modifiers != null)
					{
						Array.Resize(ref modifiers, i + 1);
					}
					break;
				}
				ReadCustomModifiers(module, br, context, out requiredCustomModifiers, out optionalCustomModifiers);
				PackedCustomModifiers.SetModifiers(ref modifiers, i + 1, 0, optionalCustomModifiers, paramCount + 1);
				PackedCustomModifiers.SetModifiers(ref modifiers, i + 1, 1, requiredCustomModifiers, paramCount + 1);
				parameterTypes[i] = ReadParam(module, br, context);
			}
			return new MethodSignature(returnType, parameterTypes, modifiers, callingConvention, genericParamCount);
		}
コード例 #41
0
 internal UnboundGenericMethodContext(IGenericContext original)
 {
     this.original = original;
 }
コード例 #42
0
 public RewardEmitterSystem(Contexts contexts) : base(contexts.Game, Trigger, Filter)
 {
     _game   = contexts.Game;
     _config = contexts.Config;
 }
コード例 #43
0
ファイル: MethodSignature.cs プロジェクト: ngraziano/mono
			internal UnboundGenericMethodContext(IGenericContext original)
			{
				this.original = original;
			}
コード例 #44
0
 public TypeReference ImportType(Type type, IGenericContext context)
 {
     return(ImportType(type, context, ImportGenericKind.Open));
 }
コード例 #45
0
        /// <summary>
        /// </summary>
        /// <param name="token">
        /// </param>
        /// <param name="genericContext">
        /// </param>
        /// <returns>
        /// </returns>
        /// <exception cref="KeyNotFoundException">
        /// </exception>
        public IMethod ResolveMethod(int token, IGenericContext genericContext)
        {
            var peModuleSymbol = this.moduleDef as PEModuleSymbol;

            var methodHandle = MetadataTokens.Handle(token);

            /*
             * FIX for Roslyn code - to be able to load Array method references 
             
             
                        public override ImmutableArray<Symbol> GetMembers(string name)
                        {
                            // TODO: ASD: MY ADDON
                            if (name == ".ctor")
                            {
                                return ImmutableArray.Create<Symbol>(Enumerable.Range(1, 7).Select(n => new ArrayConstructor(this)).ToArray<Symbol>());
                            }

                            if (name == "Set")
                            {
                                return ImmutableArray.Create<Symbol>(Enumerable.Range(1, 7).Select(n => new ArraySetValueMethod(this)).ToArray<Symbol>());
                            }

                            if (name == "Get")
                            {
                                return ImmutableArray.Create<Symbol>(Enumerable.Range(1, 7).Select(n => new ArrayGetValueMethod(this)).ToArray<Symbol>());
                            }

                            if (name == "Address")
                            {
                                return ImmutableArray.Create<Symbol>(Enumerable.Range(1, 7).Select(n => new ArrayAddressMethod(this)).ToArray<Symbol>());
                            }
                            // TODO: END - ASD: MY ADDON
             
                            return ImmutableArray<Symbol>.Empty;
                        }
              
                        // TODO: ASD: MY ADDON
                        private sealed class ArrayConstructor : SynthesizedInstanceMethodSymbol
                        {
                            private readonly ImmutableArray<ParameterSymbol> parameters;
                            private readonly ArrayTypeSymbol arrayTypeSymbol;

                            public ArrayConstructor(ArrayTypeSymbol arrayTypeSymbol)
                            {
                                this.arrayTypeSymbol = arrayTypeSymbol;
                                var intType = arrayTypeSymbol.BaseType.ContainingAssembly.GetSpecialType(SpecialType.System_Int32);
                                this.parameters = ImmutableArray.Create<ParameterSymbol>(
                                    Enumerable.Range(0, arrayTypeSymbol.Rank).Select(n => new SynthesizedParameterSymbol(this, intType, n, RefKind.None)).ToArray<ParameterSymbol>());
                            }

                            public override ImmutableArray<ParameterSymbol> Parameters
                            {
                                get { return parameters; }
                            }

                            //
                            // Consider overriding when implementing a synthesized subclass.
                            //

                            internal override bool GenerateDebugInfo
                            {
                                get { return false; }
                            }

                            public override Accessibility DeclaredAccessibility
                            {
                                get { return ContainingType.IsAbstract ? Accessibility.Protected : Accessibility.Public; }
                            }

                            internal override bool IsMetadataFinal()
                            {
                                return false;
                            }

                            #region Sealed

                            public sealed override Symbol ContainingSymbol
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override NamedTypeSymbol ContainingType
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override string Name
                            {
                                get { return WellKnownMemberNames.InstanceConstructorName; }
                            }

                            internal sealed override bool HasSpecialName
                            {
                                get { return true; }
                            }

                            internal sealed override System.Reflection.MethodImplAttributes ImplementationAttributes
                            {
                                get
                                {
                                    var containingType = this.arrayTypeSymbol.BaseType;
                                    if (containingType.IsComImport)
                                    {
                                        Debug.Assert(containingType.TypeKind == TypeKind.Class);
                                        return System.Reflection.MethodImplAttributes.Runtime | System.Reflection.MethodImplAttributes.InternalCall;
                                    }

                                    if (containingType.TypeKind == TypeKind.Delegate)
                                    {
                                        return System.Reflection.MethodImplAttributes.Runtime;
                                    }

                                    return default(System.Reflection.MethodImplAttributes);
                                }
                            }

                            internal sealed override bool RequiresSecurityObject
                            {
                                get { return false; }
                            }

                            public sealed override DllImportData GetDllImportData()
                            {
                                return null;
                            }

                            internal sealed override MarshalPseudoCustomAttributeData ReturnValueMarshallingInformation
                            {
                                get { return null; }
                            }

                            internal sealed override bool HasDeclarativeSecurity
                            {
                                get { return false; }
                            }

                            internal sealed override IEnumerable<Microsoft.Cci.SecurityAttribute> GetSecurityInformation()
                            {
                                throw ExceptionUtilities.Unreachable;
                            }

                            internal sealed override ImmutableArray<string> GetAppliedConditionalSymbols()
                            {
                                return ImmutableArray<string>.Empty;
                            }

                            public sealed override bool IsVararg
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<TypeParameterSymbol> TypeParameters
                            {
                                get { return ImmutableArray<TypeParameterSymbol>.Empty; }
                            }

                            internal sealed override LexicalSortKey GetLexicalSortKey()
                            {
                                //For the sake of matching the metadata output of the native compiler, make synthesized constructors appear last in the metadata.
                                //This is not critical, but it makes it easier on tools that are comparing metadata.
                                return LexicalSortKey.Last;
                            }

                            public sealed override ImmutableArray<Location> Locations
                            {
                                get { return ContainingType.Locations; }
                            }

                            public sealed override TypeSymbol ReturnType
                            {
                                get { return this.arrayTypeSymbol.BaseType.ContainingAssembly.GetSpecialType(SpecialType.System_Void); }
                            }

                            public sealed override ImmutableArray<CustomModifier> ReturnTypeCustomModifiers
                            {
                                get { return ImmutableArray<CustomModifier>.Empty; }
                            }

                            public sealed override ImmutableArray<TypeSymbol> TypeArguments
                            {
                                get { return ImmutableArray<TypeSymbol>.Empty; }
                            }

                            public sealed override Symbol AssociatedSymbol
                            {
                                get { return this.arrayTypeSymbol; }
                            }

                            public sealed override int Arity
                            {
                                get { return 0; }
                            }

                            public sealed override bool ReturnsVoid
                            {
                                get { return true; }
                            }

                            public sealed override MethodKind MethodKind
                            {
                                get { return MethodKind.Constructor; }
                            }

                            public sealed override bool IsExtern
                            {
                                get
                                {
                                    // Synthesized constructors of ComImport type are extern
                                    NamedTypeSymbol containingType = this.ContainingType;
                                    return (object)containingType != null && containingType.IsComImport;
                                }
                            }

                            public sealed override bool IsSealed
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAbstract
                            {
                                get { return false; }
                            }

                            public sealed override bool IsOverride
                            {
                                get { return false; }
                            }

                            public sealed override bool IsVirtual
                            {
                                get { return false; }
                            }

                            public sealed override bool IsStatic
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAsync
                            {
                                get { return false; }
                            }

                            public sealed override bool HidesBaseMethodsByName
                            {
                                get { return false; }
                            }

                            internal sealed override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            internal sealed override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            public sealed override bool IsExtensionMethod
                            {
                                get { return false; }
                            }

                            internal sealed override Microsoft.Cci.CallingConvention CallingConvention
                            {
                                get { return Microsoft.Cci.CallingConvention.HasThis; }
                            }

                            internal sealed override bool IsExplicitInterfaceImplementation
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<MethodSymbol> ExplicitInterfaceImplementations
                            {
                                get { return ImmutableArray<MethodSymbol>.Empty; }
                            }

                            #endregion
                        }

                        private sealed class ArraySetValueMethod : SynthesizedInstanceMethodSymbol
                        {
                            private readonly ImmutableArray<ParameterSymbol> parameters;
                            private readonly ArrayTypeSymbol arrayTypeSymbol;

                            internal ArraySetValueMethod(ArrayTypeSymbol arrayTypeSymbol)
                            {
                                this.arrayTypeSymbol = arrayTypeSymbol;
                                var intType = arrayTypeSymbol.BaseType.ContainingAssembly.GetSpecialType(SpecialType.System_Int32);
                                this.parameters = ImmutableArray.Create<ParameterSymbol>(
                                    Enumerable.Range(0, arrayTypeSymbol.Rank).Select(n => new SynthesizedParameterSymbol(this, intType, n, RefKind.None))
                                    .ToArray<ParameterSymbol>()
                                    .Append(new SynthesizedParameterSymbol(this, arrayTypeSymbol.ElementType, arrayTypeSymbol.Rank + 1, RefKind.None)));
                            }

                            public override ImmutableArray<ParameterSymbol> Parameters
                            {
                                get { return parameters; }
                            }

                            #region Sealed

                            public sealed override Symbol ContainingSymbol
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override NamedTypeSymbol ContainingType
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override string Name
                            {
                                get
                                {
                                    return "Set";
                                }
                            }

                            internal sealed override bool HasSpecialName
                            {
                                get { return true; }
                            }

                            internal sealed override System.Reflection.MethodImplAttributes ImplementationAttributes
                            {
                                get
                                {
                                    var containingType = this.arrayTypeSymbol.BaseType;
                                    if (containingType.IsComImport)
                                    {
                                        Debug.Assert(containingType.TypeKind == TypeKind.Class);
                                        return System.Reflection.MethodImplAttributes.Runtime | System.Reflection.MethodImplAttributes.InternalCall;
                                    }

                                    if (containingType.TypeKind == TypeKind.Delegate)
                                    {
                                        return System.Reflection.MethodImplAttributes.Runtime;
                                    }

                                    return default(System.Reflection.MethodImplAttributes);
                                }
                            }

                            internal sealed override bool RequiresSecurityObject
                            {
                                get { return false; }
                            }

                            public sealed override DllImportData GetDllImportData()
                            {
                                return null;
                            }

                            internal sealed override MarshalPseudoCustomAttributeData ReturnValueMarshallingInformation
                            {
                                get { return null; }
                            }

                            internal sealed override bool HasDeclarativeSecurity
                            {
                                get { return false; }
                            }

                            internal sealed override IEnumerable<Microsoft.Cci.SecurityAttribute> GetSecurityInformation()
                            {
                                throw ExceptionUtilities.Unreachable;
                            }

                            internal sealed override ImmutableArray<string> GetAppliedConditionalSymbols()
                            {
                                return ImmutableArray<string>.Empty;
                            }

                            public sealed override bool IsVararg
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<TypeParameterSymbol> TypeParameters
                            {
                                get { return ImmutableArray<TypeParameterSymbol>.Empty; }
                            }

                            internal sealed override LexicalSortKey GetLexicalSortKey()
                            {
                                //For the sake of matching the metadata output of the native compiler, make synthesized constructors appear last in the metadata.
                                //This is not critical, but it makes it easier on tools that are comparing metadata.
                                return LexicalSortKey.Last;
                            }

                            public sealed override ImmutableArray<Location> Locations
                            {
                                get { return ContainingType.Locations; }
                            }

                            public sealed override TypeSymbol ReturnType
                            {
                                get { return this.arrayTypeSymbol.BaseType.ContainingAssembly.GetSpecialType(SpecialType.System_Void); }
                            }

                            public sealed override ImmutableArray<CustomModifier> ReturnTypeCustomModifiers
                            {
                                get { return ImmutableArray<CustomModifier>.Empty; }
                            }

                            public sealed override ImmutableArray<TypeSymbol> TypeArguments
                            {
                                get { return ImmutableArray<TypeSymbol>.Empty; }
                            }

                            public sealed override Symbol AssociatedSymbol
                            {
                                get { return this.arrayTypeSymbol; }
                            }

                            public sealed override int Arity
                            {
                                get { return 0; }
                            }

                            public sealed override bool ReturnsVoid
                            {
                                get { return true; }
                            }

                            public sealed override MethodKind MethodKind
                            {
                                get { return MethodKind.PropertySet; }
                            }

                            public sealed override bool IsExtern
                            {
                                get
                                {
                                    // Synthesized constructors of ComImport type are extern
                                    NamedTypeSymbol containingType = this.ContainingType;
                                    return (object)containingType != null && containingType.IsComImport;
                                }
                            }

                            public sealed override bool IsSealed
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAbstract
                            {
                                get { return false; }
                            }

                            public sealed override bool IsOverride
                            {
                                get { return false; }
                            }

                            public sealed override bool IsVirtual
                            {
                                get { return false; }
                            }

                            public sealed override bool IsStatic
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAsync
                            {
                                get { return false; }
                            }

                            public sealed override bool HidesBaseMethodsByName
                            {
                                get { return false; }
                            }

                            internal sealed override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            internal sealed override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            public sealed override bool IsExtensionMethod
                            {
                                get { return false; }
                            }

                            internal sealed override Microsoft.Cci.CallingConvention CallingConvention
                            {
                                get { return Microsoft.Cci.CallingConvention.HasThis; }
                            }

                            internal sealed override bool IsExplicitInterfaceImplementation
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<MethodSymbol> ExplicitInterfaceImplementations
                            {
                                get { return ImmutableArray<MethodSymbol>.Empty; }
                            }

                            #endregion

                            internal override bool IsMetadataFinal()
                            {
                                return false;
                            }

                            internal override bool GenerateDebugInfo
                            {
                                get { return false; }
                            }

                            public override Accessibility DeclaredAccessibility
                            {
                                get { return Accessibility.Public; }
                            }
                        }

                        private sealed class ArrayGetValueMethod : SynthesizedInstanceMethodSymbol
                        {
                            private readonly ImmutableArray<ParameterSymbol> parameters;
                            private readonly ArrayTypeSymbol arrayTypeSymbol;

                            internal ArrayGetValueMethod(ArrayTypeSymbol arrayTypeSymbol)
                            {
                                this.arrayTypeSymbol = arrayTypeSymbol;
                                var intType = arrayTypeSymbol.BaseType.ContainingAssembly.GetSpecialType(SpecialType.System_Int32);
                                this.parameters = ImmutableArray.Create<ParameterSymbol>(
                                    Enumerable.Range(0, arrayTypeSymbol.Rank).Select(n => new SynthesizedParameterSymbol(this, intType, n, RefKind.None))
                                    .ToArray<ParameterSymbol>());
                            }

                            public override ImmutableArray<ParameterSymbol> Parameters
                            {
                                get { return parameters; }
                            }

                            #region Sealed

                            public sealed override Symbol ContainingSymbol
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override NamedTypeSymbol ContainingType
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override string Name
                            {
                                get
                                {
                                    return "Get";
                                }
                            }

                            internal sealed override bool HasSpecialName
                            {
                                get { return true; }
                            }

                            internal sealed override System.Reflection.MethodImplAttributes ImplementationAttributes
                            {
                                get
                                {
                                    var containingType = this.arrayTypeSymbol.BaseType;
                                    if (containingType.IsComImport)
                                    {
                                        Debug.Assert(containingType.TypeKind == TypeKind.Class);
                                        return System.Reflection.MethodImplAttributes.Runtime | System.Reflection.MethodImplAttributes.InternalCall;
                                    }

                                    if (containingType.TypeKind == TypeKind.Delegate)
                                    {
                                        return System.Reflection.MethodImplAttributes.Runtime;
                                    }

                                    return default(System.Reflection.MethodImplAttributes);
                                }
                            }

                            internal sealed override bool RequiresSecurityObject
                            {
                                get { return false; }
                            }

                            public sealed override DllImportData GetDllImportData()
                            {
                                return null;
                            }

                            internal sealed override MarshalPseudoCustomAttributeData ReturnValueMarshallingInformation
                            {
                                get { return null; }
                            }

                            internal sealed override bool HasDeclarativeSecurity
                            {
                                get { return false; }
                            }

                            internal sealed override IEnumerable<Microsoft.Cci.SecurityAttribute> GetSecurityInformation()
                            {
                                throw ExceptionUtilities.Unreachable;
                            }

                            internal sealed override ImmutableArray<string> GetAppliedConditionalSymbols()
                            {
                                return ImmutableArray<string>.Empty;
                            }

                            public sealed override bool IsVararg
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<TypeParameterSymbol> TypeParameters
                            {
                                get { return ImmutableArray<TypeParameterSymbol>.Empty; }
                            }

                            internal sealed override LexicalSortKey GetLexicalSortKey()
                            {
                                //For the sake of matching the metadata output of the native compiler, make synthesized constructors appear last in the metadata.
                                //This is not critical, but it makes it easier on tools that are comparing metadata.
                                return LexicalSortKey.Last;
                            }

                            public sealed override ImmutableArray<Location> Locations
                            {
                                get { return ContainingType.Locations; }
                            }

                            public sealed override TypeSymbol ReturnType
                            {
                                get { return this.arrayTypeSymbol.ElementType; }
                            }

                            public sealed override ImmutableArray<CustomModifier> ReturnTypeCustomModifiers
                            {
                                get { return ImmutableArray<CustomModifier>.Empty; }
                            }

                            public sealed override ImmutableArray<TypeSymbol> TypeArguments
                            {
                                get { return ImmutableArray<TypeSymbol>.Empty; }
                            }

                            public sealed override Symbol AssociatedSymbol
                            {
                                get { return this.arrayTypeSymbol; }
                            }

                            public sealed override int Arity
                            {
                                get { return 0; }
                            }

                            public sealed override bool ReturnsVoid
                            {
                                get { return false; }
                            }

                            public sealed override MethodKind MethodKind
                            {
                                get { return MethodKind.PropertyGet; }
                            }

                            public sealed override bool IsExtern
                            {
                                get
                                {
                                    // Synthesized constructors of ComImport type are extern
                                    NamedTypeSymbol containingType = this.ContainingType;
                                    return (object)containingType != null && containingType.IsComImport;
                                }
                            }

                            public sealed override bool IsSealed
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAbstract
                            {
                                get { return false; }
                            }

                            public sealed override bool IsOverride
                            {
                                get { return false; }
                            }

                            public sealed override bool IsVirtual
                            {
                                get { return false; }
                            }

                            public sealed override bool IsStatic
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAsync
                            {
                                get { return false; }
                            }

                            public sealed override bool HidesBaseMethodsByName
                            {
                                get { return false; }
                            }

                            internal sealed override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            internal sealed override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            public sealed override bool IsExtensionMethod
                            {
                                get { return false; }
                            }

                            internal sealed override Microsoft.Cci.CallingConvention CallingConvention
                            {
                                get { return Microsoft.Cci.CallingConvention.HasThis; }
                            }

                            internal sealed override bool IsExplicitInterfaceImplementation
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<MethodSymbol> ExplicitInterfaceImplementations
                            {
                                get { return ImmutableArray<MethodSymbol>.Empty; }
                            }

                            #endregion

                            internal override bool IsMetadataFinal()
                            {
                                return false;
                            }

                            internal override bool GenerateDebugInfo
                            {
                                get { return false; }
                            }

                            public override Accessibility DeclaredAccessibility
                            {
                                get { return Accessibility.Public; }
                            }
                        }

                        private sealed class ArrayAddressMethod : SynthesizedInstanceMethodSymbol
                        {
                            private readonly ImmutableArray<ParameterSymbol> parameters;
                            private readonly ArrayTypeSymbol arrayTypeSymbol;

                            internal ArrayAddressMethod(ArrayTypeSymbol arrayTypeSymbol)
                            {
                                this.arrayTypeSymbol = arrayTypeSymbol;
                                var intType = arrayTypeSymbol.BaseType.ContainingAssembly.GetSpecialType(SpecialType.System_Int32);
                                this.parameters = ImmutableArray.Create<ParameterSymbol>(
                                    Enumerable.Range(0, arrayTypeSymbol.Rank).Select(n => new SynthesizedParameterSymbol(this, intType, n, RefKind.None))
                                    .ToArray<ParameterSymbol>());
                            }

                            public override ImmutableArray<ParameterSymbol> Parameters
                            {
                                get { return parameters; }
                            }

                            #region Sealed

                            public sealed override Symbol ContainingSymbol
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override NamedTypeSymbol ContainingType
                            {
                                get
                                {
                                    return this.arrayTypeSymbol.BaseType;
                                }
                            }

                            public sealed override string Name
                            {
                                get
                                {
                                    return "Address";
                                }
                            }

                            internal sealed override bool HasSpecialName
                            {
                                get { return true; }
                            }

                            internal sealed override System.Reflection.MethodImplAttributes ImplementationAttributes
                            {
                                get
                                {
                                    var containingType = this.arrayTypeSymbol.BaseType;
                                    if (containingType.IsComImport)
                                    {
                                        Debug.Assert(containingType.TypeKind == TypeKind.Class);
                                        return System.Reflection.MethodImplAttributes.Runtime | System.Reflection.MethodImplAttributes.InternalCall;
                                    }

                                    if (containingType.TypeKind == TypeKind.Delegate)
                                    {
                                        return System.Reflection.MethodImplAttributes.Runtime;
                                    }

                                    return default(System.Reflection.MethodImplAttributes);
                                }
                            }

                            internal sealed override bool RequiresSecurityObject
                            {
                                get { return false; }
                            }

                            public sealed override DllImportData GetDllImportData()
                            {
                                return null;
                            }

                            internal sealed override MarshalPseudoCustomAttributeData ReturnValueMarshallingInformation
                            {
                                get { return null; }
                            }

                            internal sealed override bool HasDeclarativeSecurity
                            {
                                get { return false; }
                            }

                            internal sealed override IEnumerable<Microsoft.Cci.SecurityAttribute> GetSecurityInformation()
                            {
                                throw ExceptionUtilities.Unreachable;
                            }

                            internal sealed override ImmutableArray<string> GetAppliedConditionalSymbols()
                            {
                                return ImmutableArray<string>.Empty;
                            }

                            public sealed override bool IsVararg
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<TypeParameterSymbol> TypeParameters
                            {
                                get { return ImmutableArray<TypeParameterSymbol>.Empty; }
                            }

                            internal sealed override LexicalSortKey GetLexicalSortKey()
                            {
                                //For the sake of matching the metadata output of the native compiler, make synthesized constructors appear last in the metadata.
                                //This is not critical, but it makes it easier on tools that are comparing metadata.
                                return LexicalSortKey.Last;
                            }

                            public sealed override ImmutableArray<Location> Locations
                            {
                                get { return ContainingType.Locations; }
                            }

                            public sealed override TypeSymbol ReturnType
                            {
                                get { return new ByRefReturnErrorTypeSymbol(this.arrayTypeSymbol.ElementType); }
                            }

                            public sealed override ImmutableArray<CustomModifier> ReturnTypeCustomModifiers
                            {
                                get { return ImmutableArray<CustomModifier>.Empty; }
                            }

                            public sealed override ImmutableArray<TypeSymbol> TypeArguments
                            {
                                get { return ImmutableArray<TypeSymbol>.Empty; }
                            }

                            public sealed override Symbol AssociatedSymbol
                            {
                                get { return this.arrayTypeSymbol; }
                            }

                            public sealed override int Arity
                            {
                                get { return 0; }
                            }

                            public sealed override bool ReturnsVoid
                            {
                                get { return false; }
                            }

                            public sealed override MethodKind MethodKind
                            {
                                get { return MethodKind.PropertyGet; }
                            }

                            public sealed override bool IsExtern
                            {
                                get
                                {
                                    // Synthesized constructors of ComImport type are extern
                                    NamedTypeSymbol containingType = this.ContainingType;
                                    return (object)containingType != null && containingType.IsComImport;
                                }
                            }

                            public sealed override bool IsSealed
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAbstract
                            {
                                get { return false; }
                            }

                            public sealed override bool IsOverride
                            {
                                get { return false; }
                            }

                            public sealed override bool IsVirtual
                            {
                                get { return false; }
                            }

                            public sealed override bool IsStatic
                            {
                                get { return false; }
                            }

                            public sealed override bool IsAsync
                            {
                                get { return false; }
                            }

                            public sealed override bool HidesBaseMethodsByName
                            {
                                get { return false; }
                            }

                            internal sealed override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            internal sealed override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false)
                            {
                                return false;
                            }

                            public sealed override bool IsExtensionMethod
                            {
                                get { return false; }
                            }

                            internal sealed override Microsoft.Cci.CallingConvention CallingConvention
                            {
                                get { return Microsoft.Cci.CallingConvention.HasThis; }
                            }

                            internal sealed override bool IsExplicitInterfaceImplementation
                            {
                                get { return false; }
                            }

                            public sealed override ImmutableArray<MethodSymbol> ExplicitInterfaceImplementations
                            {
                                get { return ImmutableArray<MethodSymbol>.Empty; }
                            }

                            #endregion

                            internal override bool IsMetadataFinal()
                            {
                                return false;
                            }

                            internal override bool GenerateDebugInfo
                            {
                                get { return false; }
                            }

                            public override Accessibility DeclaredAccessibility
                            {
                                get { return Accessibility.Public; }
                            }
                        }
             
             */

            /*
             * FIX for Roslyn code
             *  internal override Symbol GetSymbolForMemberRef(MemberReferenceHandle memberRef, TypeSymbol scope = null, bool methodsOnly = false)
                {
                    TypeSymbol targetTypeSymbol = GetMemberRefTypeSymbol(memberRef);

                    // TODO: ASD: MY ADDON
                    if (targetTypeSymbol == null)
                    {
                        Handle container = Module.GetContainingTypeOrThrow(memberRef);
                        HandleType containerType = container.HandleType;
                        if (containerType == HandleType.Method)
                        {
                            return GetSymbolForILToken(container);
                        }
                    }
             
                    ...
             */

            /*
             * FIX for Roslyn Code - 2
                protected override TypeSymbol GetGenericTypeParamSymbol(int position)
                {
                    ...
                    // TODO: ASD ADDON
                    ArrayTypeSymbol arrayTypeSymbol = this.containingType as ArrayTypeSymbol;
                    if ((object)arrayTypeSymbol != null && position == 0 && arrayTypeSymbol.ElementType is TypeParameterSymbol)
                    {
                        return arrayTypeSymbol.ElementType;
                    }

                    ...
                }             
             */

            var symbolForIlToken = peModuleSymbol.GetMetadataDecoder(genericContext).GetSymbolForILToken(methodHandle);
            var methodSymbol = symbolForIlToken as MethodSymbol;
            if (methodSymbol != null)
            {
                if (methodSymbol.MethodKind == MethodKind.Constructor)
                {
                    return new MetadataConstructorAdapter(SubstituteMethodSymbolIfNeeded(methodSymbol, genericContext));
                }

                return new MetadataMethodAdapter(SubstituteMethodSymbolIfNeeded(methodSymbol, genericContext));
            }

            throw new KeyNotFoundException();
        }
コード例 #46
0
 public GameOverSystem(Contexts contexts) : base(contexts.GameState, Trigger)
 {
     _config    = contexts.Config;
     _gameState = contexts.GameState;
 }
コード例 #47
0
        private static AbstractTypeParameterMap GetTypeSubstitutionMap(IGenericContext genericContext)
        {
            if (MetadataGenericContext.IsNullOrEmptyOrNoSpecializations(genericContext))
            {
                throw new ArgumentException("genericContext");
            }

            var metadataGenericContext = genericContext as MetadataGenericContext;
            if (metadataGenericContext != null && metadataGenericContext.CustomTypeSubstitution != null)
            {
                return metadataGenericContext.CustomTypeSubstitution;
            }


            if (genericContext.MethodSpecialization != null)
            {
                var metadataMethodAdapter = (genericContext.MethodSpecialization as MetadataMethodAdapter);
                if (metadataMethodAdapter != null)
                {
                    return metadataMethodAdapter.MethodDef.TypeSubstitution;
                }
            }

            if (genericContext.TypeSpecialization != null)
            {
                var metadataTypeAdapter = (genericContext.TypeSpecialization as MetadataTypeAdapter);
                if (metadataTypeAdapter != null)
                {
                    var namedTypeSymbol = metadataTypeAdapter.TypeDef as NamedTypeSymbol;
                    if (namedTypeSymbol != null)
                    {
                        return namedTypeSymbol.TypeSubstitution;
                    }
                }
            }

            throw new Exception("Context is empty");
        }
コード例 #48
0
ファイル: ModuleReader.cs プロジェクト: kenasogoo/ikvm-fork
 internal TrackingGenericContext(IGenericContext context)
 {
     this.context = context;
 }
コード例 #49
0
        internal static MethodSymbol SubstituteMethodSymbolIfNeeded(MethodSymbol methodSymbol, IGenericContext genericContext)
        {
            if (MetadataGenericContext.IsNullOrEmptyOrNoSpecializations(genericContext))
            {
                return methodSymbol;
            }

            var method = new MetadataMethodAdapter(methodSymbol);
            if (!method.IsGenericMethodDefinition && !method.DeclaringType.IsGenericTypeDefinition)
            {
                return methodSymbol;
            }

            var resolvedMethodSymbol = methodSymbol;
            if (method.DeclaringType.IsGenericTypeDefinition)
            {
                var constructedContainingType = SubstituteTypeSymbolIfNeeded(methodSymbol.ContainingType, genericContext);
                var substitutedNamedTypeSymbol = constructedContainingType as SubstitutedNamedTypeSymbol;
                if (substitutedNamedTypeSymbol != null)
                {
                    resolvedMethodSymbol = new SubstitutedMethodSymbol(
                        substitutedNamedTypeSymbol,
                        methodSymbol.ConstructedFrom.OriginalDefinition);
                }
                else
                {
                    var typeDef = (method.DeclaringType as MetadataTypeAdapter).TypeDef;
                    constructedContainingType = SubstituteTypeSymbolIfNeeded(typeDef, genericContext);
                    resolvedMethodSymbol = (constructedContainingType as ArrayTypeSymbol).GetMembers(methodSymbol.Name)[0] as MethodSymbol;
                }
            }

            if (method.IsGenericMethodDefinition || method.IsGenericMethod)
            {
                return ConstructMethodSymbol(resolvedMethodSymbol, methodSymbol.TypeSubstitution, genericContext);
            }

            return resolvedMethodSymbol;
        }
コード例 #50
0
ファイル: DelegateGen.cs プロジェクト: SperoSophia/il2bc
 /// <summary>
 /// </summary>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 public IMethodBody GetMethodBody(IGenericContext genericContext = null)
 {
     return new SynthesizedDummyMethodBody();
 }
コード例 #51
0
        /// <summary>
        /// </summary>
        /// <param name="token">
        /// </param>
        /// <param name="genericContext">
        /// </param>
        /// <returns>
        /// </returns>
        /// <exception cref="KeyNotFoundException">
        /// </exception>
        public object ResolveToken(int token, IGenericContext genericContext)
        {
            var peModuleSymbol = this.moduleDef as PEModuleSymbol;

            var typeDefHandle = MetadataTokens.Handle(token);
            var symbolForIlToken = peModuleSymbol.GetMetadataDecoder(genericContext).GetSymbolForILToken(typeDefHandle);
            var typeSymbol = symbolForIlToken as TypeSymbol;
            if (typeSymbol != null && typeSymbol.TypeKind != TypeKind.Error)
            {
                return SubstituteTypeSymbolIfNeeded(typeSymbol, genericContext).ToAdapter();
            }

            var fieldSymbol = symbolForIlToken as FieldSymbol;
            if (fieldSymbol != null)
            {
                return new MetadataFieldAdapter(SubstituteFieldSymbolIfNeeded(fieldSymbol, genericContext));
            }

            var methodSymbol = symbolForIlToken as MethodSymbol;
            if (methodSymbol != null)
            {
                return new MetadataMethodAdapter(SubstituteMethodSymbolIfNeeded(methodSymbol, genericContext));
            }

            throw new KeyNotFoundException();
        }
コード例 #52
0
 public override IMethodBody GetMethodBody(IGenericContext genericContext = null)
 {
     return(this._methodBody);
 }
コード例 #53
0
        /// <summary>
        /// </summary>
        /// <param name="fullName">
        /// </param>
        /// <param name="genericContext">
        /// </param>
        /// <returns>
        /// </returns>
        /// <exception cref="KeyNotFoundException">
        /// </exception>
        public IType ResolveType(string fullName, IGenericContext genericContext)
        {
            var peModuleSymbol = this.moduleDef as PEModuleSymbol;

            var typeSymbol = peModuleSymbol.GetMetadataDecoder(genericContext).GetTypeSymbolForSerializedType(fullName);
            if (typeSymbol.TypeKind == TypeKind.Error)
            {
                // try to find it in CoreLib
                typeSymbol =
                    new MetadataDecoder(peModuleSymbol.ContainingAssembly.CorLibrary.Modules[0] as PEModuleSymbol).GetTypeSymbolForSerializedType(fullName);
            }

            if (typeSymbol != null && typeSymbol.TypeKind != TypeKind.Error)
            {
                if (genericContext == null)
                {
                    return typeSymbol.OriginalDefinition.ToAdapter();
                }

                return typeSymbol.ToAdapter();
            }

            throw new KeyNotFoundException();
        }
コード例 #54
0
        TypeReference ImportTypeSpecification(TypeReference type, IGenericContext context)
        {
            switch (type.etype)
            {
            case ElementType.SzArray:
                var vector = (ArrayType)type;
                return(new ArrayType(ImportType(vector.ElementType, context)));

            case ElementType.Ptr:
                var pointer = (PointerType)type;
                return(new PointerType(ImportType(pointer.ElementType, context)));

            case ElementType.ByRef:
                var byref = (ByReferenceType)type;
                return(new ByReferenceType(ImportType(byref.ElementType, context)));

            case ElementType.Pinned:
                var pinned = (PinnedType)type;
                return(new PinnedType(ImportType(pinned.ElementType, context)));

            case ElementType.Sentinel:
                var sentinel = (SentinelType)type;
                return(new SentinelType(ImportType(sentinel.ElementType, context)));

            case ElementType.CModOpt:
                var modopt = (OptionalModifierType)type;
                return(new OptionalModifierType(
                           ImportType(modopt.ModifierType, context),
                           ImportType(modopt.ElementType, context)));

            case ElementType.CModReqD:
                var modreq = (RequiredModifierType)type;
                return(new RequiredModifierType(
                           ImportType(modreq.ModifierType, context),
                           ImportType(modreq.ElementType, context)));

            case ElementType.Array:
                var array          = (ArrayType)type;
                var imported_array = new ArrayType(ImportType(array.ElementType, context));
                if (array.IsVector)
                {
                    return(imported_array);
                }

                var dimensions          = array.Dimensions;
                var imported_dimensions = imported_array.Dimensions;

                imported_dimensions.Clear();

                for (int i = 0; i < dimensions.Count; i++)
                {
                    var dimension = dimensions[i];

                    imported_dimensions.Add(new ArrayDimension(dimension.LowerBound, dimension.UpperBound));
                }

                return(imported_array);

            case ElementType.GenericInst:
                var instance          = (GenericInstanceType)type;
                var element_type      = ImportType(instance.ElementType, context);
                var imported_instance = new GenericInstanceType(element_type);

                var arguments          = instance.GenericArguments;
                var imported_arguments = imported_instance.GenericArguments;

                for (int i = 0; i < arguments.Count; i++)
                {
                    imported_arguments.Add(ImportType(arguments[i], context));
                }

                return(imported_instance);

            case ElementType.Var:
                if (context == null || context.Type == null)
                {
                    throw new InvalidOperationException();
                }

                return(((TypeReference)context.Type).GetElementType().GenericParameters[((GenericParameter)type).Position]);

            case ElementType.MVar:
                if (context == null || context.Method == null)
                {
                    throw new InvalidOperationException();
                }

                return(context.Method.GenericParameters[((GenericParameter)type).Position]);
            }

            throw new NotSupportedException(type.etype.ToString());
        }
コード例 #55
0
 private static ICollector <GameStateEntity> Trigger(IGenericContext <GameStateEntity> context)
 {
     return(context.GetTriggerCollector <ActionCountComponent>());
 }
コード例 #56
0
 public DataRepository(IGenericContext _ctx)
     : base(_ctx)
 {
     this.ctx = _ctx;
 }
コード例 #57
0
ファイル: ModuleReader.cs プロジェクト: kenasogoo/ikvm-fork
 internal override Type ResolveType(int metadataToken, IGenericContext context)
 {
     int index = (metadataToken & 0xFFFFFF) - 1;
     if (index < 0)
     {
         throw TokenOutOfRangeException(metadataToken);
     }
     else if ((metadataToken >> 24) == TypeDefTable.Index && index < TypeDef.RowCount)
     {
         PopulateTypeDef();
         return typeDefs[index];
     }
     else if ((metadataToken >> 24) == TypeRefTable.Index && index < TypeRef.RowCount)
     {
         if (typeRefs == null)
         {
             typeRefs = new Type[TypeRef.records.Length];
         }
         if (typeRefs[index] == null)
         {
             int scope = TypeRef.records[index].ResolutionScope;
             switch (scope >> 24)
             {
                 case AssemblyRefTable.Index:
                     {
                         Assembly assembly = ResolveAssemblyRef((scope & 0xFFFFFF) - 1);
                         TypeName typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
                         typeRefs[index] = assembly.ResolveType(this, typeName);
                         break;
                     }
                 case TypeRefTable.Index:
                     {
                         Type outer = ResolveType(scope, null);
                         TypeName typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
                         typeRefs[index] = outer.ResolveNestedType(this, typeName);
                         break;
                     }
                 case ModuleTable.Index:
                 case ModuleRefTable.Index:
                     {
                         Module module;
                         if (scope >> 24 == ModuleTable.Index)
                         {
                             if (scope == 0 || scope == 1)
                             {
                                 module = this;
                             }
                             else
                             {
                                 throw new NotImplementedException("self reference scope?");
                             }
                         }
                         else
                         {
                             module = ResolveModuleRef(ModuleRef.records[(scope & 0xFFFFFF) - 1]);
                         }
                         TypeName typeName = GetTypeName(TypeRef.records[index].TypeNameSpace, TypeRef.records[index].TypeName);
                         typeRefs[index] = module.FindType(typeName) ?? module.universe.GetMissingTypeOrThrow(this, module, null, typeName);
                         break;
                     }
                 default:
                     throw new NotImplementedException("ResolutionScope = " + scope.ToString("X"));
             }
         }
         return typeRefs[index];
     }
     else if ((metadataToken >> 24) == TypeSpecTable.Index && index < TypeSpec.RowCount)
     {
         if (typeSpecs == null)
         {
             typeSpecs = new Type[TypeSpec.records.Length];
         }
         Type type = typeSpecs[index];
         if (type == null)
         {
             TrackingGenericContext tc = context == null ? null : new TrackingGenericContext(context);
             type = Signature.ReadTypeSpec(this, ByteReader.FromBlob(blobHeap, TypeSpec.records[index]), tc);
             if (tc == null || !tc.IsUsed)
             {
                 typeSpecs[index] = type;
             }
         }
         return type;
     }
     else
     {
         throw TokenOutOfRangeException(metadataToken);
     }
 }
コード例 #58
0
 /// <summary>
 /// </summary>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 public IMethodBody GetMethodBody(IGenericContext genericContext = null)
 {
     return(new SynthesizedDummyMethodBody());
 }
コード例 #59
0
ファイル: DelegateGen.cs プロジェクト: SperoSophia/il2bc
 /// <summary>
 /// </summary>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 /// <exception cref="NotImplementedException">
 /// </exception>
 public IMethod ToSpecialization(IGenericContext genericContext)
 {
     throw new NotImplementedException();
 }
コード例 #60
0
 /// <summary>
 /// </summary>
 /// <param name="genericContext">
 /// </param>
 /// <returns>
 /// </returns>
 /// <exception cref="NotImplementedException">
 /// </exception>
 public IMethod ToSpecialization(IGenericContext genericContext)
 {
     throw new NotImplementedException();
 }