From acb03697ab76f0250e704b422f10f3c482f78eaf Mon Sep 17 00:00:00 2001 From: ehakram Date: Mon, 29 Mar 2021 00:57:52 +0400 Subject: [PATCH] version 1.2.1 Solves issue #1 --- .../net35/Mono.Cecil.Mdb.dll | Bin 43008 -> 0 bytes .../net35/Mono.Cecil.Mdb.dll.meta | 71 - .../net35/Mono.Cecil.Pdb.dll | Bin 86528 -> 0 bytes .../net35/Mono.Cecil.Pdb.dll.meta | 71 - .../net35/Mono.Cecil.Rocks.dll | Bin 27648 -> 0 bytes .../net35/Mono.Cecil.Rocks.dll.meta | 71 - .../Mono.Cecil.0.10.0/net35/Mono.Cecil.dll | Bin 337920 -> 0 bytes .../net35/Mono.Cecil.dll.meta | 71 - Assets/Plugins/FrameRateBooster/ReadMe.txt | 4 +- ...Mono.Cecil.0.10.0.meta => ThirdParty.meta} | 2 +- .../net35.meta => ThirdParty/Editor.meta} | 2 +- .../ThirdParty/Editor/Mono.Cecil.0.10.3.meta | 8 + .../Editor/Mono.Cecil.0.10.3}/LICENSE.txt | 42 +- .../Mono.Cecil.0.10.3}/LICENSE.txt.meta | 0 .../Mono.Cecil.0.10.3/Mono.Cecil.Cil.meta | 8 + .../Mono.Cecil.0.10.3/Mono.Cecil.Cil/Code.cs | 234 + .../Mono.Cecil.Cil/Code.cs.meta | 11 + .../Mono.Cecil.Cil/CodeReader.cs | 671 +++ .../Mono.Cecil.Cil/CodeReader.cs.meta | 11 + .../Mono.Cecil.Cil/CodeWriter.cs | 659 +++ .../Mono.Cecil.Cil/CodeWriter.cs.meta | 11 + .../Mono.Cecil.Cil/Document.cs | 123 + .../Mono.Cecil.Cil/Document.cs.meta | 11 + .../Mono.Cecil.Cil/ExceptionHandler.cs | 71 + .../Mono.Cecil.Cil/ExceptionHandler.cs.meta | 11 + .../Mono.Cecil.Cil/ILProcessor.cs | 260 ++ .../Mono.Cecil.Cil/ILProcessor.cs.meta | 11 + .../Mono.Cecil.Cil/Instruction.cs | 296 ++ .../Mono.Cecil.Cil/Instruction.cs.meta | 11 + .../Mono.Cecil.Cil/MethodBody.cs | 248 ++ .../Mono.Cecil.Cil/MethodBody.cs.meta | 11 + .../Mono.Cecil.Cil/OpCode.cs | 439 ++ .../Mono.Cecil.Cil/OpCode.cs.meta | 11 + .../Mono.Cecil.Cil/OpCodes.cs | 894 ++++ .../Mono.Cecil.Cil/OpCodes.cs.meta | 11 + .../Mono.Cecil.Cil/PortablePdb.cs | 590 +++ .../Mono.Cecil.Cil/PortablePdb.cs.meta | 11 + .../Mono.Cecil.Cil/SequencePoint.cs | 76 + .../Mono.Cecil.Cil/SequencePoint.cs.meta | 11 + .../Mono.Cecil.Cil/Symbols.cs | 1127 +++++ .../Mono.Cecil.Cil/Symbols.cs.meta | 11 + .../Mono.Cecil.Cil/VariableDefinition.cs | 29 + .../Mono.Cecil.Cil/VariableDefinition.cs.meta | 11 + .../Mono.Cecil.Cil/VariableReference.cs | 42 + .../Mono.Cecil.Cil/VariableReference.cs.meta | 11 + .../Mono.Cecil.Metadata.meta | 8 + .../Mono.Cecil.Metadata/BlobHeap.cs | 54 + .../Mono.Cecil.Metadata/BlobHeap.cs.meta | 11 + .../Mono.Cecil.Metadata/Buffers.cs | 505 +++ .../Mono.Cecil.Metadata/Buffers.cs.meta | 11 + .../Mono.Cecil.Metadata/CodedIndex.cs | 29 + .../Mono.Cecil.Metadata/CodedIndex.cs.meta | 11 + .../Mono.Cecil.Metadata/ElementType.cs | 55 + .../Mono.Cecil.Metadata/ElementType.cs.meta | 11 + .../Mono.Cecil.Metadata/GuidHeap.cs | 36 + .../Mono.Cecil.Metadata/GuidHeap.cs.meta | 11 + .../Mono.Cecil.Metadata/Heap.cs | 24 + .../Mono.Cecil.Metadata/Heap.cs.meta | 11 + .../Mono.Cecil.Metadata/MetadataToken.cs | 94 + .../Mono.Cecil.Metadata/MetadataToken.cs.meta | 11 + .../Mono.Cecil.Metadata/PdbHeap.cs | 34 + .../Mono.Cecil.Metadata/PdbHeap.cs.meta | 11 + .../Mono.Cecil.Metadata/Row.cs | 152 + .../Mono.Cecil.Metadata/Row.cs.meta | 11 + .../Mono.Cecil.Metadata/StringHeap.cs | 60 + .../Mono.Cecil.Metadata/StringHeap.cs.meta | 11 + .../Mono.Cecil.Metadata/TableHeap.cs | 104 + .../Mono.Cecil.Metadata/TableHeap.cs.meta | 11 + .../Mono.Cecil.Metadata/TokenType.cs | 49 + .../Mono.Cecil.Metadata/TokenType.cs.meta | 11 + .../Mono.Cecil.Metadata/UserStringHeap.cs | 36 + .../UserStringHeap.cs.meta | 11 + .../Mono.Cecil.Metadata/Utilities.cs | 652 +++ .../Mono.Cecil.Metadata/Utilities.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil.PE.meta | 8 + .../Mono.Cecil.PE/BinaryStreamReader.cs | 54 + .../Mono.Cecil.PE/BinaryStreamReader.cs.meta | 11 + .../Mono.Cecil.PE/BinaryStreamWriter.cs | 93 + .../Mono.Cecil.PE/BinaryStreamWriter.cs.meta | 11 + .../Mono.Cecil.PE/ByteBuffer.cs | 341 ++ .../Mono.Cecil.PE/ByteBuffer.cs.meta | 11 + .../ByteBufferEqualityComparer.cs | 48 + .../ByteBufferEqualityComparer.cs.meta | 11 + .../Mono.Cecil.PE/DataDirectory.cs | 32 + .../Mono.Cecil.PE/DataDirectory.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs | 170 + .../Mono.Cecil.PE/Image.cs.meta | 11 + .../Mono.Cecil.PE/ImageReader.cs | 793 ++++ .../Mono.Cecil.PE/ImageReader.cs.meta | 11 + .../Mono.Cecil.PE/ImageWriter.cs | 855 ++++ .../Mono.Cecil.PE/ImageWriter.cs.meta | 11 + .../Mono.Cecil.PE/Section.cs | 24 + .../Mono.Cecil.PE/Section.cs.meta | 11 + .../Mono.Cecil.PE/TextMap.cs | 112 + .../Mono.Cecil.PE/TextMap.cs.meta | 11 + .../Editor/Mono.Cecil.0.10.3/Mono.Cecil.meta | 8 + .../Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs | 141 + .../Mono.Cecil/ArrayType.cs.meta | 11 + .../Mono.Cecil/AssemblyDefinition.cs | 194 + .../Mono.Cecil/AssemblyDefinition.cs.meta | 11 + .../Mono.Cecil/AssemblyFlags.cs | 24 + .../Mono.Cecil/AssemblyFlags.cs.meta | 11 + .../Mono.Cecil/AssemblyHashAlgorithm.cs | 18 + .../Mono.Cecil/AssemblyHashAlgorithm.cs.meta | 11 + .../Mono.Cecil/AssemblyInfo.cs | 24 + .../Mono.Cecil/AssemblyInfo.cs.meta | 11 + .../Mono.Cecil/AssemblyLinkedResource.cs | 39 + .../Mono.Cecil/AssemblyLinkedResource.cs.meta | 11 + .../Mono.Cecil/AssemblyNameDefinition.cs | 32 + .../Mono.Cecil/AssemblyNameDefinition.cs.meta | 11 + .../Mono.Cecil/AssemblyNameReference.cs | 266 ++ .../Mono.Cecil/AssemblyNameReference.cs.meta | 11 + .../Mono.Cecil/AssemblyReader.cs | 3862 +++++++++++++++++ .../Mono.Cecil/AssemblyReader.cs.meta | 11 + .../Mono.Cecil/AssemblyWriter.cs | 3310 ++++++++++++++ .../Mono.Cecil/AssemblyWriter.cs.meta | 11 + .../Mono.Cecil/BaseAssemblyResolver.cs | 410 ++ .../Mono.Cecil/BaseAssemblyResolver.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs | 106 + .../Mono.Cecil/CallSite.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs | 5 + .../Mono.Cecil/Consts.cs.meta | 11 + .../Mono.Cecil/CustomAttribute.cs | 205 + .../Mono.Cecil/CustomAttribute.cs.meta | 11 + .../Mono.Cecil/DefaultAssemblyResolver.cs | 61 + .../DefaultAssemblyResolver.cs.meta | 11 + .../Mono.Cecil/EmbeddedResource.cs | 98 + .../Mono.Cecil/EmbeddedResource.cs.meta | 11 + .../Mono.Cecil/EventAttributes.cs | 21 + .../Mono.Cecil/EventAttributes.cs.meta | 11 + .../Mono.Cecil/EventDefinition.cs | 155 + .../Mono.Cecil/EventDefinition.cs.meta | 11 + .../Mono.Cecil/EventReference.cs | 42 + .../Mono.Cecil/EventReference.cs.meta | 11 + .../Mono.Cecil/ExportedType.cs | 240 + .../Mono.Cecil/ExportedType.cs.meta | 11 + .../Mono.Cecil/FieldAttributes.cs | 41 + .../Mono.Cecil/FieldAttributes.cs.meta | 11 + .../Mono.Cecil/FieldDefinition.cs | 267 ++ .../Mono.Cecil/FieldDefinition.cs.meta | 11 + .../Mono.Cecil/FieldReference.cs | 68 + .../Mono.Cecil/FieldReference.cs.meta | 11 + .../Mono.Cecil/FileAttributes.cs | 17 + .../Mono.Cecil/FileAttributes.cs.meta | 11 + .../Mono.Cecil/FunctionPointerType.cs | 111 + .../Mono.Cecil/FunctionPointerType.cs.meta | 11 + .../Mono.Cecil/GenericInstanceMethod.cs | 67 + .../Mono.Cecil/GenericInstanceMethod.cs.meta | 11 + .../Mono.Cecil/GenericInstanceType.cs | 65 + .../Mono.Cecil/GenericInstanceType.cs.meta | 11 + .../Mono.Cecil/GenericParameter.cs | 268 ++ .../Mono.Cecil/GenericParameter.cs.meta | 11 + .../Mono.Cecil/GenericParameterAttributes.cs | 27 + .../GenericParameterAttributes.cs.meta | 11 + .../Mono.Cecil/IConstantProvider.cs | 44 + .../Mono.Cecil/IConstantProvider.cs.meta | 11 + .../Mono.Cecil/ICustomAttributeProvider.cs | 42 + .../ICustomAttributeProvider.cs.meta | 11 + .../Mono.Cecil/IGenericInstance.cs | 48 + .../Mono.Cecil/IGenericInstance.cs.meta | 11 + .../Mono.Cecil/IGenericParameterProvider.cs | 56 + .../IGenericParameterProvider.cs.meta | 11 + .../Mono.Cecil/IMarshalInfoProvider.cs | 38 + .../Mono.Cecil/IMarshalInfoProvider.cs.meta | 11 + .../Mono.Cecil/IMemberDefinition.cs | 82 + .../Mono.Cecil/IMemberDefinition.cs.meta | 11 + .../Mono.Cecil/IMetadataScope.cs | 23 + .../Mono.Cecil/IMetadataScope.cs.meta | 11 + .../Mono.Cecil/IMetadataTokenProvider.cs | 17 + .../Mono.Cecil/IMetadataTokenProvider.cs.meta | 11 + .../Mono.Cecil/IMethodSignature.cs | 57 + .../Mono.Cecil/IMethodSignature.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil/Import.cs | 829 ++++ .../Mono.Cecil/Import.cs.meta | 11 + .../Mono.Cecil/LinkedResource.cs | 42 + .../Mono.Cecil/LinkedResource.cs.meta | 11 + .../Mono.Cecil/ManifestResourceAttributes.cs | 21 + .../ManifestResourceAttributes.cs.meta | 11 + .../Mono.Cecil/MarshalInfo.cs | 153 + .../Mono.Cecil/MarshalInfo.cs.meta | 11 + .../Mono.Cecil/MemberDefinitionCollection.cs | 74 + .../MemberDefinitionCollection.cs.meta | 11 + .../Mono.Cecil/MemberReference.cs | 107 + .../Mono.Cecil/MemberReference.cs.meta | 11 + .../Mono.Cecil/MetadataResolver.cs | 391 ++ .../Mono.Cecil/MetadataResolver.cs.meta | 11 + .../Mono.Cecil/MetadataSystem.cs | 429 ++ .../Mono.Cecil/MetadataSystem.cs.meta | 11 + .../Mono.Cecil/MethodAttributes.cs | 48 + .../Mono.Cecil/MethodAttributes.cs.meta | 11 + .../Mono.Cecil/MethodCallingConvention.cs | 22 + .../MethodCallingConvention.cs.meta | 11 + .../Mono.Cecil/MethodDefinition.cs | 545 +++ .../Mono.Cecil/MethodDefinition.cs.meta | 11 + .../Mono.Cecil/MethodImplAttributes.cs | 36 + .../Mono.Cecil/MethodImplAttributes.cs.meta | 11 + .../Mono.Cecil/MethodReference.cs | 202 + .../Mono.Cecil/MethodReference.cs.meta | 11 + .../Mono.Cecil/MethodReturnType.cs | 98 + .../Mono.Cecil/MethodReturnType.cs.meta | 11 + .../Mono.Cecil/MethodSemanticsAttributes.cs | 25 + .../MethodSemanticsAttributes.cs.meta | 11 + .../Mono.Cecil/MethodSpecification.cs | 84 + .../Mono.Cecil/MethodSpecification.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs | 112 + .../Mono.Cecil/Modifiers.cs.meta | 11 + .../Mono.Cecil/ModuleDefinition.cs | 1373 ++++++ .../Mono.Cecil/ModuleDefinition.cs.meta | 11 + .../Mono.Cecil/ModuleKind.cs | 55 + .../Mono.Cecil/ModuleKind.cs.meta | 11 + .../Mono.Cecil/ModuleReference.cs | 49 + .../Mono.Cecil/ModuleReference.cs.meta | 11 + .../Mono.Cecil/NativeType.cs | 55 + .../Mono.Cecil/NativeType.cs.meta | 11 + .../Mono.Cecil/PInvokeAttributes.cs | 44 + .../Mono.Cecil/PInvokeAttributes.cs.meta | 11 + .../Mono.Cecil/PInvokeInfo.cs | 120 + .../Mono.Cecil/PInvokeInfo.cs.meta | 11 + .../Mono.Cecil/ParameterAttributes.cs | 27 + .../Mono.Cecil/ParameterAttributes.cs.meta | 11 + .../Mono.Cecil/ParameterDefinition.cs | 146 + .../Mono.Cecil/ParameterDefinition.cs.meta | 11 + .../ParameterDefinitionCollection.cs | 62 + .../ParameterDefinitionCollection.cs.meta | 11 + .../Mono.Cecil/ParameterReference.cs | 57 + .../Mono.Cecil/ParameterReference.cs.meta | 11 + .../Mono.Cecil/PinnedType.cs | 35 + .../Mono.Cecil/PinnedType.cs.meta | 11 + .../Mono.Cecil/PointerType.cs | 43 + .../Mono.Cecil/PointerType.cs.meta | 11 + .../Mono.Cecil/PropertyAttributes.cs | 23 + .../Mono.Cecil/PropertyAttributes.cs.meta | 11 + .../Mono.Cecil/PropertyDefinition.cs | 244 ++ .../Mono.Cecil/PropertyDefinition.cs.meta | 11 + .../Mono.Cecil/PropertyReference.cs | 45 + .../Mono.Cecil/PropertyReference.cs.meta | 11 + .../Mono.Cecil/ReferenceType.cs | 43 + .../Mono.Cecil/ReferenceType.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs | 58 + .../Mono.Cecil/Resource.cs.meta | 11 + .../Mono.Cecil/SecurityDeclaration.cs | 179 + .../Mono.Cecil/SecurityDeclaration.cs.meta | 11 + .../Mono.Cecil/SentinelType.cs | 35 + .../Mono.Cecil/SentinelType.cs.meta | 11 + .../Mono.Cecil/TargetRuntime.cs | 19 + .../Mono.Cecil/TargetRuntime.cs.meta | 11 + .../Mono.Cecil/Treatments.cs | 66 + .../Mono.Cecil/Treatments.cs.meta | 11 + .../Mono.Cecil/TypeAttributes.cs | 63 + .../Mono.Cecil/TypeAttributes.cs.meta | 11 + .../Mono.Cecil/TypeDefinition.cs | 609 +++ .../Mono.Cecil/TypeDefinition.cs.meta | 11 + .../Mono.Cecil/TypeDefinitionCollection.cs | 100 + .../TypeDefinitionCollection.cs.meta | 11 + .../Mono.Cecil/TypeParser.cs | 532 +++ .../Mono.Cecil/TypeParser.cs.meta | 11 + .../Mono.Cecil/TypeReference.cs | 352 ++ .../Mono.Cecil/TypeReference.cs.meta | 11 + .../Mono.Cecil/TypeSpecification.cs | 68 + .../Mono.Cecil/TypeSpecification.cs.meta | 11 + .../Mono.Cecil/TypeSystem.cs | 331 ++ .../Mono.Cecil/TypeSystem.cs.meta | 11 + .../Mono.Cecil/VariantType.cs | 35 + .../Mono.Cecil/VariantType.cs.meta | 11 + .../Mono.Cecil/WindowsRuntimeProjections.cs | 875 ++++ .../WindowsRuntimeProjections.cs.meta | 11 + .../Mono.Collections.Generic.meta | 8 + .../Mono.Collections.Generic/Collection.cs | 416 ++ .../Collection.cs.meta | 11 + .../ReadOnlyCollection.cs | 94 + .../ReadOnlyCollection.cs.meta | 11 + .../Mono.Security.Cryptography.meta | 8 + .../CryptoConvert.cs | 253 ++ .../CryptoConvert.cs.meta | 11 + .../CryptoService.cs | 158 + .../CryptoService.cs.meta | 11 + .../Editor/Mono.Cecil.0.10.3/Mono.meta | 8 + .../Mono.Cecil.0.10.3/Mono/Disposable.cs | 45 + .../Mono.Cecil.0.10.3/Mono/Disposable.cs.meta | 11 + .../Editor/Mono.Cecil.0.10.3/Mono/Empty.cs | 62 + .../Mono.Cecil.0.10.3/Mono/Empty.cs.meta | 11 + .../Mono.Cecil.0.10.3/Mono/MergeSort.cs | 66 + .../Mono.Cecil.0.10.3/Mono/MergeSort.cs.meta | 11 + .../Editor/Mono.Cecil.0.10.3/Mono/Type.cs | 137 + .../Mono.Cecil.0.10.3/Mono/Type.cs.meta | 11 + .../Editor/Mono.Cecil.0.10.3/README.md | 23 + .../Editor/Mono.Cecil.0.10.3/README.md.meta | 7 + .../FrameRateBooster/ThirdPartyNotices.txt | 2 +- 288 files changed, 32521 insertions(+), 309 deletions(-) delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll.meta delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll.meta delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll.meta delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.dll delete mode 100644 Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.dll.meta rename Assets/Plugins/FrameRateBooster/{Mono.Cecil.0.10.0.meta => ThirdParty.meta} (77%) rename Assets/Plugins/FrameRateBooster/{Mono.Cecil.0.10.0/net35.meta => ThirdParty/Editor.meta} (77%) create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3.meta rename Assets/Plugins/FrameRateBooster/{Mono.Cecil.0.10.0 => ThirdParty/Editor/Mono.Cecil.0.10.3}/LICENSE.txt (98%) rename Assets/Plugins/FrameRateBooster/{Mono.Cecil.0.10.0 => ThirdParty/Editor/Mono.Cecil.0.10.3}/LICENSE.txt.meta (100%) create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Code.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Code.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeReader.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeReader.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs.meta create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md create mode 100644 Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md.meta diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll deleted file mode 100644 index 3c6035c020c9d3bbfee42a2e9684154190c0284a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43008 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 F{{d5*c$feH diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll.meta b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll.meta deleted file mode 100644 index a3f572f..0000000 --- a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Mdb.dll.meta +++ /dev/null @@ -1,71 +0,0 @@ -fileFormatVersion: 2 -guid: 59a1ff7aea3b49a499cb5994d7ca93bd -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - Any: - enabled: 1 - settings: - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 0 - Exclude Win: 0 - Exclude Win64: 0 - Editor: - enabled: 1 - settings: - DefaultValueInitialized: true - Linux: - enabled: 1 - settings: - CPU: x86 - Linux64: - enabled: 1 - settings: - CPU: x86_64 - LinuxUniversal: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 1 - settings: - CPU: AnyCPU - OSXUniversal: - enabled: 1 - settings: - CPU: AnyCPU - WebGL: - enabled: 1 - settings: {} - Win: - enabled: 1 - settings: - CPU: AnyCPU - Win64: - enabled: 1 - settings: - CPU: AnyCPU - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - first: - enabled: 0 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll deleted file mode 100644 index 54ed656b65783e9b41673751cd6ead85cc5245ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86528 zcmeFa2bfev_BUL8@9ot`T+3in4|^=M}!+?^N}j9?<>o`@R47eV*_6{`1JW^*eRy)TvY9)UA7O zJ7LZl%2rA___t?|QrmFl-(aEto~%W7PRTtv>h_H1I&AZef3Cyy!9GRRxl50J0)h z0$msiB-?>nfyC*s#Z9&csQTMGA-58s1mG>!=fjw>R7cfwrV6pKtbZ)7s5ERROCgr* z01~R`7*UCiNTDiPv3FISkOc`0_fXZV@8m?(?ifaN8?Pc=PnN3buX0#Vabp=oSE*>N zqZR@~XV|i#VFQe<%64LjF38Vu;?ra0Zn7)Y2Hj)=*9w^54OhpX<0PJibdKLmqA8)o zGt$lq%33VNlz1dF;uDXQ&#~52QnCu9(pPTTiE5M4p_k?rfw+F9VAdVD>E3Ml@&bPT~_yz9f&3B()6-F{i*hC zWc%{`rhWeSbSH);I&QKDO0=?ex^5?$nd8?DMaz4#N;Whn!%g-|0XNy(tIt+w_g?-K zcZd@u)o1Uj${(;A>%nXe$XM&kBxW^+T|XuKE^a^bjWtzTiRbNRw} z=?`i8-cAfaD&*>Z*bnK3JqPGI$@sO;Q07I|f{#&NhL$1@#hdI{N@F#(KDC^&}B;I{eJnB>oH0r~S(I55e;>jrx z4*L@sC|DI~#Y;|QmIJTB+uAyK?#@8d-&y^##%aiox*8^@69g*iB7wvVCWB!&Ig{ms zNd#55V(u0znB3sZiD9=#s$hShm+C!6X872zut?5@>o0wf4P|qePO) zYoVy|0AxioG^goZNJK-iXlBLOa44L)HJXL4Kae`IlGjsO{C^M`8OeE?f5YDV`QY10 ztQ63Ire}sT!yz>LMq^EeSQE69bhoMZZPc5@+8J7b*x+MO3#f>g-n5>^xlZq3f9%yF#@NBUkIFRK`b>icdv*Tn4@N*JzT8A~D8Zu%Ov zwu~slu$#UCdsfT9vYWmDBY{C&QMDLCM5z4`C~IB}qB%5UsF>080|esL-7}iLMIxi= zd(g&1As7Wm-*VOB@?^*ZBR)DXWTiS>qtF+r5YVbOiFt)-orF^`#;j2)j)W zLp4TQpt5~9kW50LsvsOZ3Z3k$%nAqp!bFvw9}T)qtQZ9zL;)@njmufvksxAv*uQDX zpvFCW_Sj8d(tIp36;;EmCN8;lBqP}X!OD;u&XDO<(G6P#&)h^NtmCR9!WdkQ5Kf7@ zmfiGEXmk<*NHt>*7UFu{1`Ep;v^^8ew~|MJ8>(1_b>(QJG6TtDaH)(0WO~{%J1d=d z);ovV$zzej#b70_fmW!l+D@)&m79)g^NcnbUeMJBwKYM!>J+^g=6f>_>%O-ZHXX0m z!YKA5SSz^S!y3&+5Ss*V`EzBt!*WxNwNQiDR_svdkU+%J-m`+`0Y`k5WpaYzsUX}T z^WzGPam;_{_qw1G`Wg`%xbl*Tky?Kg#AL80nvv0OAz(g+XFRzEFzU~U$$lW}hTW3E zz2czd{eR>r1MJWJTzv@$(2(kJpwp|{gU%R?rBlTlkAsS`u)ldNRXO$FqnsVaCSe_M zC>-khAvi@wEYy6w7JDAdjFQqM1~XQ{a3EHbZ&YQZG+j@TcsLNBojj3J!Hh6AE864? zq~o(%te#$7N|So5YG*16HlKttWf**GrNWB&b~wWrg%zrDN=e3El9|S|ir#y-siJe( z-+;C*Pp*fq%C261p%`Oo2s@S8Zt~BN!2CWLm(=_obo}l;doX}G9senjEso2yPyb5v({3Xi@b>_ZsU%r2-%h$OvHH=UCI5BEboY0JPbCc z+%4z5(GU#b0f5N|LM+U_-LYbCVb;#B9B9kdXiXp$ zBVCD+_oHaz?I>8bmN^L+RB=>SYR6Itr=Xe1j*xMaWuUm{D#V3-uJ^sisKee(?R#z2 z2mZx&Ce^>ba$RTgPUsKSa~Z{mxQq5fgD*4C_X{X$+y+Kgu<>qOvQtCCj#cFA(IF!# z>R>C+-E;CDkc>d`UR=Z*E7O?Vo+a-~F|f(6moVDcd<9Sv{26AD(kL47lg_CE}MzwfXh>ImA- z>!@-yq^I1ws~&L6+xV9UkA-mMA9iCLyDADEZxJx8<&XD4JY^^pzo!R!Y)MnG{1ND> z%4@;&T7~O0J&J3lKi2pduIq}>C%Of0awP2TV$0a>I}x?%q>TK&1A(okY)mVsWd`_@ zk3&a443(7ZpMjIxK@bw3hpFhnCy4xEfAUEt;Ju<=xo~84F;dk%>M_$0V%t@ZMlGfmmE zp0cXnk^F3L#hy4?^Bjuy>w?`MI?~x4YwvaBKF)Dk*2E-S5pq_)04i%^mMt6NM3Bo} z&lqlpN;L;N)4xF|8nnW}pc_cEL4z6bxmC~-$rq7d_o6ME)IFD)_5RA#{Yyyh(J`{ZF>F;>=7{298K*chEXW_0m+9TxS217%CMXG2q>i)!wZ@} z2F03uIWEcm#y>o7nT`TjYQi>80Ia4gD7TZJP*^2*;ZkY2CLC(Eo%{#5cJfo97?7dl zV5mcFEk)hr=it+BOZ9|)zu1jFb&^>36|IwLtix7$(^QJ#O^ z9wML3mqof6>yLvoQeI@aZjO=BL|UBuCu-8^SX#O``6c)m9Q0`dda;U!8y{c`T&p<) zA;-0wgSc2Rcenc>_>EtoK%%p@N0-4G8E$;Yl*!a(LM#(UnTPi+Q-gXi9m9=}m@+xK zOcpOrb2f_>q3ENni+VPeuf4x`btp-zCrlI=|?j!`#Q$n z$1z$a`89hfkQ{7$d#XJCw|7&N&F)8SJ1@2 zNHE_k8h!9w`NEXQZV|yCHW}^ph~qj!pUx1A5lzxG+DYsoLY2jK5~@N8iy*tv#>IAc zgcvG!5>hA55JOejvb9A{SJvC;YBAhUhss|{Y1KyH@C-KNI4i9XVr)wx+~Rm07&GaP4?Y zngyt$_+qOGw>BYcb>({05m+PhciZK$-)n%qmpW`7TGZ80UCUz+EXYoId#g#V^tWHt z!QUM?hUL-7aaf|9{P=NL0eNtVjh)-Ya#z?GL(Q1MSP;^WE4$zW%3YTd?O?4zSo3VH+K{EH7t=ng)Ha?6LBTqob3jI^rHYK72GX|^DM(H2`CF_yL1 z0xJ+H+%(BNO6u`IySqTvDdJrfS0^?(X2T{p3U>jaB({L)Pi_w|IT|qWmp9@*Ewq+{ zrU9|VKn|tynO;1>!pwV8tg$i#2{{x6PfSV4plL=INS<6*Sx#auoMKx|#4#s{EfG32 z){J56NX(uMoAnqZ%b5kEDY|KiThq}ShvWoO8Qd7*I9zHnimfIoY_uCROIHFrr83@E zN@7h)kzIp()fTH$RxPW@K~SJ5f&woZ*aueaDu1U{g_}$F!1{SwU#bWne;hW=XecyB ztZ7~D(5bC!F#UG`wDGUC@E=u@UTx}Wi}+4kVxGH9H#HR-OSo>}zEu8N*RxD2I(+Zu zEJJ(ts%n`$*=b$ZGCt%P=u7)_0)6v8ePG7>AN2u74%el&xN=>>Jp#`3+|#+pC+1uo$v{{A8B z*WPkT${oD7oU0gHuzpcriH+sIloL;n@%S{|Y;|jO9MO)nX7B{vfw%Y-PJ$ux=lDvao;u%y3ZSzZ6 z#L%#X6?FlZxkM=|Nt+lh&!<9DjA5=B##{H1vqjE`*+xuaJoi+_&kh@}UEFHwYlnz|I&>3tW*u`OGgd*U#}z8qLeB-e+u`lS?Xx$LSKqc*v%GhT<9AM zM}GQhCl(5J%++tMuDJ%xHE6CG<{FZ#?FMk9?u7ke+*;!)Z$>!O*bzQnhgj}2>*%!f z_7wg{K1+1^-JVM|voPhc>uhT^!j+TcP)9D)8#$(%v4L^0%*7`BMzajT^Cz><=A3(JvB!PstJ`E{xI+PoIW%l=sRLd!2> zwRs&dCMz#V4%+flfhd$@%(ZNU+nGqjG&6B5MPy7p1)D0+N7$uc9I-_A&J7z8{0lc? zH-TGvNA_%&m&J4ZI@O3=ca>4!!&jc;$1Ql%rzkl$(naxa_Hk_HpKP!#DC5?Y}8vh)oO8;>1+2@{ z6kNfyaln9X`8qxv$ccS=Haey3zn_f8EbG3N@9l8~$wC5z;e=mI${Y&j*P z=aej(+k7AF!OZ4mZek58M7Z7fCGStSfrZtSIj)G_OGXo^TbE(E@!8Exi@*Imi&K@f zuM{V_$IS~l?sR|L8P{e}e3l)bebB7wE*4O{K$iG(s*fCX0?JgOj7>lN$cBiYtR_~S zW#dh#h(f4ZhZ5PbsN;fhP}IfiEmzP$o`5$M;5dmVfJo*esVhG`V_A;~9vwGD!NNNe zTCCg+%);w7A{VR4;@dT4Q3pEfuF5Z8XvKB4o0b&LnI(=$tf!>|;R2eoX^F<%pKOBN z)zZJs_aMs_fAMi^y_OA#eOW=VuCl~(gJOxs!8Ah?C!-2^ESsvN?tavFKa^s7#f#;p z_k+DxKiKF8c(8ovOTsZZ<|mACN|zW?T4y_AXi4$Q<1y*e~ zNprjBX&HW*+lJ1~`!%jgp0?A&PPBXi& zmAu`|K5NBV&5kV_8=TMECYlV_h~=#uh3K4KZQ5W6F6*(t*qt&;#>IGlW!HuS;f~fN znWtw9j;=!KBhr*MR=2Jl4eT+nwIZ4jtLxT^Y1&eX0kl@yLuaEsyl{Bp(L!0aE`e8K zuENtTdTx%<;fPCHc}=rgc}=taL$5WQ#qoe=*LV$8)|pdb8us7e948caW%lCD63pLB z7jI4-gh`p!tyKp3r5_D&qz4T!R^&MIrb@{04C6=&8*SyHXaR-UZw3% z9z#|{2br)Vt%&;h;Er2E3!E3Z&_00je1md7Y@mZ%VzrocWZ^X_ylvxNUQv?5lJCdD z1~F-()Oor0cBNByKkk7nbv}H8bI6oWtkn-eosMWYtKv@I#>*7E2CBlAy8-7tzUGG^ zQ;)r=3Y4zJ7#KVbNq0mTNt{pd2utynghxY-_{U*#5&rog#eX*={X`m0@p*j*e7B^i zKOW1ddYr5)ylRj*m(bIK1~b6ILLG@ zzrNUV(f0*7SLJi;a3fB#ae9b;le-*vP_DMVnDP+=le3{M>R58kn1y8*V~&H>f=_gL zJa7k&VBJ5G*NoIPu>!Cv+^_@dLQHNw8aIHmDyHA=oE-^tY<<<$ z=Ax6rS+h)iInrV)oGaK3=Ol5`9|~tDag>gCy6`Bq%6-DP-r)U7US=W_{Vr8P`dle-Cy=_g7NB34Sz~g9+05{ z-NAI#+HwEZfx4}D1v*eM$ik?gH^afoDpM3si!p&yPRKA$2pK2f7CCu53z!GdVYlwy zR2RwppshNfUA@?@OCeWgH~$TTr_5=75f|*x);xo20>|{`y`g{_Vk^EA7Pi(r%dGCm za>T}vlOs2Icz^ypsLI4SIY&ahg945jMviflE`b5#1i8B^{RT!1ei=IoC*rQ24!ts= z2xbs0fF6RG>0tkq80K9Q#c*NK#F>zm7xV_LgGNlOt$24ds9#?@x}rZA@!5QDI7_pR zLV}GpT6!D;%+?!qJ!XWn`0ij*`R^2BjxNtH)3Oj?Wnj{GY`*kmks*jUwii8b_V;3pgJ4ZKA2DWAxp>k)Y2O$ zt}bqP14~HU9Lxk-tsKRo6fb}91{ojcTnv-&;=p*rv730atbOM?mVQE~g-w>-#9QcD ziL+1;uZCy)-Qd<_9j3Fqf63Q3ztA@NRSpJ5J#56Ag^4DJJG%>BLgO2IKsr+|L~avL z8)jwUBL{!uYRF^&n^lo1a6);V{e! z<1Y_pJs-|&iGkrvjE6QD4;?Tba4v&089hO<5oXAC_nytIwiuS4&Gi^J3g1D=ilk=- zwp21A5i7ArOl_|8nuYsZyj<3{e>O^m1EmfgZx7BC4Z+o4*;v?QuNMif{+fW>6)ell zSo1X6lGqO}?Rz;IYbBQ>ui=?g5B24FiG?wwcQ_$)%{136bImr_9J%J;eYHq#av+pe zl@aiC9v{|Zp%Zf&??MH9?JNX8=Qdfmzl!FXMAbjx>%C>0DT2T*KCBqh@G5Le9Z;J_ zY{=yn4V$%K6WgcvS9-_h6~xPUT7`C^UjGJd#j5-}%jEB^j+ngqiN5Sz>MUU*YCzrfz-LxR~QUTdZ@y4e=Z*uCt05PKnn-^@!S1+c4 zx>w!RhZ6ASj5&v;0QWs2CheFGA4h}n#BjDUv<5o_%tC$1%5fTUUA)K{l%2M`=4sZQ z%8F72gJl_v=J@qpX2#YWKX&C@>B2dYP$Uy?DxOY&iO+G;cqc$Kn@@JKWz%Ywb=X5o z&GM|zUUjR&&Y*UPw%7sdVS?V)DV=?|y=>5v=xXlY9rZ4p(Q>Zol+??E5<7Nyj4#iI zx;S=8&*c8}MoFoDFW^zsiW4GUl7}M0u~u^(m+6f3<7w&bX=ynZ;FO2VlPSKH*a}WV zSNJP23e{C+Hq1s^ABb3TmS9Pgm=&L`6LX7k8pHZpI6N`seMvKq7#!Qhc>xWEjb!M@ zKnH1qW4bCF(1j8gLZ%!ac47;v(=yI@qfLL{us9FTaPgsLX^rjX;kXq?#ZKMl`Y|QG zfa(BqCDz%hDCNVFYQ8Cr7ZnkmSwg-lDYqadx?e@-58xUoBNPXg^(P_6!rqTtEzQMp zCb@W`gRz;KrV+o0;9E~@+1pkR3I|KeaWqhkjdN)Q5dETDuB^h z9xX+%Q}>33PPGh;BQSIV@=~W>A_5!VhK)F8tPja#3#A#`#n>8}70t3DncBuo+NjOL zS7>71U>;3ak?eE}v(qd@&MMDb0DRq@nvdD5SEmDfecqC@CLJ7?4%QNgQ=x4gfu7LW ztB+6RICvcmnI{k*0nb!qdyr2vEPOaghXpgRRY%0N8ZQI7yaJO+XS8^17bcVWj>}ef ze^Bk$(#QC)ItTy!xZq#?li~*}&4sC(Tr5;LB{1{Ugt`pwcuGsrzqR>D*zEBV!>Jx# zaWs;h$-}2yrBzH!uULrHaP@U;lU~kztFKQ1zke*g9LKIpIBZ+R0KAmt2-k$r3OvQk z(Q+wHq0?Fd4lvTp4eq=!P( z!a2cXbbeu-xCHLNW7EuFtTvDltL052z8#L?GtH=rGX^Vw`MB{z4B}>fTWke4e#G=E zOuHLjXZls9Gd40ZG{1&)*oh6~2Mv~d9*76dya(3Jw3?(~lN4#9aN}(pT=f$m??m(r zGdF};=B5c#EE~r4yCfv?!i!8Z5x@j%P`4ag~XYU<+Liwm-? z2ZW9Fj>}bWgrDmp{^31q)fxZt@vj~JRp3p<#8nWfC_>^dOdvWZu4E#B#1%-`Zie0r z;q6sh24(Y`aJIx~M-79P!L$=M9~c!%~QUi{4;^OEB< z@06>*`4e2r4^IV==3Qhv8{eaS|6o??U0kR6Q)b!Cd|bqr&3T2t$(`fOO6_F%*0JR9 zO>6XLm-4YjNVbxco?E`#R0lIY2Lo1p!Anf9{rr|4XGYCm@@hAKC0Wg1^Wrq~*9Z8_ zz*RjlgfZSy@y}`ElA@(`+MaC+HF4#UlCn#1WUXiwlv3eEtO=xo=jmlAjeY>!=;h#SxKSZ!56G z(j{gQ_3I@zRjgtvo{rN?;k_48PomaKb+P2P8_eqN*UPb&8%(9NKM&Vkw`|ZxYzAAi zsxxJYZ5)R&x5{r8S3hnExlC|z&6LGe=VL96hOL}KXHLHbv1vd)0AocUZ+{O`3I!S&-5nXkIZtKf8xd8{4+0@ zCcjYVB~R#AEyP=X2>oV+cFWb@yhpBXGd}Hd%BvgihCyrjBNydku{C-KnT?O()+~ve z{SdP6V>Z9-CL~zp>_;m*4$+!E-NyvIp1j-xmby%v5 zwVIz?wS0w(g_7S?--0naf#u&^=H5~YrHo!xd@^^3K56iu8{|7H0lo0~_#n(f{z(8^x z{_znW-m*~$%nC2I$!{IN`)Uvh;eAv24G8Xf& zmf}$Z|6KKE<>C>pnpH*mQpFL&bJcnbXIK4FS=rB3(JIo9D@GyrNa1V}`b!1*)m6E@ zT=kgb9?^|5;Y!l74&>iFk+epVTo3h9PzPK$fj8%k33Xhg!o1xa#qqHPMjzZSs|nyrM7ZnS)4s zKr*E6LR}%%LHGv>odW8r)1m(gqw^l&*9+a%i8bz;#8TaazB+~S*H$bZk)zIYS?>u0 zDYIh;W$qco^iz_qmwKmEl9M}yv{CAMP+K@e<%CrCjx2R5_&I8upFUa8E4NpUiuI%B z>k`ZjjAD%w%jmt?u+vrV*HQAGZluptlHM+!f306l)K$ab`Tf;E9E{ia=p|PjGi1`( zkoo~_an)hNCXIE~m(UNN*Nqy1ugpe~|Hv?MmUm~pKa8Zc1Hccd1L{e??nWEdNuQPu zq2!+Flzd9O^a(uRs&^f7HVmQsy|uLboX(`7VWfk~*~U&~NADL>!E(wk97=2ND}IBtDr6hl?z&BP?eyy2H~{sPw{C&DAt;B4g&N);-w!pEsu{i@^6W|d+86mc zsv`x36j5h&l(g^fIsMSSYJ+BUChBR>spUj{4SK1LXqZ7C`-vtP)UgNAWP>(|avKf$Y#8&-1)`mO#LkNix(ap{`7Slc4?Bx|ml?D*M0BM= zrwRItLEnp(s|~6~?M1%pfiUdU%TnK8P2Q@Z%)7&&kEf@jThNL2qS)j!Ss6MRbZQ3kIvcdpA?jk#8B#7`&?!=` z+@N!$T%|#M#Ohjuu8|Q^XV7^vu6r7^K~NuqMvY;8{SA7lH_?6ueJUOtY|vAJh8tAg zo|2G$5k+InnA~4eJS$IG^kLlo^8o31y!$1upFvLw8g5Xo z=p1R#oL1;aL8DFHY#GU8462m8@dmAuyr~AABzZFo8X{<}K}nIE2gEjfUBEURZ1Qp? zZ;3&Lf{rj~omhRWL06BZ=T9_fqDXE5qR!)@)OnG~ds)g|YS1E)yvm?qg03^Dub`U^ zsupyoL9U>C3_7g`Yk$C?j*|DdLEp+c@svT=iJi|Hv`A+ETL$eE%XS&GN7n1l4XPKP zePz(+QXdi9*Dl8PeQWYoh!*AOF?fZbfI;UA3L4Z&bmkd!i{up<^o`Ws)}TouS!&QC zL0y4Z`(&xT(&TNHydDO9(4T(kZ6vp1E%;6KGkI@zX5Ju^_iQHfhMBw#V#_F#cP3`s zZ)%)D^QFG2MzUQ$YME}(Wo1OOjO5tSEH~HWz15X@^9))jQD%XWTrD*mZ1NIP`(l%q zE%hxidF|R!%Mk|k6m+zad`{M^RYcf1cIwHU<60wmtE{cZJF8?}S~-wfHad704wA3H zOGDIU&T7fKTP(ZL;X|f8^#!~%MBU}A5wvOs(F4w@g3g*u^q_;sAFK~r%6yMFcnKQl z1Nen#qoDKQmm%sAXOo~Z)J}B1pqY>yqMmjx67*(YqPHD9Q-YQcrx3m8Tql-&Bp&?G z`K#pZ9>Kg_&W(bu6P=$rHwjveUCH+ZxC#5XoPi zyJRda#XZRoW&5}J><)SAQrwZ?ZlV=({rCE8tn4mI4^ct?1A=f$4HWV}B&b$Umj4k! zd?|H^%Jo0y%SO45_$0c>7xr)WWdik{L=*+`!p7ceb;ff4O#{5tF zI;dm1EX6I&LnD`i#z(9Ky`giR<5T4wUJG_m50@Pu?w~eJI2H8Vv0FeVPP`bDr8=m_ zq1Sox*^Ks&gkATUwoim-uFW3sH0UM$Ne>uFdcm-#A(@m?&-Q#?G`x&b zbyMq{DQmx}e*&D|LthVv)nQq$1;gqc&<^Uzp>Kh|X~KJu>@&Frwte57wCj*v!lAXX z8q$&xpNDOAukQ)asTS!ie$ve@sS1*|75cK!okDwu$Ugv-me)Bm*FG8i3f8_Ubcc`W zIWB3(?5{kTHu3Mkxy2?e36PG>_|D6n9{vd&CyVr_Owz^(>3HEUYRhylKWRZB=?F-s zYVVNqFL16dApI&%dVdz_rnW+bzeeb_F>)S+OseduaTS@lc3i%Sq&VgHy_T74dkY;Z zbgs~epedPQb`Ub}xTLj;v};Dt%e^f>3!K3g>A8}wl=LNja!wQa&j8bJ3hj*l4ZzH` zc|uPPGTi_=Wo@@`4SKo1&^n<@hg>DvlfzXTEvedR1=@yZnozL_GLW_iU61r08!9te_9VWC&XuZ%Ygsv01 zLFhP(+AN`2LhFUbgmw^mdLd;-2%RjnS?FA$hYG#UPniWm|0MKWp+^Z_EA)#z%DgS~ zI-w5;yn>-V?tjLdR``F77JZ2^bDb^gq|d{CPbN!Gf2M@+EzHf zNZK#y8RE}`(C$Jf3hgI!xX>*@Y8WnblF;LX&Jns;r)|nq2<;>Ed%PzwbM1DaF9{um zSFUHSEfm^W=wPuVTWGP+52frgLU#zABJJ%fbcE2Or0ju0mk3=eWfu!=6zT~5Tx|PE zXn&!dgw_b%D*BHXx=CnE^zRmHLrAAaa!yVRmjC1<-54hQRp_P&(S z{87bBm$oHU1*BO*pA^aQLi>o!eL^o2`n=Tjsc5)Su~bqt+%57ksrN~d%omxC!XM(N z@`B)5DTY@m%2#$dMUMDywNChr)Yjf=w$qa z*vz$`xup9^FZ9Y_y02)i6#9V3R0hbOEHbl1<|5HBMPx<@ohQ9kAniR}a<3Bkk7PuB z?NCFr)ODd~%L|h8jL^4*J}jE2hsZ~?1pT{|y~SesASwG7p#jLJ#%*I>8{{^JNe>tL zMn2Pz3muokbX;Vvu$i6{AU&|4ji+H*K`A)D=91bG((ak0)3QoEnR{!>z&X5(^aG)T zdNBP<9ci<0eiS-Q_&J~{3*Tv54w*xHkhU)&{kj9`)B&W=PbEDN>6HA&{c6BDU+Cm| zrtcm~THK!WM2GZDp^Hmvyi#vOdxD>p-%~h!kv@Og0MMt)NZXVS@c7xKL%_Lh80np3 zNzWC|=|a2JlQU)-=`%H?W5G|^_SyK6;0)i7^o0JTOD2;(GEwOCkr7)(>idG$){u_f zuMS_6X*yZbGll+CQv<%H`=@dCmHeihl3x$g_SazN^F;YL)VQ!S=_L;7jxy3Krjd3l zCB19nIMjZNl>Jg@LHk|UL2d84+_tfoqiqXkk}mE*{Wp}7E=`dBd&%_N4@9%pxvyrO ztM%*LT_S%?Irnl8l#*79C7Y+QUY+~8$h`1xC9j`Guj*EuRl;^@FKOE})wLhenQheR z{sUM`%1)-=AIZJw!&8~A6FRt}MMkGB7m7 z|FP$5!IVzQ+e&M@p>vD=h@wn7C%qNAu4}rptWKXehG{LcZ5UgfYVQox`1LT_`G}A7 z*6FO}^BT&ZHm$`!-*>0apX*0@=zf$LQb+k%FUkz5BS-UNy;%0r-sG?7F&i=~dQ9_? zQhr4b`hP_a%CG2gfN#qQ^p!IYj7Tdr6*C$J`FJr03L8rb8|1Idzom zP)oY1jyg{inqA9uT&SLFyQ^qtdfT-(v>*CRW^Ov?sbRGI`FGX`TgK{XGS2tapnEEvuUnL^S+^x!=HGK_Yg+D={Mkz}GTTH*?KY%Ip^Jsi z5_)Jc`3Dw}?kObwMrf9BItz^pwQS~2lJsDq-G%Nada8vE&!o)Z!aqgmRYK1d+AJ~~ zggzuzy(s*5g?{d1*`FQKlU&j(1Eh~i?j1tciM8Jdy+HKrFX=Od9xF0m=CV|waE7;K zdWZO-gV-Mznj`dJp}h(yvolV*Sm<1#bMnYJR%9Ntn7&8o^FrSf`kK%qMCJ!ce=2lm zjPh>?4f~lc7kZDh>qen%#m@tUCWLMeQSx4)=Y*M#i)}r%q}X%2@Y{;E1EgI~OMCAS z`k>Hvg}x$mvh>JYq2G%94r$$$qNhysKP2gKqJN3V3>VIElJ-ko?@52%7Nu3^ialA9 zzEWf!68)9p?MsoHikr_ykA(cULeI@U(&IlEJsSK^gr1sxw8vi>Z32H!8`7=uCgJnE zqHlC9IKe{FJ(3<=!1PC%q;G{u-_Is(gIrsEGCCD&XbE=(ANM>7^!whV+oqE?RFJMH zC7mlYXZT4ddyGVcJ0(KhjCDKJmcM453du!zqz6Yx56vZABk9$W&Vfv-#x-3|NAAfT~~J|)op)$=yIDH=*e}RFGs1inWSI#C#}yTjn$K$H-)s%7}C4DlRh6N z&FXTwc#`%^NYLiN5`I;Ij##Wys|gx zPdMpH^``bfI%i*hY8kzr>mJ{i^GBuh9+FP-1Rw0ZHL=qahDZC!=#l>PR*Lig3*qn5o^F7%J=Ot(kxI#zdLDJ_2*_89anPbRB- z+zd~?-r;6=vZ$Q>GE#O~6J>vuKZ#cDFP!$1n47Nok9?*5oG!Vqo%_mc8^#ekO?qc% zch;M(L8oV3Yp@X{W73~*g~x$PYo18)oYX|JD>YlUwS5|8FOHJ#FZ59NX-Mi)dh}jY&XLS+_8+yfyiI2wKklN`P-BY?P z`^&1UV}!mR{L@U`3XZo^roIDh*K{C#c=9{Yz^5>&v2l*}= zklZd~EFyjM4erfTHt){c1)1D1>0hSqg5*+JNlIlMn=yv^UlBS;?l*hN_}tQ+e*Qvs zDSBj{C~M$n*nQbb_kIX#AZy`jxheJq^gmcYdQUd##lpEI^abRftfuGB9`Oy*qodSt zNPp4;WWRJ|3DXA)y-zqx2aq$X9qDAD6Q$G^i5-8brMB0HlJW_ft+w{$U2Wrd%3mev z?J}pTC0*x|KT&LG61rLFFrgO;T|S+9u9Eb6p}N2HzT$yW=H?64{AWe;S7XTUIFj^- z5u`7Spe5&6q)R5yw{6A3r9+teY!|NNqviBwV!swieRs(xYpK3IrVDeQ^^;DO9+?B$ zU3~~2`qZ=uKY;RCo=^E_kp2jpeX6;H^qYFAYs|mUYCU&!tlV8?MW?JS&0KDGQXgSd zcT&~T(p3W}KSf&i3OJqA1mTRB`c0&V`nBzA!5%6&!5{6R_Uq%1+DdEtz7JcM=tTOg zjM9j-SFcwmj|@R_^u#>SqbI~b>ql@u(|crFq!Sa*M|#xAj!3^eo<8~0$O@!?>e~}^ zl4!nEBCIvBFF2bdy-@hCN?Om0I@x2~A*S9d1uJB(EOz1n!59_bm=hk0FTLY$yZ^Jvr}440{B8G#rs4w-59M_7 z@&A%+@-}pIz5nO?c7Im43!_0V@4f^+Z}8B#!LGb9PsVot`c~-vRw&X69nuOdsz}$e zpz?|+-@@nLcK^+t^5ngKjn3@k;;Fm-+wQ*%c`c|MI`OHk{B8GtPnL7GHhBkh`x#>;g%%94^6{G;^0(c8T*p8@ ze*M6pA9_Uc@xr@7S9dMS=NAzC+wNanUXnjr1EA|`%JV0BC}Ut<{!|ZLGi6{tK9!We z?fxCp#^x{Z(4Et={fBtyk-Dk*i#>EnUABLThyF2fcK+cW%E(-hzsy66Y7fm{?x90# zj>vED&_Poc=Qb^w4MHX6K*gq4fjK%0JyhcLJT|p>qdh`_J`IzslM9=XvOi zs;T)GdZ=%Q3-T}VQ0>gC^RM>M%RTSRztuy}jD0x&ZVy$De>(pG4_!I#wfyZKdVb=2 z`OkXD!T%Tc1rI%u_$2>t9=c@og8Vl0hWsx*s+7`5+wd1-J{Osi&G_I=PR}Y;~)2CpMhbD~=7Fa$FxBGLt4k_UKKK$G6 z|8DsBf=mzn(q%|Nu7}nmFW*C-Ag|CvZ=*%+JXA9}SkS>kmyelIQ0AfH2@49!J@oE= zOABf|w7BEa0`n;mY^mw6w4jfdcTvsKg8m+QW9(4{gFLis+=&JF#S_zp>qd+(zz2B- z-7;Z(0TytBeB;k7z^7*h^&TE9Sm>d#!>=z`?4c*8-BNIvhi=!%e6x}zLlm?-k3f4X9(hGT{-=|g0sB5#iJG!oa3SV zak~mG@X#?e-xgfrpaGXGUJ%6E zBYhUdUh?uD9=FB+iicKUb$iuAN7gNg?eI-5rPB3<*AH73d)+rr&^pzrd`0XH-|+_R z-)VL1@4jmcO14`Td)t@jfMRN$`e68pv3GoD2>RH^xbm)t7+2o&5aY@R9%5Yi$U}@P zJ3Yj>@(&L&uKd$Oj4NMyh;iiy4>7L%>>UQ;A;y(_4>7J3 zdWdnQ$U}@PZ9T-e(#}JSD;+$9%5YC;vvSB7R0!6 zwwK4aa*l@>SI+Yg~`;I&?oHcB5C0G3QnfG3MOvA;z3-9%9V7*F%gs4|<3(=P?g4<~->k#+>Io#F+D< zhZu8S^AKasn;v4!dB;PHIUjn6F=v;D7;`@N5M$0)9%9V-&N^1w{;`iS=O-_ZF~?`8 z<}G7Rz(b5VnI2-y$@LIpP8$y~=9GAdF{guv7<0OKh%qPOA;z3?4>9Icd5AHm#zTxb zbsl2O>E$8DoIWiGv7_EYj5+;1#F#VCLyS4YJj9qY(nE|nV?4x|Gu}gtIg>oZm^0l& zj5)JB#F#V3LyS3#J;a!^+(V2x$9ae`=VT8t=A35lGX2Mxv%$+_%-QH6#+=jbl1?1+ zCm`mWA3MXIBfn8Wm z$<09D#xAm-0{sFxNp4Lt`WrcCE{1xb4}jFLACK~?L{fcfqwT|`%;50s_2cpzSXS#ec$WtO4W7t zP=h*kan<$qa6#+TP3`uJUvFP2H)!kB@$GuY|7y3D8?<%m;>5`KjrKPAGIpKXF=1N# z7JG0{-6FT_p!lu!a)U0Jd|3QW`$>a-nVgK@WhZ)3Qnz87eV8Eb3yz6zvmet)1qU?8 z@3wz3Xlwryju5( ze>wi9z1tw(zkgsS@a;HuYl`O+JMA+J;_1jv`yzvQBC*rH&LEzS?6kKT^x5S1;~(3f z8MI@<7x7Q+47q7vuRf^$E&i2VY!FXlzO@qu@igW;ySG6+0r}n@ZctV?r|<`RzCk1e|VBUpx-nKhKJ1b{bu_I z(DNs#wnI7<{$_VJ=(i4?3isHjXcWAy-!A2IHXHO%KYR}2Y&DXf%<$oN$?h?z9e&Z+ zc3v~+wqQAacQ0o@UBjqQZK2<(HRwsFccJT?XVCh{W?KdSPb9U7s>))nSE&M=+#+r&Q?7C1cwZB_#(Zzzm819e`o^URY} z+|lam{4$iR}N$nk+Ec~v9 zj#cXlJ33h-Q|QLRPR=e5tt%{Z7L8)wX7zH{I|{ov*9p?Lbal3QsJqqGnI*?vo7JP; z?WE$g;mZ5je@`Re7dm4X)}g8*QrmjZ>@ED8uV;;qTwF$0ljC?6H{L( z?Cz9~*X5p@@mgU|=T1R-{?$8w6GY42FRXVynm|dSb%p(%QzoU*7li{_p@GJ`>mcc> z!OnRixmoq^`CZ{)=VpV>m~Iyhcm6h+S~ja0J)=dVoNK0Nw6I^BqS4Ol28BnK6^(Ne zGj!hcE`y4uI?o!^*mHi-9B0=|=AES$j$K}Kkn__lEqQ(aQ;H6D>gQ_oaQ|zI4tLHt zfQW5)xM;c4bRf~X;G69qRSnKrf;Ov{GM*}Ga4z-G3q_62D+WE#=|lg~&c6hmrIwG~ zQFM&+-aKkKOZA-iLD8yKBWtbm(R}8yzORecI)7V4v`$^vZe8K=&S7#0iO39pp5Pp7 z(2---6`trkVbH1l*A<@Ryl&7hK^voCeef5oStmO$rsbXN z{ATiwMcyfn|4?dKAACSiwjgTxrRWr=r-$s~P0l0_bt*i=IYcAXr>?torgNM@x0GZS zZ*k5r=#Xls@LcB#uUxeFJm(`1bt=Bd=`6>p+Um=kJ3LfVe7WdaUrL{L0 z?=o)UH$a>=l6QjoR1Gh_!KqG@ys?$!jZQx!`G}fa+&b?jXN1W+(&wt1T9v!WS!wd- z{7&9^ChxM}$vbQ*tv*4mm%K9s;mo6a|Kip)+~RzmmUm05+HZ4wrFav+C!&FRu`{B8 z>M+cQUmF=;Zk77gk~)4uxC+N{DOx<)f~4jz!z}aRjT!!4(DttUb)bUw`29}2IYgb? zyOP!jy?Usx)KZUhrT${n<)~xulk7fq2@V}C6>n#OA8TiqI?%vU?iBL7O!bxWNudw? z-Xndm#~SM^#S=!oZj>Utb?V%5bFXFy#78dSxT@m-)= zHYsJBrA`Bfr4%f=7xw$qJ!Nc5Bi1}0>}*LFVYlm32iB0Y7P)u}3ahfC)?&5#Bfej) z8{#YVsR4DAS=)(a?-MT_0u7Ej9lr9bRiLi=CWQa4ag5j1?6YUQu1@)C0osfPaJihc#LiFsm1VsrCvfSZ1otZ z=A`)f*!|)8G4_>?`UQJipW4uY^8bQQd}>oI(?da1ee@lou_ZcN=jOH}KM3km%epgN z1qyG7|Fuqf9`8>;v(w7k`}S#gIyJEEwqn~IX}e$A?n>L?ff3ZNTeoj3H2)0IkVIcN z>dSD8{O|L%wU`;G5l{CkStLARW3^frx38_kWJ2ejVtkf;iW0IOJ_4hui6z^eR z-{@20aR-`CEp^#ga>n&irIz}36s_tiI>A9%^c~7RK89`a_>e3Uk70`6uk8>G-(sD&)ElK1 zENM&_Yr#3W2W^{+vT3$yKI(#oQb%(AEtY$^0nCU$F2&s6E45kHQqK>bHeDBUTbDYz zJuTeT+IuL4wF~@#GD6a|X>aGwpykK**jpRtsjWtgWo`hgP^vC(enBVK>eMRw-^D+= zeX5UawFo2JQD1koQ2VbPxyF8oITBEtP;XGJ1kF%iW7Wc4udIFx#OAgGS?c@!SZWU_ z{@tX3mI_f99Q5~+~@4(y48!*R>HW>>SP7EIDItZN$5TuYhzqKOeq z>sA-{VmjK7<3EZ%@~MOH>yeh)C~@Hj_)5n|8*{{Xpwv=XGMh%ryn95vt>xL{skzB9 znVOr2$Qr`fVVl^Y?Kxfa=rw#=S6aIOt6xgPt0O6|Yti$)0wcCHCyue2;-pqlnae$m z9@wwPAy)oUM>S!^NR7iB>762Y#>W51oiqJ>>E-lYLHbzQcT{|c6@X)jJ-8B-V~IU@ zD|$9l{R^u{mU>EJM7o~+5rrK!0{b+-nh44Rw*dR9i!M)X=xjRwt-dPC};RkY!4&@6S)Pz(RN$+L#4(i|CAxn^AHUN{Xl*vjop z&0NR)vL52s1hFax#I~U5%rN%oh;T3Z3%%J+AtLcFwfDF}*2eVR1*41)zbHYPQO~w~ zgD9LzACZ=;`LyA`f5%9j|FdJ%d#C@|G5*hvQSV*#-$=Hjc)W6wPqSXJ3T_sBW?yeGb{qC+3{NLSGf{$G#wEdf1B`y5DT_wu??ymBG zlb;^J|3A8`#D3s+ca`wWf4QrK%>U6{CC2uDxvPZC|K_d|8ur>%g0t7I5}f~~T_wih z|Ic@o_<4GctN+$rC8CDDoA{&s2TKjab2p#r zhr6CsTJy=_{*!#YFV!+Sy%OhUDf!-MdS>8W9y@N_$6?hH&1Kj#>zysmHgW&xGyDv> zkD!c&H|bmWDNDG9YkuKG<`$zZmfC~!Qd@P$X^Eq{fcn%np{&t|UsWTmk$QF6QDP6D zP~z(g*-?{P>WT_-*cMAYD!Xo--YEA(|2cn&wBp~DP1T|`*AL}s_B*A%QcK;0w5`;1 zAKJo`5WmXD-Ih=Ny@a;$Oq*xRY%foV9h@pNLd9L)p2|B%zsR&`CWJ^MV}v~ z%aRkpom6XW<knFw zmgvD5Cisr(C$mi3d?#e=)>dH#St_BeN>5MVo#vUiuje;2w4^Ua2-`yb4dCFb-87G_ z9Zo&3q1F6;kCK}6wwzA|3B@$f1I0DnKyjyJHIp2>15hMp;H*3Kr6J&v{Twb zfo76S8<}67WQJDCPBTenCNz_TBvU#Fk5dXOJeIYtu)_tAkX)EopUFd!oKhG{_%c3@B4Y*Y4g3W>pH)GUFV$ZoaE+ri@bP4 zh)-RG&kQu*xAEcg>#zgOVCD8K>^RTDigPn&+nd!A6;-dO_13TO38+uQ;v52c@pgev zNAR8uU@P81LfiygqQXMQ1-A?C6nRSMtAHn~{T5@m!+LXh2XGs1qiwP&2?JZzcA@vf zrx!VSYV~=@EwNc7iv^FU&-eDLc2$jxsTJzr_M*B9%~Dm5<9Ak)+g zaqm}wA6WHub%(ue^S6L+jC@DkZ2znKId#P59gidSC4DbL@{s>mg0HEg>OWR_t)mFr z1bjYt43bq_L)QHw-z=qw3ib(}WPLPtqdIDTXJm_Ynw1}kTew~Lt^wdP8xz2nfTvl% zZXdOtvPVWPw`LJ)%1T1Ze+0CD^rKc(N)(m4T7??^nswAZVe~1hOKLj@v{aWhKKvh$ zeB`wMuvS?Ytoo64mA&+=pFz@-cm=q*_qWzA#N)F!NvI5JY>Azh8ruZdv+V%ts>`m5 zpS;xG_wC@jFR`x`$#zL)yLCr&yM2R^{4}=R-flf9_0O1(sGn>|+pDZ^o&GhX#atZ} z?6STR`;@&CG5kI7h4Ys{PXD(W*S-D!6QM3Y{hRh-NPdWT?mzV>cFKBS6N{q8&v!7F?EB)v)yWqwRz4J`YG$pNyppNP+& zNWEEBOZOw{LDLg{(eVk7Wi2|5_!j5~m3RGh>WKQ!?ccPYwXR+LY1AHX{#h86KZHc? z3)(+g!Mf#b!Dp?1bz{`KGTqvicfN9{dlJ>xlQf9|aB0Y7op z4?UY)pE>oIC+>=N{1TG=-O3wxg+U)t(Ti_Hx>w?k@lpGu&{5l6Y{Bg=-mX1rUw+D% zYo|zd8p)cqi$s2smy%Pxn_Qy1RqsjmhX?)}@Jf`Fny?imy8qPcz0cb38Ts$t{jNi2 z{v|MW<`M5I)XZnRH@hAWd=Z%Gde}?<-vJ$2@kQ^4kdsz*2k__KBleX8zwsV1bb8=4 z->1a&e%E)Bt9^9c?u#R~R@E%M_lSM{&?BI!XP&k1?fRhaS^K%+Cw+?{@!9R-r`^!( z)$QoRKK}}lH(Q+1j@a)SEx8t(*xnc!_AeGcxH&rVQEP?xSt0SSu%6!fKL5E^HFBH3 z8+Gz&AnU|(HJ|nk|Ezk~=y&|DnmG7h)`d|eNKy8s z+a(W&t%JdUy3_g)@NVlbfcHp=?iJVjBSbqb2&iY&63)W|WFIo=(k6A~7FI)cvd_`h@RdVv0^#~+ySdRgf{dJ(*{#T&i z{x@K={T#5>{yuQA{UhK~`)9y*`xRh^{afG)`wzgC_FKSnZFiGjb=m=7x7`BVXfFb8 zwwD68*vo-Y`*h$o`)pvJeJ*gw?gA$5^MO0;3xT`rEx_G&44ARs4VnQ>L%>JvF9RR5zY2W9eggQU{S@$N`#ZpA z?C%1fvtIzdV7~->(f%p$nEgxO%l50lSM1k;uiAeEzGl0cQUA6ds9XzxZdV)7?>Z6K z>}m(Lx=sTwcAW)W>N*G5?&<_~xYh$#xGn&$bX@{G*A)eJy5hiY*8p&%D*@c>+5z0+ zx&jz=jRUv2CV_pfJaEW$6)@@A3*6y)FL0M@4!GNOBQWFo@4zY72Z4Flt-zA&4q(;w zao|4JUBGKy_W^&g-gcCq(9>f$JP%=IE9Pq=;peA4v`;M1<(0H1Na z27J!-Ch!H9y#O`u@&S*znt?C7LcmvCCjeh{Ed##h>HxmsIunRjgaX~}^MHPLH?Y~g z3E1ks7`WIS0WNiK1Gc;SfgSE);0pI;z?JS@z;oRxV5fTm*zMi}+~_U=H@jzmTin+G zqweu!1Wvi{1?JuN1556I1XkVu z1GvxqFz{OUSAcWwe*xa${wDAy_tU_G?q`9A+}{J<>i!|{cK0#hVfW90ce;NKyxaYI z;63g)fcLts7SzAn3w*%c1pI=#75Jcg3GiX}$-qb5rve{yuK+&bUIl#8y$1NS;4|)Z zpr3PZ1is+D2>7DA2YAfA75K8d5BQ3EJMdNaDDXA+<-j-GyMfA+1-d;~0{xyMu-Q`u zwt8lPi#`7hxYTn1*zUOr*x|VaxWe=2z?GiAK(9F0^AXUUp2NUy&k^88&nJMJJ)Z_{ z@!SWDdOio-=J_J9&-2f~AN8RS##A zeICw1*LpYy&3QPR+~7F~yvf79ebB?ceaQ0zguUIvx#_TnbJLw3&P{hqZ1+fP_lfHR z;`#+~eNbE<7S~55t;Zy-CnT*WC9P*9)N>N*1qt<{ggPdnUY1a=NT}Du=NsZvd6~M~ z%d+^rEK9SOWoh-YEQ`G?OS_l3?SQLKt@Qr5#i!2o{uJ2h{W)->NH&XPi%6p0S0LZ! z{SC0s`#a!}_jO>>`v!1__bt|>q?qyA3(=FkoK5mxYPOQs2T9f2yb!aSHw1jpdjjxb zkv!^M2Kq5?2k;5+nZPH#G6VYFg;0W zcq~Bu@I-+6;mN=zr1f;*V&F4@2=KYUHsA|^e&CCNVc@aAWx$sMyMV6*QovUO6TsI3 zdw_2QND%;J#oJ@Y-N2a4xt6cth}H;7!3(fd_*tfQN#s zfVT$M0B;Yj10EKJKL@@X{0Q)s;9=ma!6U%e zf}a4s5&SezHQfhvH+>H1Z~7vzx#^#Qtxb;t7dJf)T-x*vV0+WIfE`WG09Q0U4_qm9 zXA^s1cN53>#wL!kEh34EWSdBaM3NNA4oI+0ZsN*0)AR$pX?d!NE9ZREi=azQKLS>p zjsf>I{S2`kGD5*^c`;E=)1Ftqwnsf*D>P0AZa})X+12d zKib4m|5%f(z?(SgpKPjNj6WlBK8H91>P7eusAKSt_?wy5?ajYHx`&&81-!HQRp8yt zzX#sa{D)SI)8^+9>d|J7-^ZFcTAygJvf2~HN@O54lyT7L(EBMs2Qc`4t)eA+88$4>Vv>#>hFMOsLun>QC|hFQ@;RSs9ps|1TR(g zvNb9Jc?54sJz-fyrPY>YY0z;X=>rBYSCwUV34Iq_KejC5Ie@)bTJV5IFC~vGB)VF~ zRq%kItBsO~;3JDjA2@+{*NH^eNkR)ga`Fe%SC{>;eGlc!iDw8#1k-{C1n&~O`~4q= zpBDvPsM{tr5IPml)9^V%4Ta9cvr7$!)dmt3BcZC+&yF+K@i_yZb*|l^n_W|(zj6Jb_0ztg(EYxF5H0db;iy5L z>&^2v^Za{AJK*8h*k#|W{!#rvy`{RXf_0a5rG2g4?z+&m)pfV)Vb|AO&$<@4SGuF_ zl)L2mk^5v%)$@MO5zl>|fAl=)`LgFR&n4b>dxyMP@0H$y_crf6-hcEy=6%Wg2k#%f z3w%p`XZtqzqP`uzS>MgRzx4gP?`2GfJN)tw*^AT zRU6J97UA?^G0qT{;0EXk=#3}htl%k}6?_Nh^3UOP;d?kC_z(D0>eQhtPFCs{UBp$f z6fhLs1HAn#;`t*b;J`V=->g3xGq`Lg02Q1WZ_qfJti!aMU^xxYIfb z<$Mp&R#j^maMoH5JYby){7dUJ;HRuJfSaWyi)rnRI?Cgi|p4bKUsrCjtZeMO6vH!__+FtEC?E0+h1otWKgYH}1pLKu9{g(Se zPsIBt-m>q9zCZfn{tx(%_}?E;R?+^qGc0vz3g_G&_Z+Gf=QR9d54tbFw@%x_YxsCz z8WR3#U!*=6_y^p=;@Odh5Bd9ez=zX&1)GZxXC!`nH!i4thR@6R{2ZTOsP*cXXwz5J z^Xgal{964O-(7sx`Y_&{@L}wVpI2|bUGCmvz2NS*#y$Pk6g~yde_H?Pc?%y& zsIPZyC>-tTRK0zJ;Uu1w+~kH%l^k2Qc4#;j?%PQE{BDPijE)UQ#*72P*1Xh3k-`3< zzSs^4h)5zseVRrjHQEq;+0?{vHkF58l9B0Bejn(;SpQgmVyt&?I5`|1*aSz(q&y>o zJ%fFnYV*aL#>Tq3#y~~06S+b*GE=D*r~9+jR3=qTT|Dl%iobRAhlDbTbg`5T7czat zbShsFU*dLgdTcD3tCaGo*+@QBshrOM#|t;SlW^lZ2{%!ASvgnD_7=-mr^=alVWP;? z9PvmcSC~9r==iN>%c*Ly+~_}UWRic$cc+S?oQSZL%55cq^rwRTAfe{ zv{oWEJQ|CNqts-VZt3_yk`$WAP-wW3x=@pB`}mk6Zj>3H@{nwGsd%g~GmV0b=d-)J z6zjHFF-)YG&u7!sT(JNb#~%s|t}j=q;(;=Cu}l!KTd+)BDwWBUYo%I?(rk@}li_uw z`fAkBNRLRi4h;`Rv|EkZn%st78r9MUdbBqg?&*t({IYm*n-D#HgON*xN^Tn&AXOU@ zLYpB0x;`Ypm?0rvI3z$Id*Pm#riNo%hYi_-Aw{7?+cP+*X+&G24T1QFlEY&IvG6dw zgG=_04L|}0shQE{M8tt5v>9ze8{u>@lLep1=L&o9bOs;D;q2saHV( zYbrTa=D-o@Xem{l(&S}1hw8}}(|a7hGX+ETln|qq_NB%hlAWWXrHOp8swos{G?^GH zWK(6NY`6(wa+QgE3U7)*4pW(tc!8vhD?=xXhM;?cvnG>8{jBL0gx0Ert>O#@($QEi zG|ko+Y1U}GPssl80RHbptI?rGB8!QkSR@|qllY*nbZu&)cPzPcNDs7O)4UiMr1bDI zGL9c3)Ffgx!;9iZneizP8D48u?@S@Rdo9M5jH6U}77RuWB%%#Pzm2BKISx6g(@H6u z&ZY9=VK`No%%bjDtrPMLSF7dzRACk!L3oa}wJHvJq%fT-q$aZ&sdflUnen|@JXxv9 z*-|!8dOpa*U2(%4sO0 zt&NafN0(h|Yl<6XCXhU&J2^>ptv6||SN+lTx+&J{Bv~I_=j+O?(KSNn$#F--LYiDT zVrBs}+r-QwjBlRQ38|k>1tCyv%!4*V-I1c+80+~a>*woiL$bk0HfYI)dOSYWba0msFty|=q(qgduFTIipZQ^ zV@ieUC1u*j2-y(2pt^M^Zj_lo@{nG$vDSk%g@)M3b(yL5O}g4Qsm=Yx%uGIevD!RT z&h1TAvvDl*veVfDOI0jHv1H3(Eyg+?>hHz0Ha0NYAD+i1!YUf;8QD69Md5I`KgQ{v z$^aVKkbMq`SR%cBVC>Yz6^92z%kIGo2 zSjHr#=dQ8DKFsc1-opvm?};aSeEC8Dz?hQg5;(n!RHBIq?zTj-%e*H<1j@wSnzH9t{dO#jjoXl)=QlEd+V zt+H}uSf^qV$(?;nZLsIvOk7&SG=6-bFFrsw?5g^Q28HP_7K&>kSQ_Nl48>R}Scz>5 zgG}t~=UmP3sAKdTGRYdTb4UaTFc3>59iJQ-J>f)5RzQ;UaJ)aBL?@|9WG!6dda=+N zLx+r9ni%QVQfHtiMtTzHY4O1UEoYOWY5EfoBnEqvmxYI8waP$89t4Z*aJ=!LRR$MAvpj)^&IF#LkaKdpGv>_J(6!;kE0+J>j+8(MV6v z`CV&!deMSZZ_omuWD%rE7F|=x!AoNUnhX!1?ZT`^%|j`mwMerT>f;o7GOBN|x8^2o zi4i|9uk1}~qAwZQisTU;{&R&4CY)q^HP)dT%1M7FT@$zP)Y!d4mu_VqIAQ6&EjbDg z8%A_!-{8PjtwRk(9a;bD|w8+IeHZE7N1nJuJAK!Ar-MRF*d z+$Nf2FdApB`}@O*OGzXgA}ItKVK5TzqYD=U;zMr_7*P}(g?=rq4Ua@@>*#SJ^6)Lg zL)WWJD%c}B72Ck0X7x_eaWmXRWHcGUR|zNj6F^q94E@MRA~}W}_NnPICf{PY8U>Bi z21f9tH>V#A^~d_@fWd~SiREmX53Wx5Oz$NkNN*es19gB2F5a)G0H8!iB(U>DCxaHD z=UO+9ga^oTy%p1B%?bN2$5@%U|o@HEmE= z9dI{Fgh6Dw=1^cB>eCvw_XC5MF)r3oBA$%J2YLtTM_1qAP%_%HRb+|TN;NyZCf?vW zFxWdZs44}G1KF!dAnbAbot_~PqN5K)hnShfrSTypnwT64ib2UGBRPkBdo=j{A?{Fn zd$$e`j?|)z&^X}4A9Wb5Y8{SaEP`HN^JZvWM#JbJWMsHSwh6`cs-`g9hU-Fy)K6qK zu@=U}gz-?PI7sWE9MXBh^|HFFCJ`4l365AlQ7__6yO|J(2ff+cz2>)=X_}J=VZ8DtI>{V;pG^h}W7s@&T)DgY)PZ^Eg%?k|rV)O^@$LU%fa8 z2kUN~=kg%3?b1ZQQv;aGs2x}hH4>F3)iAa#jCDq2uy3Rv9*n7=KaOwUm|0S2q#GaY ziS&gNIB>#@S10R~c166{`$yv#mPtJvu&@Jx(Vz)->zc?==0P#XDM~XEB}qht{fTYy zUZD~-3JWerww7yBBte944%u*@NgTGz#E3A+fWyEOI*h|5Yn1fg$lyRCiRoT)Vn`hT z^G|;a4oPT7O+l{vG5SA~=EKZuiM~P7Lt(5M4UPH7Q1TF6k=TZY*VW^YtRRO*rVWi+ zuSx47$De*;MJ^o)>9YDcyP(CAY%y7~_hDe_QOwo4aG00IFp}wC)}W3T%<~Q@&zjvB z>VQS$QVJ_SVZ?f@Nn=1Zo;U~`Pc<{LadRxmn$k=Z$N(0AT5br4;seo`xYctjiRd#y2I`S~Hs+tS7HaJj85yQ^V<(hJjf9uR zGU+&L2Ia`$&`zEg&1A>MWDOtA<4__+U;W9wsX{KFPpPY8`>N%X7|LkBQqz@Op67+a zq{rn^GLN)yz2($&R;UT>T9U_(-rT+!O;(CC<+L$@i(92IlwstR!VYHtWdkz*3{%W&$BEwQtWz6DkMr2Dua97FA9s?2F$9Nc+8(k7b}>h;rp?Kz zN==VT&QW(fm7!df_oieAFv??xWNKWc$5nqWT`pFN6V)}5bZ*U129gF_0@!$E2s;fP zK+qA#2B`6Lv7FC=0G}RDlrzUf0H7#hC?)AgR%9^d&LbePKI^(rd$-0B|ADm~v z`YPq`XZh6xyM<8F&BTQ^epMo{@*?FlHcse*Br1i$=~RiCPt>?%ku)-#=}o0^^f{CT zYic}`t>E6z_)sdNW5%;MF+p~)lr7Nut)>WN0{3Mj+h+_VL^zY-xrxg0Q%U3WIh#?H zEP$SI%EQwfR%-2NM@xb-kFl8oI_o64T%}G=T$ZY!`f=)>Q3J*5 z;MFA1wk14Dh`lmW0W}e?g!8!+NmH_!!i?iEIa$t5!WNv7c8XU9ve;NV2BAMm&<3za{7r!IY&t6D|oQZw$6ZHpXkHk*9yGh}%>GgzI|B{_OO4wp{0N zD3ZutH6w0N)(M%_R3T>wJuxyj&>YJNeR{6y7g%B$XmLQX>)W~`w(XsxSd^Lx|w|Obogkm++3l=?l%DG+R zwEkZ&C1gcm!uD}m!$eu(oEII>8F6GPo8DvSX&rUCQk_L^;_SkbW%muqaymnN`c(S&paX?D%)Vr#llrE7_3 zN=+uA0x->0vsgaL%_J^HxB}_R?#tn-pY|1(5w2;}lJ1MLFca_8t=h3v-Gem-CQ}|z zYY{R#?-HI~?}#pAvzWOP9V*2Iponzt^~y&3DNaKLWy=%L^CEEcg)nTD9xRuH5#3Z1 z*E&c|60eMMyCZyhd;p_fil7}oH zv_R%EAsJo7-0%^Bqo{?+7_BV~B985a3fJD`Qj%FZu(sGOSTW*ywIF(Hl}?C7p5W7> zy@f*?=7q@O>VV^3s#Ddn2&W}iGG#pzP24DC6M1%>iik zMqFXag!AaY=ud@Ibp~RN9;fVeX{F}Qy1_JvS@hEEY<#j%WR*wIo_a<%S0JTRhMm=~ z)PtE{s&FzFB(N;XXTgh7Raf&KsbY>X(#x`EK}XNj`h?>0w9ZM}PI6kS%Mf@pSINzj zg)0@T0`jxTT(!~bybfBAAw7PasxnKrwEi;p@)&n{Ykz#4KoSU3# zaDuIx(PCFqXpmy8rl#d~PCXK{0HALqJf6$vsG@ z5aV3JXu8x$m$Xc;JdHa-naVPP(mb}XmpX*ofc$JMldFac?BUg10m6wyYHt=BtVwxJ zl;pw9T>{1n&M_1SjR`1Mm=JQZggH1TWGQp?5Vn&-4-xlLL;Usw2jaijA(AEXN9YqT(~RAj#Zc- zciuwCUS24!XN4$aua;-Ll7v1QoKStKN;O`{WcPv2Lvca%PnhmcAE;7=igrj$_zqdQ z#-ZQ`GqIjfKEi+n7H2}15(*C zvF_}d#Bv>#Pmd~H`)$!VQ# z=)|5}DbgS}r08Hnqm>OMm7FRYPPZ<$agG2boX;7Lm1_)I9gJw0izk-j1_#yEw5 z?WbJK7qtX&hs%=+`)$>eE8wDU0@tL|Q?POtt3#BuFe6`H*#-EOh4^^He&MQ<%R8$FD@|%JptF4rA6HB@1s(go$i+k1CB6 z_9!g8_P|$i3OB!L1keP=c2!e|M^*4ahps{i!78{FHa`&1J)L9NqzcugDa`qfL=$=< zl$Cowc574cjk=x3Lu1b45r?_!EX|A64|;T7O`rpy{_@;)%M<=;`!PMK<{O4o?^uHj z<0m^=Mp#)C#S7`OzP{KPAUZahD_3XWsU9(o7wa+@q78$RD`QvS+DujV$b-`Z1{NkO z-4%FiUX>^F$8EqGSXIp9LjRgfex4tU3lYs!FvsR)pN^FjsKM;CHviUC35_0DmE~0~ zClB_Kk#b(m;Dc3q6^$`1*EkJXnVp7eH4L|T9Ds)9gx=u7y@_END;Ks6uGkeCPP&w# z5j~94PN)i4Lzfz8&N~?9I&aX9)bpCDnEZ;al}TBZ^aC3K!-9jG$7X)F!pBms8LaAlf}$^z=#&VZ+_iYqs1D59xmLf%d?Lv)kcc(W+;Ghr00zwzP#NkbTg|R9%4iYLD zcYK&69jH|>mxy;Nc@n0lIV5KsbUd=y6++vP(rSj3-ZX)b?WO)!hk|8yvLF!@3PpX9 zSBH}CBap;+pDBx%2-L#Xa&e|aajZ}+&(cyxW+cPKq2$MW9Yn?U@qQAem>DWUa8X}@ zpu$}!39Q<&NFOYa7)B4+n+092r1RNSK?>X}_RZdOLAPv0uZgqeZLo=F3%KqDt5Fgr z?}D~-IGZ-w_@JPmrg9mXu{g(YD&;n?(lg6o*-8b=B<(u>Hpw1XB2ijxSJ0lgGQo;U zmYBs;mjw;`0QUUF&>lTd`8bM5w*@VJ|gf z=nB4iqovU5sr(oXX;mpaMmHu0?%ku<#Y!V9)W&21hXPn?kzmK_$xh}9v^#5pvjHb+ z$S_WLYJ?^$U{cwqCE6@4b&U>YIE)e+Aq)r8LxV4wnHu~x@@cVgD{7Ez8hu0>Jer$! zNbJEN>`z@;ESsGJGJ@Th!|c_Y4$N6NbeTraqIVv^I5buv4V-SW<89)~`EJeI9FWzT zU0N&$Z}Xwo_iq=Qef8TM^tSnJVmUF?x$7xrX5Z$HuA9K6#;J0#kh?~DU&F3S@xJ4K z;e=&jSb97gvyW;-ug08BGPH^L`W|Wl`v!*kkabv6teePm+B5YIjIXi^gn;Z!gd z$T%Bi(}`_R)>K-+zTd!dIvFZfv>SU-jlow8wKP5$+n3IkoV?T-oK|t7lj%E~smr1C z#Na$QgO#%A*SZ@DBb8g1IKBs94XjIHWTxVP6{#%MU3aMz>a-KKE-6*AGnt|+R-A8u zVl$+7hm8Wxw=!y-MK0S@g4GSgBC45Oh2tU{)qMS%)twZ7L z3D%;q9K+}2_Nb;YNs5f8r|Lb~a#3AFK&RQcrsA!k32*q&F zKtpA8VK|U=Xk)y>%v@4sv118|vXv;pQ>$;`rZr~p9arqBhL4EA_qG-UpE9T z$%bU{42gY=p|DvslngL_H3ze=5%JuLn@t(cSp00m!XI4Sf@lOBkl27ohcP15RvI&9 zqsZw}#s`XFC@282nQ~vj#Ojv@j6`o1F$@jQuO(ugXgI_>kDt=fV4VOz+(k&9okXMu zB6oXp6vt3JtOzo1OS9(VxU_5Xd3mTwkr$n-nxr9S*-4gbF147Clbe{2lOpEhBu7el7?MUvxO5dJucPQ(Pns2sbR_H3=yhKk%;mtoncqNT7hBZEafGHNJP zAF1qgPD@~Nz#I(;YM%?uqA(@-PO>zQER^Ld$=Jm~M`qKpecLkmGHnxvnx?pZ5k%kd zP)@d;GiM`qPM!^$EE-}jR;0p!rMke+*=?Y7AyeN%H3)h=qcdLjObIKCUrEol= zMO+5zghb;Y74w`#3+?3bc?I?n+}uNTSDf7%l#mWHQow$!n8#HhowW9W9XM*&k<{(K zj-;M@BscGx2Y3lAXuC6*bd%XQSdw=*H^525o|+P$_|an8Q4HytAVQ zYVI;mV*4}+m||{m^`q$tdiwK;?R4|RfURNf~qK}C4AwwqQr23 zTWMVJNZsk0sbKHJb$x{syCyhmX^N{%7zB_5BS?=A<_(E9(4O)VnoT4c-=xIrD~6Zh z4vUI(XCvdNXYV#FL!)?xtMCN&Z54G~J+48;u@g#X(?nHRwkY<#1v#lh-89g&dF#S+ z5XdQeMd_ZCG8?HcUpcx~YiB85l;CDeukTqN2iRXjm@lnOf(l-qSQM z065lC^mSzQvxRdyVdSqK&vmG)J)74Y~WT zoE?KfZT!|v0;n1&6ld43Iip_c!l5EApkaenmvCATqZ@ZkMGV-Qm9#%ss;J`Ld=ZbW z#`MotN80l^xanG}IUdhSXVXEl?qs+n@-CuiuLMVVJ$dKl=NueBlJusAgC znZfPpY6W`*{nRU&!HJ0qrC5H-b36woZESrgeRU59uNb5%y!(QcO94KlV(F`ly9q_= zAmhMnNfRNgd2&v0u5ZeUx?&6}#|arHXIyjB(|A4366i>cr?C>3=v?oxnt7m6fngpG zJ#Ry=(Qsc;G$~h%c?fm44=X-t=|q)w{B)|Su*JfCVx_f;UiId2VP6__WH7A>K51ni zoPd1?x5{y>0pkgL=d+l{G5s4su7ZUcrgOLzic*`br&_VKZmvz$7y`y=UW3BaPZ#tM zKJXm}-I#KU34IS4b`Mn}L@Qy}Xc*nZ(nz{}#hhu#Qd*`y!!`B-s$C;yThz_7xMjfJ z(O{KzB$ND#0&C6s#DAuyGuQPGg zSmeD%JLAsmyK5cC8FuUlP{B+jmoWtD!%)>dhQL7^&%AII+z8OG43(=JPI1&SRx*)k zso|L0$V^$1alWSkgJgxt>WYv7&&wv7fb~ujm2319YcPyf%!K+bw~S@hXT7J1Wm?Ob zT#To2nnhlDXQ4qN`Qcbs6`V!#iHuICg<_-_@-ptZ(Z)c*LF{l5qB4PD(K2PWibLV| zcJ`*U5S6D1-0aZ=w-j8(OBguo<%wpoEp=437Vrx`RZUhT0J=A3DH;X(lQcNwVYoRUU}bwA1D!Z50a3uSjcDcZb?NjOg6kvSb?H(;k zRQCum4G&VSyeK8vF(Z^Q@T**MgGx?D<4A+)sr6yRFbmf-;{D$abt=B!X+rfQmMT&x;yq4r z#4`a(x$t6B7hdk@3Zsl23LFr;uU|zKUi}#FL=HBo4fwZKosSq+gUf=-fa*pZo%nTM z%2MJ^*;;%$fop-A@GIhJxTTa8?*hLO(oG1RR$U0S7JQe)*@b5Yepe&4jD%ec-}>JK zd@*DP8P_9{bC9wNuf^JTl?N2Zq;>soMY-z_=O$;VkM36Q;4CU z-Xpm{e_BvLO{5Ux3?%BzVog?DH_}Tt+XWe(8R->v1 zPka{g%ilw!#MWY8}Ncxyll0Ie6y}QAg9l1$s5PG?s2-O zb>O$#FM^-FN*~?98 zo95RdM+QR{B(F255$ZLLkH#1!pW9<_#aRVD_3@TN$Vu?5y*QrKmCiV0`twKG{IaVB z=b@*Ep$YMmZum)ij(`rl1&(=Pxz9c>K5Ib&BL}}@2*itN&rZVs9{4Lj!n)_EV83Rb z@Wm~lXuLoY?tS3Zra`3CFR|h)Nyw?L!3!YaIAX7I^g)NXI`yVbJWo=MsPoXD;)sno z#w&Zf`Vk7>r$+kNMk778K7B>-PK9$o!1 za|muHOSu@E?sJZos`tJw`rdRIVk@JhPCHNovHsZ)owBeUSR?z4j6Fe}#M);396#(~ zV<^)A+EFcInK;&+I2+s&?5lh5q0TEHTpIPpHs?IZe$SCZjivQ9bI*}PxB0!6b*{^# zRQS(+_R}ABABf`3VBh`Z@JB+*-CSxjPizOVFW0StJ?o zb=YuPWP!FBQE1v~yQ1xiP*#HFz#teO=oZYYq5W}S+uZ%O zcPSj~r9^9~-{W%y{4Aj##d7(*$_1fIKfH_x=^;mLJ0*@0!JU4Vx20`vzYu}81JxiU zZ3hmv&E44KbGOZXC=_4rS?=*GRL_Un=5Ar3;%;wff6DfH!7TSQE05K-f7;KFpS8K% zbDA%>Bs6QaU8k$_!0j#m&_&A;yG`)pg96gsUJN6**>iV~yWoONlhgJ~H>YCLhwM>Mn7juNgUB-r`3rM_XL}7RHAEZoKl9 z!wHc}OZ>|A;&n4FI&N>V*%N0uqGN}*y#d?nXBy-fDSE%p=R(KCkoLA+5oGscJL?`e_t42cU)xGujnB8u z;XkV-H1~aUVi~UW&iK439G+6m&-<0jhUXTiN)SrC;EDda2=89(Q0>U#-0Sf6lD)Xq zve~{+JkrdsgR|LB=3ZLrGjYCz@zOT;leW2^hq7ow^kYftB^f){q5iFa&*+>Eyk*7j zhbQgjC>l02_bXKGXYlzgifh6imEQ0xD4Uj+7O#?iSijJi?ocH4E( z_mpX3?%QxhBVQGOlnnHg&uZ88h3;qjp%2-GFlPLS*bgU7Bh!9(Wfu+YUw}8g0NX?R zkD>vW`Z`<;=MO?LLse2+x)Bu=wcQLk9t-e5H7xi0J3P=me%ph%d>*CR_J0MTTNrwQ zuPNa3dCXr+M-v*d#)3jHDq&ly!qw8!-i|l|Ek0i$fWh-%zz^_qpz+C%&l?C}-teken0Z$_c!~39*^7W^9O=WsA%+qhn59k{9O zz%J;Vq0oVCrWnkM6A@ghsC2k550GZ2;K&uif!jIvwzQn(Yhzw__5tqct_`6WG(kC)Rm%Zr4u#BIWlxn+kso# zc2J*P6xx3a#@$8e&cR@4|C=ZIpjjoCwY=N_Ds=q~3*>Rwh}(UOQCITk!=IDw7LO-% z{b8@q?e};vOwkQ6ByFD$5D1*$Ykh|>huO`q&-*a%LDgkB!msym^x|Dkda&&G$iUd| zY1@yU2_2(#31?TV5?cINm2hUM`agfouF;daU%1&n^o@UR|HjcL|77k?wF0j}om1*o z7*4!40Q_(w+=bUY;ax+PI%n5kz0cj9U;FN^y{~=i7uR3-&#QO;^1F|W{pp(@&;In{ z{8P)m{igR-?pSv2^jp7vVs*=Nk=s7@-9J5A=?rfD%j?4*fA!`^ zP9Hn<#Z{m5554!>OAc(`{r#q|M*g+=t_zM{*8Jww)3a~9^5E<>doO(XidOZ?l8^uH zq#p;KUGkAXdH+BC?6b&&Ww|UjvV)9T1m;qBHwG{Vo^ z$WD=+BAX+dBby_OSAhY@hRB{q_B67mku8%glP!~lF$zGoLYD8?a-U9UqwI7-8y!w3 zROwKqtV(u<>|(Mj$gUuZ zx3MetKC=7B?jt)(c9!fc*)3$ZkljKyOg2n5Otyz?57{2F5wa1o5wb&MhsX|*-A)!$ z5rFJ4*z;sk>#7T+|7g*!U@8% zzgXxOZkymDu$#C&1TVoy@Dl=rAfbuSOjtl@AuJ@c5<&#NI?ZhnY=VoxrgnP>UV@L{ zCjdAfR6+j{hpe}Q_u@fvJ zEG8@=oIp5{u#|8T;bg)xLOWqO;S|EDgbu=KgwqLU5LOV*B%DP!o3N6wih$Slp$P~! z!9}2Ya(f6~f{)-Q;BA0t0zwm^nXrJ+LRd&>C4>lVghhnKge8O%2qzMj5>6tVOjt%} zCoCtNLO7MsK{$nU$ z66$@O|5xoz))K4TI?45}AM0DNWenZhTJ zPYItYKKt;w7M*8qj&KvJLs!-P8tciUJJ;du|?UIN}p9-4a+u)hNdxoof7 z_6BWllkIJ`y$cZkZn_;Kyi9n7@G9Xo!1e69*ZT?0gjU4C1g_sg*aohJ#6AKubv;wM z-tF-&2a;q=2N=l#MslE)u$a(6IG4~(*n+7140hl_VB3MH?QKVm?O!k4LBT_Uy9IAx zozs@Jjf9v-;QhcpaYU72-3b!=Z`Ag6WLZ%M9wT+{J3v{dl&ww8iWu5Urs&oR)i9JGi&PKE(Og+!27a z!Tfn?*J#)Ko&a}0OR=wX2bKmHn@64jE==2l9oPshr69mCc)&L#!47X=>C!;k;sEw( z?m(brX`l&SjR>?KGWdp9$tGfu@H!nv$y9Z0OPN#vraBuzv~O;6Q8-Bm+cEhw5w$px zGqV9~=$Meu+Bf_n;iUoY2^j&sYl2LNmsJJ=x#44BM^I-PWo&C@?y%WhytEyLpFnG1 zIU+#mTCo=-<-%^FpB$pbA<8aD*pNXe-p5hb}D$i3TFctcVPoqd>s8 zlcYO5dQci9gJ}7|-vU%JNJ+DG>C%qoItQ`-hv3p85+B3iqjQCpWL^TTs5lUag~>x8 z@o{%eCdjlUs-+T7%SrQ-S?VOzx^xNZ$_dVBb*NMDmgcuhbtq(RkuH)`3MQrV)6%*W z&2F>p{U`#h64;s9fmRra_45jm?!>+k-4pNlw$RB~`Px#^cAW=Cjk%j)8-dZ`7ASDB zGH`EoTiX?_9b#7y;ttW6x8W_ajw@s|Wx({=wmqmw(93ohGGI=jWmQu* zfNF*v0>c@47>u9k?8g{KUXk;*Es~jMwc!h{5Yj5!%+t@v+6_WRgixM zqfv+WE%$_*5u+4&ix%EUhQ@P7_A$hv#V|_3%C@3yzXd~Z+ZJt@vD>ywP_gv*7buS( zov>Z^M8pk!5Q;CrKxlzYN$UV8i?+=zdXKyi!=i1oqbZgnQ!Z!}n@uCi27S|oi7+6W za;UsM?4a6)sD@wwV!EwfLARim1cmkqa{FqvN-MWEk%p!v23#Gg8J`8Hz0m$8;;V(F zMCQq~?O+%2yOA`soeTC$m_3*(><~N9n@Na`NV2j6%Q$2>pxh`TJ0Mkzza3GuONspL zHhQ}ymYjBf6Pt$ij8fYU28V5?1%0e-hf%Ykixw&zVbCN48LQK$5MW2!4%lhMZr}@? zq+orL9XZ6Xj2Q0+ZbD7@5fuy}2;o>quy?QfSg6xN=%H2^Q?UB*NKDs>d5Gqa))qSUMWNAm1dxdQlU{ZG z4X9yJoIaSzq^55bok&yKLUBOwL-_1o-ooi702>IZhiU|UOAIceW1+_a&^H)R_rouY z>S$FkFQG~NFtM#vfxt?0Ce-I%iOvL(ADpNGk3wK9X z_rzk6)ji!2JUY8#ot@_^G(R^D_+yaHo=qDztUW)rdK2E;w7PqubN%W~;kDA1C-v5KnK=GlQKYaa{-{;xz#)J2q{H^nPFA6*}{hq_I4gYfKUEjUvwIjED=Rdy{ zKj*-%i@)lh`NTsP3>^CV5ADBd`i_Oa{rNuxcdhxzNhkd=d&T~jZeSj&zx?cb_{0`U zwWEgGCoR<;w_vG?CRz{N|HTj9@|*a;)|rT-6*`?pHM|2}ar1~b!Q;9MK4;>Cb9HqgK3nnGiO(K< z4&ZYaK3~D-m-w8CtfcUPX-@^vpjYGbIzAsk#Di|c;Zf=$7+^ktM3%#b_bV7;&cUwx zDOmR2gw5ldCn%L&rqmBR5cX`Pib(XWjd(`!F8N`lZW&i?Y4)%9n7bzv0mM&I77 zzVuj&`sas2>XLUaQG*9hQj_H;!cXI}C zpCAtG1)5YS)xqa4&duQXgtD)d?A;LQTqqxU_Z$}_C z`~Vr^(|1RhNlCRO3* z?XnK_DGXBH=i@!R4&2hyT$ga~M!7oB*1U_wJ0koWko*pscqwISPTe^-dj9wGeLggU zg*xQTnhfrk@U~99^zR%G^Krh^_55(h*Z4ct_XQG;H!gYCYZ@iYqn0|*`{uXSJB4Ms X|BwIMZ7G_e4?@TN|9}7AtAYOozFy4U diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll.meta b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll.meta deleted file mode 100644 index 55f8245..0000000 --- a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Pdb.dll.meta +++ /dev/null @@ -1,71 +0,0 @@ -fileFormatVersion: 2 -guid: c163aecc9b624174ea6ef0d3de8f7ab0 -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - Any: - enabled: 1 - settings: - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 0 - Exclude Win: 0 - Exclude Win64: 0 - Editor: - enabled: 1 - settings: - DefaultValueInitialized: true - Linux: - enabled: 1 - settings: - CPU: x86 - Linux64: - enabled: 1 - settings: - CPU: x86_64 - LinuxUniversal: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 1 - settings: - CPU: AnyCPU - OSXUniversal: - enabled: 1 - settings: - CPU: AnyCPU - WebGL: - enabled: 1 - settings: {} - Win: - enabled: 1 - settings: - CPU: AnyCPU - Win64: - enabled: 1 - settings: - CPU: AnyCPU - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - first: - enabled: 0 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll deleted file mode 100644 index 8a4858bc8f9455aec110197d23df39f1c766ea9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27648 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 z zvPOrsPy|5<@|7|za~F@n&-uhL-XR1TNHM$Yh{-pScn%@hcS`WF{UO%Ckt=JF{v}Q7bW@(X`2H0j~CUbN5BFFT{ zsQn^{uO+LHIvjg~jY0;kS9yiBMp`*TSmKhc93hK|dxAq`!I-& z1z9N~48B3dF(mgPLX6n%4*(Nx00963d=E*)?;&`>7QT3;45J!Vw`5ze{$L83>4z)* zHB2MN(uCPa|0rIpf{k^sSY!>PqBX(Jn^Zu_J<201J1lR_ir8NS9;%jk%-cq(OoCFg z4vpbW9p8r1f_1!K3kh|n2UNMzyv|qXm8X7B(7Qvw z+xY0c`?kDz;6Cp?Pi*?bRX=-f+{KT5F#7gag026Si9dhv;L7Uz&TD(+sk2MJa^Rsc z@9$n7o%5{`J0DNH^z`eyXUsTt`qp>vczs5)1V5Vm`1(=rJkvJmt=>~M4x7zBIRD=X zZZ-bC1y%PWbr8bh{I-+uHx(}U;{$W9x%|u#moNJDZQQnbC#+TP>@#aS_^UW;)BMt4 zt+oE_wJAJtO>Upsju%z&SSG%9aGM*uJJ)lS|KESsUXX9XR>te{bRo8>K#vGta7fQj zCKvHMkuUeeNM1{|Enn(F6SZeffJzxq-EF(7@lWAUcB2dZ!?*-h*HF z%Qrlk!}t`y)A8)w4%mV(r?pWl{!c55LAL@fQ2*Bzder;=XMFf@zE$ev@k*eB>Ie@)Pg^JW=zLaVwsRH{eN`KgUR^6_E0?at3mKu2xU!qCod~`R`|H@JT(B z<1O7$ES)Mk6VYz<-xNH%qYvm*e8W|9_2;AZ4DJW`*}i)~J&WXCz`}jOJm~OEMiTgP za69k>ub$T@$@hevR-6vKG$eUnC!$0XYHhR=`+q8a&8|s{`5qySHpXDty+y#S0^djc z<9Zu$pOD0V{MmqS8Ed$OzzbusG7sgtamT@}*@*iQ+`Yj2!Mr-U6AN~d^h-0a2{zS4 zOr45;s>7IXg~bFs;m>mMd5LY8x$LvkZl>f0(!2k0>i=>N F{4Y`N!iE3< diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll.meta b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll.meta deleted file mode 100644 index 5e09fec..0000000 --- a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.Rocks.dll.meta +++ /dev/null @@ -1,71 +0,0 @@ -fileFormatVersion: 2 -guid: fca6e8c9e6a60c8448d54b582b80388a -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - Any: - enabled: 1 - settings: - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 0 - Exclude Win: 0 - Exclude Win64: 0 - Editor: - enabled: 1 - settings: - DefaultValueInitialized: true - Linux: - enabled: 1 - settings: - CPU: x86 - Linux64: - enabled: 1 - settings: - CPU: x86_64 - LinuxUniversal: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 1 - settings: - CPU: AnyCPU - OSXUniversal: - enabled: 1 - settings: - CPU: AnyCPU - WebGL: - enabled: 1 - settings: {} - Win: - enabled: 1 - settings: - CPU: AnyCPU - Win64: - enabled: 1 - settings: - CPU: AnyCPU - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - first: - enabled: 0 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.dll b/Assets/Plugins/FrameRateBooster/Mono.Cecil.0.10.0/net35/Mono.Cecil.dll deleted file mode 100644 index e14b073cec95f4f6732e7aad8f3d81dec04a7c8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337920 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

  • 9}PR6RJano)aNr0|{N_Ofq>> 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 2; + case 0x3: // fat + Advance (-1 + 2 + 2); // go back, 2 bytes flags, 2 bytes stack size + return (int) ReadUInt32 (); + default: + throw new InvalidOperationException (); + } + } + + void ReadMethodBody () + { + var flags = ReadByte (); + switch (flags & 0x3) { + case 0x2: // tiny + body.code_size = flags >> 2; + body.MaxStackSize = 8; + ReadCode (); + break; + case 0x3: // fat + Advance (-1); + ReadFatMethod (); + break; + default: + throw new InvalidOperationException (); + } + + var symbol_reader = reader.module.symbol_reader; + + if (symbol_reader != null && method.debug_info == null) + method.debug_info = symbol_reader.Read (method); + + if (method.debug_info != null) + ReadDebugInfo (); + } + + void ReadFatMethod () + { + var flags = ReadUInt16 (); + body.max_stack_size = ReadUInt16 (); + body.code_size = (int) ReadUInt32 (); + body.local_var_token = new MetadataToken (ReadUInt32 ()); + body.init_locals = (flags & 0x10) != 0; + + if (body.local_var_token.RID != 0) + body.variables = ReadVariables (body.local_var_token); + + ReadCode (); + + if ((flags & 0x8) != 0) + ReadSection (); + } + + public VariableDefinitionCollection ReadVariables (MetadataToken local_var_token) + { + var position = reader.position; + var variables = reader.ReadVariables (local_var_token); + reader.position = position; + + return variables; + } + + void ReadCode () + { + start = Position; + var code_size = body.code_size; + + if (code_size < 0 || Length <= (uint) (code_size + Position)) + code_size = 0; + + var end = start + code_size; + var instructions = body.instructions = new InstructionCollection (method, (code_size + 1) / 2); + + while (Position < end) { + var offset = Position - start; + var opcode = ReadOpCode (); + var current = new Instruction (offset, opcode); + + if (opcode.OperandType != OperandType.InlineNone) + current.operand = ReadOperand (current); + + instructions.Add (current); + } + + ResolveBranches (instructions); + } + + OpCode ReadOpCode () + { + var il_opcode = ReadByte (); + return il_opcode != 0xfe + ? OpCodes.OneByteOpCode [il_opcode] + : OpCodes.TwoBytesOpCode [ReadByte ()]; + } + + object ReadOperand (Instruction instruction) + { + switch (instruction.opcode.OperandType) { + case OperandType.InlineSwitch: + var length = ReadInt32 (); + var base_offset = Offset + (4 * length); + var branches = new int [length]; + for (int i = 0; i < length; i++) + branches [i] = base_offset + ReadInt32 (); + return branches; + case OperandType.ShortInlineBrTarget: + return ReadSByte () + Offset; + case OperandType.InlineBrTarget: + return ReadInt32 () + Offset; + case OperandType.ShortInlineI: + if (instruction.opcode == OpCodes.Ldc_I4_S) + return ReadSByte (); + + return ReadByte (); + case OperandType.InlineI: + return ReadInt32 (); + case OperandType.ShortInlineR: + return ReadSingle (); + case OperandType.InlineR: + return ReadDouble (); + case OperandType.InlineI8: + return ReadInt64 (); + case OperandType.ShortInlineVar: + return GetVariable (ReadByte ()); + case OperandType.InlineVar: + return GetVariable (ReadUInt16 ()); + case OperandType.ShortInlineArg: + return GetParameter (ReadByte ()); + case OperandType.InlineArg: + return GetParameter (ReadUInt16 ()); + case OperandType.InlineSig: + return GetCallSite (ReadToken ()); + case OperandType.InlineString: + return GetString (ReadToken ()); + case OperandType.InlineTok: + case OperandType.InlineType: + case OperandType.InlineMethod: + case OperandType.InlineField: + return reader.LookupToken (ReadToken ()); + default: + throw new NotSupportedException (); + } + } + + public string GetString (MetadataToken token) + { + return reader.image.UserStringHeap.Read (token.RID); + } + + public ParameterDefinition GetParameter (int index) + { + return body.GetParameter (index); + } + + public VariableDefinition GetVariable (int index) + { + return body.GetVariable (index); + } + + public CallSite GetCallSite (MetadataToken token) + { + return reader.ReadCallSite (token); + } + + void ResolveBranches (Collection instructions) + { + var items = instructions.items; + var size = instructions.size; + + for (int i = 0; i < size; i++) { + var instruction = items [i]; + switch (instruction.opcode.OperandType) { + case OperandType.ShortInlineBrTarget: + case OperandType.InlineBrTarget: + instruction.operand = GetInstruction ((int) instruction.operand); + break; + case OperandType.InlineSwitch: + var offsets = (int []) instruction.operand; + var branches = new Instruction [offsets.Length]; + for (int j = 0; j < offsets.Length; j++) + branches [j] = GetInstruction (offsets [j]); + + instruction.operand = branches; + break; + } + } + } + + Instruction GetInstruction (int offset) + { + return GetInstruction (body.Instructions, offset); + } + + static Instruction GetInstruction (Collection instructions, int offset) + { + var size = instructions.size; + var items = instructions.items; + if (offset < 0 || offset > items [size - 1].offset) + return null; + + int min = 0; + int max = size - 1; + while (min <= max) { + int mid = min + ((max - min) / 2); + var instruction = items [mid]; + var instruction_offset = instruction.offset; + + if (offset == instruction_offset) + return instruction; + + if (offset < instruction_offset) + max = mid - 1; + else + min = mid + 1; + } + + return null; + } + + void ReadSection () + { + Align (4); + + const byte fat_format = 0x40; + const byte more_sects = 0x80; + + var flags = ReadByte (); + if ((flags & fat_format) == 0) + ReadSmallSection (); + else + ReadFatSection (); + + if ((flags & more_sects) != 0) + ReadSection (); + } + + void ReadSmallSection () + { + var count = ReadByte () / 12; + Advance (2); + + ReadExceptionHandlers ( + count, + () => (int) ReadUInt16 (), + () => (int) ReadByte ()); + } + + void ReadFatSection () + { + Advance (-1); + var count = (ReadInt32 () >> 8) / 24; + + ReadExceptionHandlers ( + count, + ReadInt32, + ReadInt32); + } + + // inline ? + void ReadExceptionHandlers (int count, Func read_entry, Func read_length) + { + for (int i = 0; i < count; i++) { + var handler = new ExceptionHandler ( + (ExceptionHandlerType) (read_entry () & 0x7)); + + handler.TryStart = GetInstruction (read_entry ()); + handler.TryEnd = GetInstruction (handler.TryStart.Offset + read_length ()); + + handler.HandlerStart = GetInstruction (read_entry ()); + handler.HandlerEnd = GetInstruction (handler.HandlerStart.Offset + read_length ()); + + ReadExceptionHandlerSpecific (handler); + + this.body.ExceptionHandlers.Add (handler); + } + } + + void ReadExceptionHandlerSpecific (ExceptionHandler handler) + { + switch (handler.HandlerType) { + case ExceptionHandlerType.Catch: + handler.CatchType = (TypeReference) reader.LookupToken (ReadToken ()); + break; + case ExceptionHandlerType.Filter: + handler.FilterStart = GetInstruction (ReadInt32 ()); + break; + default: + Advance (4); + break; + } + } + + public MetadataToken ReadToken () + { + return new MetadataToken (ReadUInt32 ()); + } + + void ReadDebugInfo () + { + if (method.debug_info.sequence_points != null) + ReadSequencePoints (); + + if (method.debug_info.scope != null) + ReadScope (method.debug_info.scope); + + if (method.custom_infos != null) + ReadCustomDebugInformations (method); + } + + void ReadCustomDebugInformations (MethodDefinition method) + { + var custom_infos = method.custom_infos; + + for (int i = 0; i < custom_infos.Count; i++) { + var state_machine_scope = custom_infos [i] as StateMachineScopeDebugInformation; + if (state_machine_scope != null) + ReadStateMachineScope (state_machine_scope); + + var async_method = custom_infos [i] as AsyncMethodBodyDebugInformation; + if (async_method != null) + ReadAsyncMethodBody (async_method); + } + } + + void ReadAsyncMethodBody (AsyncMethodBodyDebugInformation async_method) + { + if (async_method.catch_handler.Offset > -1) + async_method.catch_handler = new InstructionOffset (GetInstruction (async_method.catch_handler.Offset)); + + if (!async_method.yields.IsNullOrEmpty ()) + for (int i = 0; i < async_method.yields.Count; i++) + async_method.yields [i] = new InstructionOffset (GetInstruction (async_method.yields [i].Offset)); + + if (!async_method.resumes.IsNullOrEmpty ()) + for (int i = 0; i < async_method.resumes.Count; i++) + async_method.resumes [i] = new InstructionOffset (GetInstruction (async_method.resumes [i].Offset)); + } + + void ReadStateMachineScope (StateMachineScopeDebugInformation state_machine_scope) + { + if (state_machine_scope.scopes.IsNullOrEmpty ()) + return; + + foreach (var scope in state_machine_scope.scopes) { + scope.start = new InstructionOffset (GetInstruction (scope.start.Offset)); + + var end_instruction = GetInstruction (scope.end.Offset); + scope.end = end_instruction == null + ? new InstructionOffset () + : new InstructionOffset (end_instruction); + } + } + + void ReadSequencePoints () + { + var symbol = method.debug_info; + + for (int i = 0; i < symbol.sequence_points.Count; i++) { + var sequence_point = symbol.sequence_points [i]; + var instruction = GetInstruction (sequence_point.Offset); + if (instruction != null) + sequence_point.offset = new InstructionOffset (instruction); + } + } + + void ReadScopes (Collection scopes) + { + for (int i = 0; i < scopes.Count; i++) + ReadScope (scopes [i]); + } + + void ReadScope (ScopeDebugInformation scope) + { + var start_instruction = GetInstruction (scope.Start.Offset); + if (start_instruction != null) + scope.Start = new InstructionOffset (start_instruction); + + var end_instruction = GetInstruction (scope.End.Offset); + scope.End = end_instruction != null + ? new InstructionOffset (end_instruction) + : new InstructionOffset (); + + if (!scope.variables.IsNullOrEmpty ()) { + for (int i = 0; i < scope.variables.Count; i++) { + var variable_info = scope.variables [i]; + var variable = GetVariable (variable_info.Index); + if (variable != null) + variable_info.index = new VariableIndex (variable); + } + } + + if (!scope.scopes.IsNullOrEmpty ()) + ReadScopes (scope.scopes); + } + +#if !READ_ONLY + + public ByteBuffer PatchRawMethodBody (MethodDefinition method, CodeWriter writer, out int code_size, out MetadataToken local_var_token) + { + var position = MoveTo (method); + + var buffer = new ByteBuffer (); + + var flags = ReadByte (); + + switch (flags & 0x3) { + case 0x2: // tiny + buffer.WriteByte (flags); + local_var_token = MetadataToken.Zero; + code_size = flags >> 2; + PatchRawCode (buffer, code_size, writer); + break; + case 0x3: // fat + Advance (-1); + PatchRawFatMethod (buffer, writer, out code_size, out local_var_token); + break; + default: + throw new NotSupportedException (); + } + + MoveBackTo (position); + + return buffer; + } + + void PatchRawFatMethod (ByteBuffer buffer, CodeWriter writer, out int code_size, out MetadataToken local_var_token) + { + var flags = ReadUInt16 (); + buffer.WriteUInt16 (flags); + buffer.WriteUInt16 (ReadUInt16 ()); + code_size = ReadInt32 (); + buffer.WriteInt32 (code_size); + local_var_token = ReadToken (); + + if (local_var_token.RID > 0) { + var variables = ReadVariables (local_var_token); + buffer.WriteUInt32 (variables != null + ? writer.GetStandAloneSignature (variables).ToUInt32 () + : 0); + } else + buffer.WriteUInt32 (0); + + PatchRawCode (buffer, code_size, writer); + + if ((flags & 0x8) != 0) + PatchRawSection (buffer, writer.metadata); + } + + void PatchRawCode (ByteBuffer buffer, int code_size, CodeWriter writer) + { + var metadata = writer.metadata; + buffer.WriteBytes (ReadBytes (code_size)); + var end = buffer.position; + buffer.position -= code_size; + + while (buffer.position < end) { + OpCode opcode; + var il_opcode = buffer.ReadByte (); + if (il_opcode != 0xfe) { + opcode = OpCodes.OneByteOpCode [il_opcode]; + } else { + var il_opcode2 = buffer.ReadByte (); + opcode = OpCodes.TwoBytesOpCode [il_opcode2]; + } + + switch (opcode.OperandType) { + case OperandType.ShortInlineI: + case OperandType.ShortInlineBrTarget: + case OperandType.ShortInlineVar: + case OperandType.ShortInlineArg: + buffer.position += 1; + break; + case OperandType.InlineVar: + case OperandType.InlineArg: + buffer.position += 2; + break; + case OperandType.InlineBrTarget: + case OperandType.ShortInlineR: + case OperandType.InlineI: + buffer.position += 4; + break; + case OperandType.InlineI8: + case OperandType.InlineR: + buffer.position += 8; + break; + case OperandType.InlineSwitch: + var length = buffer.ReadInt32 (); + buffer.position += length * 4; + break; + case OperandType.InlineString: + var @string = GetString (new MetadataToken (buffer.ReadUInt32 ())); + buffer.position -= 4; + buffer.WriteUInt32 ( + new MetadataToken ( + TokenType.String, + metadata.user_string_heap.GetStringIndex (@string)).ToUInt32 ()); + break; + case OperandType.InlineSig: + var call_site = GetCallSite (new MetadataToken (buffer.ReadUInt32 ())); + buffer.position -= 4; + buffer.WriteUInt32 (writer.GetStandAloneSignature (call_site).ToUInt32 ()); + break; + case OperandType.InlineTok: + case OperandType.InlineType: + case OperandType.InlineMethod: + case OperandType.InlineField: + var provider = reader.LookupToken (new MetadataToken (buffer.ReadUInt32 ())); + buffer.position -= 4; + buffer.WriteUInt32 (metadata.LookupToken (provider).ToUInt32 ()); + break; + } + } + } + + void PatchRawSection (ByteBuffer buffer, MetadataBuilder metadata) + { + var position = Position; + Align (4); + buffer.WriteBytes (Position - position); + + const byte fat_format = 0x40; + const byte more_sects = 0x80; + + var flags = ReadByte (); + if ((flags & fat_format) == 0) { + buffer.WriteByte (flags); + PatchRawSmallSection (buffer, metadata); + } else + PatchRawFatSection (buffer, metadata); + + if ((flags & more_sects) != 0) + PatchRawSection (buffer, metadata); + } + + void PatchRawSmallSection (ByteBuffer buffer, MetadataBuilder metadata) + { + var length = ReadByte (); + buffer.WriteByte (length); + Advance (2); + + buffer.WriteUInt16 (0); + + var count = length / 12; + + PatchRawExceptionHandlers (buffer, metadata, count, false); + } + + void PatchRawFatSection (ByteBuffer buffer, MetadataBuilder metadata) + { + Advance (-1); + var length = ReadInt32 (); + buffer.WriteInt32 (length); + + var count = (length >> 8) / 24; + + PatchRawExceptionHandlers (buffer, metadata, count, true); + } + + void PatchRawExceptionHandlers (ByteBuffer buffer, MetadataBuilder metadata, int count, bool fat_entry) + { + const int fat_entry_size = 16; + const int small_entry_size = 6; + + for (int i = 0; i < count; i++) { + ExceptionHandlerType handler_type; + if (fat_entry) { + var type = ReadUInt32 (); + handler_type = (ExceptionHandlerType) (type & 0x7); + buffer.WriteUInt32 (type); + } else { + var type = ReadUInt16 (); + handler_type = (ExceptionHandlerType) (type & 0x7); + buffer.WriteUInt16 (type); + } + + buffer.WriteBytes (ReadBytes (fat_entry ? fat_entry_size : small_entry_size)); + + switch (handler_type) { + case ExceptionHandlerType.Catch: + var exception = reader.LookupToken (ReadToken ()); + buffer.WriteUInt32 (metadata.LookupToken (exception).ToUInt32 ()); + break; + default: + buffer.WriteUInt32 (ReadUInt32 ()); + break; + } + } + } + +#endif + + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeReader.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeReader.cs.meta new file mode 100644 index 0000000..e4608af --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7d351a39cb8d97468d475b1a21f2b7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs new file mode 100644 index 0000000..2003f10 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs @@ -0,0 +1,659 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +using Mono.Collections.Generic; + +using Mono.Cecil.Metadata; +using Mono.Cecil.PE; + +using RVA = System.UInt32; + +#if !READ_ONLY + +namespace Mono.Cecil.Cil { + + sealed class CodeWriter : ByteBuffer { + + readonly RVA code_base; + internal readonly MetadataBuilder metadata; + readonly Dictionary standalone_signatures; + readonly Dictionary tiny_method_bodies; + + MethodBody body; + + public CodeWriter (MetadataBuilder metadata) + : base (0) + { + this.code_base = metadata.text_map.GetNextRVA (TextSegment.CLIHeader); + this.metadata = metadata; + this.standalone_signatures = new Dictionary (); + this.tiny_method_bodies = new Dictionary (new ByteBufferEqualityComparer ()); + } + + public RVA WriteMethodBody (MethodDefinition method) + { + RVA rva; + + if (IsUnresolved (method)) { + if (method.rva == 0) + return 0; + + rva = WriteUnresolvedMethodBody (method); + } else { + if (IsEmptyMethodBody (method.Body)) + return 0; + + rva = WriteResolvedMethodBody (method); + } + + return rva; + } + + static bool IsEmptyMethodBody (MethodBody body) + { + return body.instructions.IsNullOrEmpty () + && body.variables.IsNullOrEmpty (); + } + + static bool IsUnresolved (MethodDefinition method) + { + return method.HasBody && method.HasImage && method.body == null; + } + + RVA WriteUnresolvedMethodBody (MethodDefinition method) + { + var code_reader = metadata.module.reader.code; + + int code_size; + MetadataToken local_var_token; + var raw_body = code_reader.PatchRawMethodBody (method, this, out code_size, out local_var_token); + var fat_header = (raw_body.buffer [0] & 0x3) == 0x3; + if (fat_header) + Align (4); + + var rva = BeginMethod (); + + if (fat_header || !GetOrMapTinyMethodBody (raw_body, ref rva)) { + WriteBytes (raw_body); + } + + if (method.debug_info == null) + return rva; + + var symbol_writer = metadata.symbol_writer; + if (symbol_writer != null) { + method.debug_info.code_size = code_size; + method.debug_info.local_var_token = local_var_token; + symbol_writer.Write (method.debug_info); + } + + return rva; + } + + RVA WriteResolvedMethodBody(MethodDefinition method) + { + RVA rva; + + body = method.Body; + ComputeHeader (); + if (RequiresFatHeader ()) { + Align (4); + rva = BeginMethod (); + WriteFatHeader (); + WriteInstructions (); + + if (body.HasExceptionHandlers) + WriteExceptionHandlers (); + } else { + rva = BeginMethod (); + WriteByte ((byte) (0x2 | (body.CodeSize << 2))); // tiny + WriteInstructions (); + + var start_position = (int) (rva - code_base); + var body_size = position - start_position; + var body_bytes = new byte [body_size]; + + Array.Copy (buffer, start_position, body_bytes, 0, body_size); + + if (GetOrMapTinyMethodBody (new ByteBuffer (body_bytes), ref rva)) + position = start_position; + } + + var symbol_writer = metadata.symbol_writer; + if (symbol_writer != null && method.debug_info != null) { + method.debug_info.code_size = body.CodeSize; + method.debug_info.local_var_token = body.local_var_token; + symbol_writer.Write (method.debug_info); + } + + return rva; + } + + bool GetOrMapTinyMethodBody (ByteBuffer body, ref RVA rva) + { + RVA existing_rva; + if (tiny_method_bodies.TryGetValue (body, out existing_rva)) { + rva = existing_rva; + return true; + } + + tiny_method_bodies.Add (body, rva); + return false; + } + + void WriteFatHeader () + { + var body = this.body; + byte flags = 0x3; // fat + if (body.InitLocals) + flags |= 0x10; // init locals + if (body.HasExceptionHandlers) + flags |= 0x8; // more sections + + WriteByte (flags); + WriteByte (0x30); + WriteInt16 ((short) body.max_stack_size); + WriteInt32 (body.code_size); + body.local_var_token = body.HasVariables + ? GetStandAloneSignature (body.Variables) + : MetadataToken.Zero; + WriteMetadataToken (body.local_var_token); + } + + void WriteInstructions () + { + var instructions = body.Instructions; + var items = instructions.items; + var size = instructions.size; + + for (int i = 0; i < size; i++) { + var instruction = items [i]; + WriteOpCode (instruction.opcode); + WriteOperand (instruction); + } + } + + void WriteOpCode (OpCode opcode) + { + if (opcode.Size == 1) { + WriteByte (opcode.Op2); + } else { + WriteByte (opcode.Op1); + WriteByte (opcode.Op2); + } + } + + void WriteOperand (Instruction instruction) + { + var opcode = instruction.opcode; + var operand_type = opcode.OperandType; + if (operand_type == OperandType.InlineNone) + return; + + var operand = instruction.operand; + if (operand == null && !(operand_type == OperandType.InlineBrTarget || operand_type == OperandType.ShortInlineBrTarget)) { + throw new ArgumentException (); + } + + switch (operand_type) { + case OperandType.InlineSwitch: { + var targets = (Instruction []) operand; + WriteInt32 (targets.Length); + var diff = instruction.Offset + opcode.Size + (4 * (targets.Length + 1)); + for (int i = 0; i < targets.Length; i++) + WriteInt32 (GetTargetOffset (targets [i]) - diff); + break; + } + case OperandType.ShortInlineBrTarget: { + var target = (Instruction) operand; + var offset = target != null ? GetTargetOffset (target) : body.code_size; + WriteSByte ((sbyte) (offset - (instruction.Offset + opcode.Size + 1))); + break; + } + case OperandType.InlineBrTarget: { + var target = (Instruction) operand; + var offset = target != null ? GetTargetOffset (target) : body.code_size; + WriteInt32 (offset - (instruction.Offset + opcode.Size + 4)); + break; + } + case OperandType.ShortInlineVar: + WriteByte ((byte) GetVariableIndex ((VariableDefinition) operand)); + break; + case OperandType.ShortInlineArg: + WriteByte ((byte) GetParameterIndex ((ParameterDefinition) operand)); + break; + case OperandType.InlineVar: + WriteInt16 ((short) GetVariableIndex ((VariableDefinition) operand)); + break; + case OperandType.InlineArg: + WriteInt16 ((short) GetParameterIndex ((ParameterDefinition) operand)); + break; + case OperandType.InlineSig: + WriteMetadataToken (GetStandAloneSignature ((CallSite) operand)); + break; + case OperandType.ShortInlineI: + if (opcode == OpCodes.Ldc_I4_S) + WriteSByte ((sbyte) operand); + else + WriteByte ((byte) operand); + break; + case OperandType.InlineI: + WriteInt32 ((int) operand); + break; + case OperandType.InlineI8: + WriteInt64 ((long) operand); + break; + case OperandType.ShortInlineR: + WriteSingle ((float) operand); + break; + case OperandType.InlineR: + WriteDouble ((double) operand); + break; + case OperandType.InlineString: + WriteMetadataToken ( + new MetadataToken ( + TokenType.String, + GetUserStringIndex ((string) operand))); + break; + case OperandType.InlineType: + case OperandType.InlineField: + case OperandType.InlineMethod: + case OperandType.InlineTok: + WriteMetadataToken (metadata.LookupToken ((IMetadataTokenProvider) operand)); + break; + default: + throw new ArgumentException (); + } + } + + int GetTargetOffset (Instruction instruction) + { + if (instruction == null) { + var last = body.instructions [body.instructions.size - 1]; + return last.offset + last.GetSize (); + } + + return instruction.offset; + } + + uint GetUserStringIndex (string @string) + { + if (@string == null) + return 0; + + return metadata.user_string_heap.GetStringIndex (@string); + } + + static int GetVariableIndex (VariableDefinition variable) + { + return variable.Index; + } + + int GetParameterIndex (ParameterDefinition parameter) + { + if (body.method.HasThis) { + if (parameter == body.this_parameter) + return 0; + + return parameter.Index + 1; + } + + return parameter.Index; + } + + bool RequiresFatHeader () + { + var body = this.body; + return body.CodeSize >= 64 + || body.InitLocals + || body.HasVariables + || body.HasExceptionHandlers + || body.MaxStackSize > 8; + } + + void ComputeHeader () + { + int offset = 0; + var instructions = body.instructions; + var items = instructions.items; + var count = instructions.size; + var stack_size = 0; + var max_stack = 0; + Dictionary stack_sizes = null; + + if (body.HasExceptionHandlers) + ComputeExceptionHandlerStackSize (ref stack_sizes); + + for (int i = 0; i < count; i++) { + var instruction = items [i]; + instruction.offset = offset; + offset += instruction.GetSize (); + + ComputeStackSize (instruction, ref stack_sizes, ref stack_size, ref max_stack); + } + + body.code_size = offset; + body.max_stack_size = max_stack; + } + + void ComputeExceptionHandlerStackSize (ref Dictionary stack_sizes) + { + var exception_handlers = body.ExceptionHandlers; + + for (int i = 0; i < exception_handlers.Count; i++) { + var exception_handler = exception_handlers [i]; + + switch (exception_handler.HandlerType) { + case ExceptionHandlerType.Catch: + AddExceptionStackSize (exception_handler.HandlerStart, ref stack_sizes); + break; + case ExceptionHandlerType.Filter: + AddExceptionStackSize (exception_handler.FilterStart, ref stack_sizes); + AddExceptionStackSize (exception_handler.HandlerStart, ref stack_sizes); + break; + } + } + } + + static void AddExceptionStackSize (Instruction handler_start, ref Dictionary stack_sizes) + { + if (handler_start == null) + return; + + if (stack_sizes == null) + stack_sizes = new Dictionary (); + + stack_sizes [handler_start] = 1; + } + + static void ComputeStackSize (Instruction instruction, ref Dictionary stack_sizes, ref int stack_size, ref int max_stack) + { + int computed_size; + if (stack_sizes != null && stack_sizes.TryGetValue (instruction, out computed_size)) + stack_size = computed_size; + + max_stack = System.Math.Max (max_stack, stack_size); + ComputeStackDelta (instruction, ref stack_size); + max_stack = System.Math.Max (max_stack, stack_size); + + CopyBranchStackSize (instruction, ref stack_sizes, stack_size); + ComputeStackSize (instruction, ref stack_size); + } + + static void CopyBranchStackSize (Instruction instruction, ref Dictionary stack_sizes, int stack_size) + { + if (stack_size == 0) + return; + + switch (instruction.opcode.OperandType) { + case OperandType.ShortInlineBrTarget: + case OperandType.InlineBrTarget: + CopyBranchStackSize (ref stack_sizes, (Instruction) instruction.operand, stack_size); + break; + case OperandType.InlineSwitch: + var targets = (Instruction []) instruction.operand; + for (int i = 0; i < targets.Length; i++) + CopyBranchStackSize (ref stack_sizes, targets [i], stack_size); + break; + } + } + + static void CopyBranchStackSize (ref Dictionary stack_sizes, Instruction target, int stack_size) + { + if (stack_sizes == null) + stack_sizes = new Dictionary (); + + int branch_stack_size = stack_size; + + int computed_size; + if (stack_sizes.TryGetValue (target, out computed_size)) + branch_stack_size = System.Math.Max (branch_stack_size, computed_size); + + stack_sizes [target] = branch_stack_size; + } + + static void ComputeStackSize (Instruction instruction, ref int stack_size) + { + switch (instruction.opcode.FlowControl) { + case FlowControl.Branch: + case FlowControl.Break: + case FlowControl.Throw: + case FlowControl.Return: + stack_size = 0; + break; + } + } + + static void ComputeStackDelta (Instruction instruction, ref int stack_size) + { + switch (instruction.opcode.FlowControl) { + case FlowControl.Call: { + var method = (IMethodSignature) instruction.operand; + // pop 'this' argument + if (method.HasImplicitThis() && instruction.opcode.Code != Code.Newobj) + stack_size--; + // pop normal arguments + if (method.HasParameters) + stack_size -= method.Parameters.Count; + // pop function pointer + if (instruction.opcode.Code == Code.Calli) + stack_size--; + // push return value + if (method.ReturnType.etype != ElementType.Void || instruction.opcode.Code == Code.Newobj) + stack_size++; + break; + } + default: + ComputePopDelta (instruction.opcode.StackBehaviourPop, ref stack_size); + ComputePushDelta (instruction.opcode.StackBehaviourPush, ref stack_size); + break; + } + } + + static void ComputePopDelta (StackBehaviour pop_behavior, ref int stack_size) + { + switch (pop_behavior) { + case StackBehaviour.Popi: + case StackBehaviour.Popref: + case StackBehaviour.Pop1: + stack_size--; + break; + case StackBehaviour.Pop1_pop1: + case StackBehaviour.Popi_pop1: + case StackBehaviour.Popi_popi: + case StackBehaviour.Popi_popi8: + case StackBehaviour.Popi_popr4: + case StackBehaviour.Popi_popr8: + case StackBehaviour.Popref_pop1: + case StackBehaviour.Popref_popi: + stack_size -= 2; + break; + case StackBehaviour.Popi_popi_popi: + case StackBehaviour.Popref_popi_popi: + case StackBehaviour.Popref_popi_popi8: + case StackBehaviour.Popref_popi_popr4: + case StackBehaviour.Popref_popi_popr8: + case StackBehaviour.Popref_popi_popref: + stack_size -= 3; + break; + case StackBehaviour.PopAll: + stack_size = 0; + break; + } + } + + static void ComputePushDelta (StackBehaviour push_behaviour, ref int stack_size) + { + switch (push_behaviour) { + case StackBehaviour.Push1: + case StackBehaviour.Pushi: + case StackBehaviour.Pushi8: + case StackBehaviour.Pushr4: + case StackBehaviour.Pushr8: + case StackBehaviour.Pushref: + stack_size++; + break; + case StackBehaviour.Push1_push1: + stack_size += 2; + break; + } + } + + void WriteExceptionHandlers () + { + Align (4); + + var handlers = body.ExceptionHandlers; + + if (handlers.Count < 0x15 && !RequiresFatSection (handlers)) + WriteSmallSection (handlers); + else + WriteFatSection (handlers); + } + + static bool RequiresFatSection (Collection handlers) + { + for (int i = 0; i < handlers.Count; i++) { + var handler = handlers [i]; + + if (IsFatRange (handler.TryStart, handler.TryEnd)) + return true; + + if (IsFatRange (handler.HandlerStart, handler.HandlerEnd)) + return true; + + if (handler.HandlerType == ExceptionHandlerType.Filter + && IsFatRange (handler.FilterStart, handler.HandlerStart)) + return true; + } + + return false; + } + + static bool IsFatRange (Instruction start, Instruction end) + { + if (start == null) + throw new ArgumentException (); + + if (end == null) + return true; + + return end.Offset - start.Offset > 255 || start.Offset > 65535; + } + + void WriteSmallSection (Collection handlers) + { + const byte eh_table = 0x1; + + WriteByte (eh_table); + WriteByte ((byte) (handlers.Count * 12 + 4)); + WriteBytes (2); + + WriteExceptionHandlers ( + handlers, + i => WriteUInt16 ((ushort) i), + i => WriteByte ((byte) i)); + } + + void WriteFatSection (Collection handlers) + { + const byte eh_table = 0x1; + const byte fat_format = 0x40; + + WriteByte (eh_table | fat_format); + + int size = handlers.Count * 24 + 4; + WriteByte ((byte) (size & 0xff)); + WriteByte ((byte) ((size >> 8) & 0xff)); + WriteByte ((byte) ((size >> 16) & 0xff)); + + WriteExceptionHandlers (handlers, WriteInt32, WriteInt32); + } + + void WriteExceptionHandlers (Collection handlers, Action write_entry, Action write_length) + { + for (int i = 0; i < handlers.Count; i++) { + var handler = handlers [i]; + + write_entry ((int) handler.HandlerType); + + write_entry (handler.TryStart.Offset); + write_length (GetTargetOffset (handler.TryEnd) - handler.TryStart.Offset); + + write_entry (handler.HandlerStart.Offset); + write_length (GetTargetOffset (handler.HandlerEnd) - handler.HandlerStart.Offset); + + WriteExceptionHandlerSpecific (handler); + } + } + + void WriteExceptionHandlerSpecific (ExceptionHandler handler) + { + switch (handler.HandlerType) { + case ExceptionHandlerType.Catch: + WriteMetadataToken (metadata.LookupToken (handler.CatchType)); + break; + case ExceptionHandlerType.Filter: + WriteInt32 (handler.FilterStart.Offset); + break; + default: + WriteInt32 (0); + break; + } + } + + public MetadataToken GetStandAloneSignature (Collection variables) + { + var signature = metadata.GetLocalVariableBlobIndex (variables); + + return GetStandAloneSignatureToken (signature); + } + + public MetadataToken GetStandAloneSignature (CallSite call_site) + { + var signature = metadata.GetCallSiteBlobIndex (call_site); + var token = GetStandAloneSignatureToken (signature); + call_site.MetadataToken = token; + return token; + } + + MetadataToken GetStandAloneSignatureToken (uint signature) + { + MetadataToken token; + if (standalone_signatures.TryGetValue (signature, out token)) + return token; + + token = new MetadataToken (TokenType.Signature, metadata.AddStandAloneSignature (signature)); + standalone_signatures.Add (signature, token); + return token; + } + + RVA BeginMethod () + { + return (RVA)(code_base + position); + } + + void WriteMetadataToken (MetadataToken token) + { + WriteUInt32 (token.ToUInt32 ()); + } + + void Align (int align) + { + align--; + WriteBytes (((position + align) & ~align) - position); + } + } +} + +#endif diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs.meta new file mode 100644 index 0000000..03f6b4c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/CodeWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed80d9cb3fd6d2147b4fac0d0bb59b2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs new file mode 100644 index 0000000..03d3ec3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs @@ -0,0 +1,123 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil.Cil { + + public enum DocumentType { + Other, + Text, + } + + public enum DocumentHashAlgorithm { + None, + MD5, + SHA1, + SHA256, + } + + public enum DocumentLanguage { + Other, + C, + Cpp, + CSharp, + Basic, + Java, + Cobol, + Pascal, + Cil, + JScript, + Smc, + MCpp, + FSharp, + } + + public enum DocumentLanguageVendor { + Other, + Microsoft, + } + + public sealed class Document : DebugInformation { + + string url; + + Guid type; + Guid hash_algorithm; + Guid language; + Guid language_vendor; + + byte [] hash; + byte [] embedded_source; + + public string Url { + get { return url; } + set { url = value; } + } + + public DocumentType Type { + get { return type.ToType (); } + set { type = value.ToGuid (); } + } + + public Guid TypeGuid { + get { return type; } + set { type = value; } + } + + public DocumentHashAlgorithm HashAlgorithm { + get { return hash_algorithm.ToHashAlgorithm (); } + set { hash_algorithm = value.ToGuid (); } + } + + public Guid HashAlgorithmGuid { + get { return hash_algorithm; } + set { hash_algorithm = value; } + } + + public DocumentLanguage Language { + get { return language.ToLanguage (); } + set { language = value.ToGuid (); } + } + + public Guid LanguageGuid { + get { return language; } + set { language = value; } + } + + public DocumentLanguageVendor LanguageVendor { + get { return language_vendor.ToVendor (); } + set { language_vendor = value.ToGuid (); } + } + + public Guid LanguageVendorGuid { + get { return language_vendor; } + set { language_vendor = value; } + } + + public byte [] Hash { + get { return hash; } + set { hash = value; } + } + + public byte[] EmbeddedSource { + get { return embedded_source; } + set { embedded_source = value; } + } + + public Document (string url) + { + this.url = url; + this.hash = Empty.Array; + this.embedded_source = Empty.Array; + this.token = new MetadataToken (TokenType.Document); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs.meta new file mode 100644 index 0000000..77f07c0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Document.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21df15ff9b4f04245907a56bad14e35f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs new file mode 100644 index 0000000..6bdb1aa --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs @@ -0,0 +1,71 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Cil { + + public enum ExceptionHandlerType { + Catch = 0, + Filter = 1, + Finally = 2, + Fault = 4, + } + + public sealed class ExceptionHandler { + + Instruction try_start; + Instruction try_end; + Instruction filter_start; + Instruction handler_start; + Instruction handler_end; + + TypeReference catch_type; + ExceptionHandlerType handler_type; + + public Instruction TryStart { + get { return try_start; } + set { try_start = value; } + } + + public Instruction TryEnd { + get { return try_end; } + set { try_end = value; } + } + + public Instruction FilterStart { + get { return filter_start; } + set { filter_start = value; } + } + + public Instruction HandlerStart { + get { return handler_start; } + set { handler_start = value; } + } + + public Instruction HandlerEnd { + get { return handler_end; } + set { handler_end = value; } + } + + public TypeReference CatchType { + get { return catch_type; } + set { catch_type = value; } + } + + public ExceptionHandlerType HandlerType { + get { return handler_type; } + set { handler_type = value; } + } + + public ExceptionHandler (ExceptionHandlerType handlerType) + { + this.handler_type = handlerType; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs.meta new file mode 100644 index 0000000..8e63c69 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ExceptionHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7181fc5476592648b10f96a9f43544a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs new file mode 100644 index 0000000..039d2fc --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs @@ -0,0 +1,260 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +namespace Mono.Cecil.Cil { + + public sealed class ILProcessor { + + readonly MethodBody body; + readonly Collection instructions; + + public MethodBody Body { + get { return body; } + } + + internal ILProcessor (MethodBody body) + { + this.body = body; + this.instructions = body.Instructions; + } + + public Instruction Create (OpCode opcode) + { + return Instruction.Create (opcode); + } + + public Instruction Create (OpCode opcode, TypeReference type) + { + return Instruction.Create (opcode, type); + } + + public Instruction Create (OpCode opcode, CallSite site) + { + return Instruction.Create (opcode, site); + } + + public Instruction Create (OpCode opcode, MethodReference method) + { + return Instruction.Create (opcode, method); + } + + public Instruction Create (OpCode opcode, FieldReference field) + { + return Instruction.Create (opcode, field); + } + + public Instruction Create (OpCode opcode, string value) + { + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, sbyte value) + { + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, byte value) + { + if (opcode.OperandType == OperandType.ShortInlineVar) + return Instruction.Create (opcode, body.Variables [value]); + + if (opcode.OperandType == OperandType.ShortInlineArg) + return Instruction.Create (opcode, body.GetParameter (value)); + + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, int value) + { + if (opcode.OperandType == OperandType.InlineVar) + return Instruction.Create (opcode, body.Variables [value]); + + if (opcode.OperandType == OperandType.InlineArg) + return Instruction.Create (opcode, body.GetParameter (value)); + + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, long value) + { + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, float value) + { + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, double value) + { + return Instruction.Create (opcode, value); + } + + public Instruction Create (OpCode opcode, Instruction target) + { + return Instruction.Create (opcode, target); + } + + public Instruction Create (OpCode opcode, Instruction [] targets) + { + return Instruction.Create (opcode, targets); + } + + public Instruction Create (OpCode opcode, VariableDefinition variable) + { + return Instruction.Create (opcode, variable); + } + + public Instruction Create (OpCode opcode, ParameterDefinition parameter) + { + return Instruction.Create (opcode, parameter); + } + + public void Emit (OpCode opcode) + { + Append (Create (opcode)); + } + + public void Emit (OpCode opcode, TypeReference type) + { + Append (Create (opcode, type)); + } + + public void Emit (OpCode opcode, MethodReference method) + { + Append (Create (opcode, method)); + } + + public void Emit (OpCode opcode, CallSite site) + { + Append (Create (opcode, site)); + } + + public void Emit (OpCode opcode, FieldReference field) + { + Append (Create (opcode, field)); + } + + public void Emit (OpCode opcode, string value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, byte value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, sbyte value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, int value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, long value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, float value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, double value) + { + Append (Create (opcode, value)); + } + + public void Emit (OpCode opcode, Instruction target) + { + Append (Create (opcode, target)); + } + + public void Emit (OpCode opcode, Instruction [] targets) + { + Append (Create (opcode, targets)); + } + + public void Emit (OpCode opcode, VariableDefinition variable) + { + Append (Create (opcode, variable)); + } + + public void Emit (OpCode opcode, ParameterDefinition parameter) + { + Append (Create (opcode, parameter)); + } + + public void InsertBefore (Instruction target, Instruction instruction) + { + if (target == null) + throw new ArgumentNullException ("target"); + if (instruction == null) + throw new ArgumentNullException ("instruction"); + + var index = instructions.IndexOf (target); + if (index == -1) + throw new ArgumentOutOfRangeException ("target"); + + instructions.Insert (index, instruction); + } + + public void InsertAfter (Instruction target, Instruction instruction) + { + if (target == null) + throw new ArgumentNullException ("target"); + if (instruction == null) + throw new ArgumentNullException ("instruction"); + + var index = instructions.IndexOf (target); + if (index == -1) + throw new ArgumentOutOfRangeException ("target"); + + instructions.Insert (index + 1, instruction); + } + + public void Append (Instruction instruction) + { + if (instruction == null) + throw new ArgumentNullException ("instruction"); + + instructions.Add (instruction); + } + + public void Replace (Instruction target, Instruction instruction) + { + if (target == null) + throw new ArgumentNullException ("target"); + if (instruction == null) + throw new ArgumentNullException ("instruction"); + + InsertAfter (target, instruction); + Remove (target); + } + + public void Remove (Instruction instruction) + { + if (instruction == null) + throw new ArgumentNullException ("instruction"); + + if (!instructions.Remove (instruction)) + throw new ArgumentOutOfRangeException ("instruction"); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs.meta new file mode 100644 index 0000000..18df2c7 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/ILProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6560e93b55a82e943b3f7abc78c022f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs new file mode 100644 index 0000000..5fb3604 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs @@ -0,0 +1,296 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; + +namespace Mono.Cecil.Cil { + + public sealed class Instruction { + + internal int offset; + internal OpCode opcode; + internal object operand; + + internal Instruction previous; + internal Instruction next; + + public int Offset { + get { return offset; } + set { offset = value; } + } + + public OpCode OpCode { + get { return opcode; } + set { opcode = value; } + } + + public object Operand { + get { return operand; } + set { operand = value; } + } + + public Instruction Previous { + get { return previous; } + set { previous = value; } + } + + public Instruction Next { + get { return next; } + set { next = value; } + } + + internal Instruction (int offset, OpCode opCode) + { + this.offset = offset; + this.opcode = opCode; + } + + internal Instruction (OpCode opcode, object operand) + { + this.opcode = opcode; + this.operand = operand; + } + + public int GetSize () + { + int size = opcode.Size; + + switch (opcode.OperandType) { + case OperandType.InlineSwitch: + return size + (1 + ((Instruction []) operand).Length) * 4; + case OperandType.InlineI8: + case OperandType.InlineR: + return size + 8; + case OperandType.InlineBrTarget: + case OperandType.InlineField: + case OperandType.InlineI: + case OperandType.InlineMethod: + case OperandType.InlineString: + case OperandType.InlineTok: + case OperandType.InlineType: + case OperandType.ShortInlineR: + case OperandType.InlineSig: + return size + 4; + case OperandType.InlineArg: + case OperandType.InlineVar: + return size + 2; + case OperandType.ShortInlineBrTarget: + case OperandType.ShortInlineI: + case OperandType.ShortInlineArg: + case OperandType.ShortInlineVar: + return size + 1; + default: + return size; + } + } + + public override string ToString () + { + var instruction = new StringBuilder (); + + AppendLabel (instruction, this); + instruction.Append (':'); + instruction.Append (' '); + instruction.Append (opcode.Name); + + if (operand == null) + return instruction.ToString (); + + instruction.Append (' '); + + switch (opcode.OperandType) { + case OperandType.ShortInlineBrTarget: + case OperandType.InlineBrTarget: + AppendLabel (instruction, (Instruction) operand); + break; + case OperandType.InlineSwitch: + var labels = (Instruction []) operand; + for (int i = 0; i < labels.Length; i++) { + if (i > 0) + instruction.Append (','); + + AppendLabel (instruction, labels [i]); + } + break; + case OperandType.InlineString: + instruction.Append ('\"'); + instruction.Append (operand); + instruction.Append ('\"'); + break; + default: + instruction.Append (operand); + break; + } + + return instruction.ToString (); + } + + static void AppendLabel (StringBuilder builder, Instruction instruction) + { + builder.Append ("IL_"); + builder.Append (instruction.offset.ToString ("x4")); + } + + public static Instruction Create (OpCode opcode) + { + if (opcode.OperandType != OperandType.InlineNone) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, null); + } + + public static Instruction Create (OpCode opcode, TypeReference type) + { + if (type == null) + throw new ArgumentNullException ("type"); + if (opcode.OperandType != OperandType.InlineType && + opcode.OperandType != OperandType.InlineTok) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, type); + } + + public static Instruction Create (OpCode opcode, CallSite site) + { + if (site == null) + throw new ArgumentNullException ("site"); + if (opcode.Code != Code.Calli) + throw new ArgumentException ("code"); + + return new Instruction (opcode, site); + } + + public static Instruction Create (OpCode opcode, MethodReference method) + { + if (method == null) + throw new ArgumentNullException ("method"); + if (opcode.OperandType != OperandType.InlineMethod && + opcode.OperandType != OperandType.InlineTok) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, method); + } + + public static Instruction Create (OpCode opcode, FieldReference field) + { + if (field == null) + throw new ArgumentNullException ("field"); + if (opcode.OperandType != OperandType.InlineField && + opcode.OperandType != OperandType.InlineTok) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, field); + } + + public static Instruction Create (OpCode opcode, string value) + { + if (value == null) + throw new ArgumentNullException ("value"); + if (opcode.OperandType != OperandType.InlineString) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, sbyte value) + { + if (opcode.OperandType != OperandType.ShortInlineI && + opcode != OpCodes.Ldc_I4_S) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, byte value) + { + if (opcode.OperandType != OperandType.ShortInlineI || + opcode == OpCodes.Ldc_I4_S) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, int value) + { + if (opcode.OperandType != OperandType.InlineI) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, long value) + { + if (opcode.OperandType != OperandType.InlineI8) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, float value) + { + if (opcode.OperandType != OperandType.ShortInlineR) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, double value) + { + if (opcode.OperandType != OperandType.InlineR) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, value); + } + + public static Instruction Create (OpCode opcode, Instruction target) + { + if (target == null) + throw new ArgumentNullException ("target"); + if (opcode.OperandType != OperandType.InlineBrTarget && + opcode.OperandType != OperandType.ShortInlineBrTarget) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, target); + } + + public static Instruction Create (OpCode opcode, Instruction [] targets) + { + if (targets == null) + throw new ArgumentNullException ("targets"); + if (opcode.OperandType != OperandType.InlineSwitch) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, targets); + } + + public static Instruction Create (OpCode opcode, VariableDefinition variable) + { + if (variable == null) + throw new ArgumentNullException ("variable"); + if (opcode.OperandType != OperandType.ShortInlineVar && + opcode.OperandType != OperandType.InlineVar) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, variable); + } + + public static Instruction Create (OpCode opcode, ParameterDefinition parameter) + { + if (parameter == null) + throw new ArgumentNullException ("parameter"); + if (opcode.OperandType != OperandType.ShortInlineArg && + opcode.OperandType != OperandType.InlineArg) + throw new ArgumentException ("opcode"); + + return new Instruction (opcode, parameter); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs.meta new file mode 100644 index 0000000..bd17a4e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Instruction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bc50072bd8fb8140bfde4ec3b5060af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs new file mode 100644 index 0000000..eb8baf5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs @@ -0,0 +1,248 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Threading; + +using Mono.Collections.Generic; + +namespace Mono.Cecil.Cil { + + public sealed class MethodBody { + + readonly internal MethodDefinition method; + + internal ParameterDefinition this_parameter; + internal int max_stack_size; + internal int code_size; + internal bool init_locals; + internal MetadataToken local_var_token; + + internal Collection instructions; + internal Collection exceptions; + internal Collection variables; + + public MethodDefinition Method { + get { return method; } + } + + public int MaxStackSize { + get { return max_stack_size; } + set { max_stack_size = value; } + } + + public int CodeSize { + get { return code_size; } + } + + public bool InitLocals { + get { return init_locals; } + set { init_locals = value; } + } + + public MetadataToken LocalVarToken { + get { return local_var_token; } + set { local_var_token = value; } + } + + public Collection Instructions { + get { return instructions ?? (instructions = new InstructionCollection (method)); } + } + + public bool HasExceptionHandlers { + get { return !exceptions.IsNullOrEmpty (); } + } + + public Collection ExceptionHandlers { + get { return exceptions ?? (exceptions = new Collection ()); } + } + + public bool HasVariables { + get { return !variables.IsNullOrEmpty (); } + } + + public Collection Variables { + get { return variables ?? (variables = new VariableDefinitionCollection ()); } + } + + public ParameterDefinition ThisParameter { + get { + if (method == null || method.DeclaringType == null) + throw new NotSupportedException (); + + if (!method.HasThis) + return null; + + if (this_parameter == null) + Interlocked.CompareExchange (ref this_parameter, CreateThisParameter (method), null); + + return this_parameter; + } + } + + static ParameterDefinition CreateThisParameter (MethodDefinition method) + { + var parameter_type = method.DeclaringType as TypeReference; + + if (parameter_type.HasGenericParameters) { + var instance = new GenericInstanceType (parameter_type); + for (int i = 0; i < parameter_type.GenericParameters.Count; i++) + instance.GenericArguments.Add (parameter_type.GenericParameters [i]); + + parameter_type = instance; + + } + + if (parameter_type.IsValueType || parameter_type.IsPrimitive) + parameter_type = new ByReferenceType (parameter_type); + + return new ParameterDefinition (parameter_type, method); + } + + public MethodBody (MethodDefinition method) + { + this.method = method; + } + + public ILProcessor GetILProcessor () + { + return new ILProcessor (this); + } + } + + sealed class VariableDefinitionCollection : Collection { + + internal VariableDefinitionCollection () + { + } + + internal VariableDefinitionCollection (int capacity) + : base (capacity) + { + } + + protected override void OnAdd (VariableDefinition item, int index) + { + item.index = index; + } + + protected override void OnInsert (VariableDefinition item, int index) + { + item.index = index; + + for (int i = index; i < size; i++) + items [i].index = i + 1; + } + + protected override void OnSet (VariableDefinition item, int index) + { + item.index = index; + } + + protected override void OnRemove (VariableDefinition item, int index) + { + item.index = -1; + + for (int i = index + 1; i < size; i++) + items [i].index = i - 1; + } + } + + class InstructionCollection : Collection { + + readonly MethodDefinition method; + + internal InstructionCollection (MethodDefinition method) + { + this.method = method; + } + + internal InstructionCollection (MethodDefinition method, int capacity) + : base (capacity) + { + this.method = method; + } + + protected override void OnAdd (Instruction item, int index) + { + if (index == 0) + return; + + var previous = items [index - 1]; + previous.next = item; + item.previous = previous; + } + + protected override void OnInsert (Instruction item, int index) + { + if (size == 0) + return; + + var current = items [index]; + if (current == null) { + var last = items [index - 1]; + last.next = item; + item.previous = last; + return; + } + + var previous = current.previous; + if (previous != null) { + previous.next = item; + item.previous = previous; + } + + current.previous = item; + item.next = current; + } + + protected override void OnSet (Instruction item, int index) + { + var current = items [index]; + + item.previous = current.previous; + item.next = current.next; + + current.previous = null; + current.next = null; + } + + protected override void OnRemove (Instruction item, int index) + { + var previous = item.previous; + if (previous != null) + previous.next = item.next; + + var next = item.next; + if (next != null) + next.previous = item.previous; + + RemoveSequencePoint (item); + + item.previous = null; + item.next = null; + } + + void RemoveSequencePoint (Instruction instruction) + { + var debug_info = method.debug_info; + if (debug_info == null || !debug_info.HasSequencePoints) + return; + + var sequence_points = debug_info.sequence_points; + for (int i = 0; i < sequence_points.Count; i++) { + if (sequence_points [i].Offset == instruction.offset) { + sequence_points.RemoveAt (i); + return; + } + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs.meta new file mode 100644 index 0000000..f1a24c5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/MethodBody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbaff0c5ed7a2024e873fe3142b8845f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs new file mode 100644 index 0000000..81ab0e1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs @@ -0,0 +1,439 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil.Cil { + + public enum FlowControl { + Branch, + Break, + Call, + Cond_Branch, + Meta, + Next, + Phi, + Return, + Throw, + } + + public enum OpCodeType { + Annotation, + Macro, + Nternal, + Objmodel, + Prefix, + Primitive, + } + + public enum OperandType { + InlineBrTarget, + InlineField, + InlineI, + InlineI8, + InlineMethod, + InlineNone, + InlinePhi, + InlineR, + InlineSig, + InlineString, + InlineSwitch, + InlineTok, + InlineType, + InlineVar, + InlineArg, + ShortInlineBrTarget, + ShortInlineI, + ShortInlineR, + ShortInlineVar, + ShortInlineArg, + } + + public enum StackBehaviour { + Pop0, + Pop1, + Pop1_pop1, + Popi, + Popi_pop1, + Popi_popi, + Popi_popi8, + Popi_popi_popi, + Popi_popr4, + Popi_popr8, + Popref, + Popref_pop1, + Popref_popi, + Popref_popi_popi, + Popref_popi_popi8, + Popref_popi_popr4, + Popref_popi_popr8, + Popref_popi_popref, + PopAll, + Push0, + Push1, + Push1_push1, + Pushi, + Pushi8, + Pushr4, + Pushr8, + Pushref, + Varpop, + Varpush, + } + + public struct OpCode : IEquatable { + + readonly byte op1; + readonly byte op2; + readonly byte code; + readonly byte flow_control; + readonly byte opcode_type; + readonly byte operand_type; + readonly byte stack_behavior_pop; + readonly byte stack_behavior_push; + + public string Name { + get { return OpCodeNames.names [(int) Code]; } + } + + public int Size { + get { return op1 == 0xff ? 1 : 2; } + } + + public byte Op1 { + get { return op1; } + } + + public byte Op2 { + get { return op2; } + } + + public short Value { + get { return op1 == 0xff ? op2 : (short) ((op1 << 8) | op2); } + } + + public Code Code { + get { return (Code) code; } + } + + public FlowControl FlowControl { + get { return (FlowControl) flow_control; } + } + + public OpCodeType OpCodeType { + get { return (OpCodeType) opcode_type; } + } + + public OperandType OperandType { + get { return (OperandType) operand_type; } + } + + public StackBehaviour StackBehaviourPop { + get { return (StackBehaviour) stack_behavior_pop; } + } + + public StackBehaviour StackBehaviourPush { + get { return (StackBehaviour) stack_behavior_push; } + } + + internal OpCode (int x, int y) + { + this.op1 = (byte) ((x >> 0) & 0xff); + this.op2 = (byte) ((x >> 8) & 0xff); + this.code = (byte) ((x >> 16) & 0xff); + this.flow_control = (byte) ((x >> 24) & 0xff); + + this.opcode_type = (byte) ((y >> 0) & 0xff); + this.operand_type = (byte) ((y >> 8) & 0xff); + this.stack_behavior_pop = (byte) ((y >> 16) & 0xff); + this.stack_behavior_push = (byte) ((y >> 24) & 0xff); + + if (op1 == 0xff) + OpCodes.OneByteOpCode [op2] = this; + else + OpCodes.TwoBytesOpCode [op2] = this; + } + + public override int GetHashCode () + { + return Value; + } + + public override bool Equals (object obj) + { + if (!(obj is OpCode)) + return false; + + var opcode = (OpCode) obj; + return op1 == opcode.op1 && op2 == opcode.op2; + } + + public bool Equals (OpCode opcode) + { + return op1 == opcode.op1 && op2 == opcode.op2; + } + + public static bool operator == (OpCode one, OpCode other) + { + return one.op1 == other.op1 && one.op2 == other.op2; + } + + public static bool operator != (OpCode one, OpCode other) + { + return one.op1 != other.op1 || one.op2 != other.op2; + } + + public override string ToString () + { + return Name; + } + } + + static class OpCodeNames { + + internal static readonly string [] names; + + static OpCodeNames () + { + var table = new byte [] { + 3, 110, 111, 112, + 5, 98, 114, 101, 97, 107, + 7, 108, 100, 97, 114, 103, 46, 48, + 7, 108, 100, 97, 114, 103, 46, 49, + 7, 108, 100, 97, 114, 103, 46, 50, + 7, 108, 100, 97, 114, 103, 46, 51, + 7, 108, 100, 108, 111, 99, 46, 48, + 7, 108, 100, 108, 111, 99, 46, 49, + 7, 108, 100, 108, 111, 99, 46, 50, + 7, 108, 100, 108, 111, 99, 46, 51, + 7, 115, 116, 108, 111, 99, 46, 48, + 7, 115, 116, 108, 111, 99, 46, 49, + 7, 115, 116, 108, 111, 99, 46, 50, + 7, 115, 116, 108, 111, 99, 46, 51, + 7, 108, 100, 97, 114, 103, 46, 115, + 8, 108, 100, 97, 114, 103, 97, 46, 115, + 7, 115, 116, 97, 114, 103, 46, 115, + 7, 108, 100, 108, 111, 99, 46, 115, + 8, 108, 100, 108, 111, 99, 97, 46, 115, + 7, 115, 116, 108, 111, 99, 46, 115, + 6, 108, 100, 110, 117, 108, 108, + 9, 108, 100, 99, 46, 105, 52, 46, 109, 49, + 8, 108, 100, 99, 46, 105, 52, 46, 48, + 8, 108, 100, 99, 46, 105, 52, 46, 49, + 8, 108, 100, 99, 46, 105, 52, 46, 50, + 8, 108, 100, 99, 46, 105, 52, 46, 51, + 8, 108, 100, 99, 46, 105, 52, 46, 52, + 8, 108, 100, 99, 46, 105, 52, 46, 53, + 8, 108, 100, 99, 46, 105, 52, 46, 54, + 8, 108, 100, 99, 46, 105, 52, 46, 55, + 8, 108, 100, 99, 46, 105, 52, 46, 56, + 8, 108, 100, 99, 46, 105, 52, 46, 115, + 6, 108, 100, 99, 46, 105, 52, + 6, 108, 100, 99, 46, 105, 56, + 6, 108, 100, 99, 46, 114, 52, + 6, 108, 100, 99, 46, 114, 56, + 3, 100, 117, 112, + 3, 112, 111, 112, + 3, 106, 109, 112, + 4, 99, 97, 108, 108, + 5, 99, 97, 108, 108, 105, + 3, 114, 101, 116, + 4, 98, 114, 46, 115, + 9, 98, 114, 102, 97, 108, 115, 101, 46, 115, + 8, 98, 114, 116, 114, 117, 101, 46, 115, + 5, 98, 101, 113, 46, 115, + 5, 98, 103, 101, 46, 115, + 5, 98, 103, 116, 46, 115, + 5, 98, 108, 101, 46, 115, + 5, 98, 108, 116, 46, 115, + 8, 98, 110, 101, 46, 117, 110, 46, 115, + 8, 98, 103, 101, 46, 117, 110, 46, 115, + 8, 98, 103, 116, 46, 117, 110, 46, 115, + 8, 98, 108, 101, 46, 117, 110, 46, 115, + 8, 98, 108, 116, 46, 117, 110, 46, 115, + 2, 98, 114, + 7, 98, 114, 102, 97, 108, 115, 101, + 6, 98, 114, 116, 114, 117, 101, + 3, 98, 101, 113, + 3, 98, 103, 101, + 3, 98, 103, 116, + 3, 98, 108, 101, + 3, 98, 108, 116, + 6, 98, 110, 101, 46, 117, 110, + 6, 98, 103, 101, 46, 117, 110, + 6, 98, 103, 116, 46, 117, 110, + 6, 98, 108, 101, 46, 117, 110, + 6, 98, 108, 116, 46, 117, 110, + 6, 115, 119, 105, 116, 99, 104, + 8, 108, 100, 105, 110, 100, 46, 105, 49, + 8, 108, 100, 105, 110, 100, 46, 117, 49, + 8, 108, 100, 105, 110, 100, 46, 105, 50, + 8, 108, 100, 105, 110, 100, 46, 117, 50, + 8, 108, 100, 105, 110, 100, 46, 105, 52, + 8, 108, 100, 105, 110, 100, 46, 117, 52, + 8, 108, 100, 105, 110, 100, 46, 105, 56, + 7, 108, 100, 105, 110, 100, 46, 105, + 8, 108, 100, 105, 110, 100, 46, 114, 52, + 8, 108, 100, 105, 110, 100, 46, 114, 56, + 9, 108, 100, 105, 110, 100, 46, 114, 101, 102, + 9, 115, 116, 105, 110, 100, 46, 114, 101, 102, + 8, 115, 116, 105, 110, 100, 46, 105, 49, + 8, 115, 116, 105, 110, 100, 46, 105, 50, + 8, 115, 116, 105, 110, 100, 46, 105, 52, + 8, 115, 116, 105, 110, 100, 46, 105, 56, + 8, 115, 116, 105, 110, 100, 46, 114, 52, + 8, 115, 116, 105, 110, 100, 46, 114, 56, + 3, 97, 100, 100, + 3, 115, 117, 98, + 3, 109, 117, 108, + 3, 100, 105, 118, + 6, 100, 105, 118, 46, 117, 110, + 3, 114, 101, 109, + 6, 114, 101, 109, 46, 117, 110, + 3, 97, 110, 100, + 2, 111, 114, + 3, 120, 111, 114, + 3, 115, 104, 108, + 3, 115, 104, 114, + 6, 115, 104, 114, 46, 117, 110, + 3, 110, 101, 103, + 3, 110, 111, 116, + 7, 99, 111, 110, 118, 46, 105, 49, + 7, 99, 111, 110, 118, 46, 105, 50, + 7, 99, 111, 110, 118, 46, 105, 52, + 7, 99, 111, 110, 118, 46, 105, 56, + 7, 99, 111, 110, 118, 46, 114, 52, + 7, 99, 111, 110, 118, 46, 114, 56, + 7, 99, 111, 110, 118, 46, 117, 52, + 7, 99, 111, 110, 118, 46, 117, 56, + 8, 99, 97, 108, 108, 118, 105, 114, 116, + 5, 99, 112, 111, 98, 106, + 5, 108, 100, 111, 98, 106, + 5, 108, 100, 115, 116, 114, + 6, 110, 101, 119, 111, 98, 106, + 9, 99, 97, 115, 116, 99, 108, 97, 115, 115, + 6, 105, 115, 105, 110, 115, 116, + 9, 99, 111, 110, 118, 46, 114, 46, 117, 110, + 5, 117, 110, 98, 111, 120, + 5, 116, 104, 114, 111, 119, + 5, 108, 100, 102, 108, 100, + 6, 108, 100, 102, 108, 100, 97, + 5, 115, 116, 102, 108, 100, + 6, 108, 100, 115, 102, 108, 100, + 7, 108, 100, 115, 102, 108, 100, 97, + 6, 115, 116, 115, 102, 108, 100, + 5, 115, 116, 111, 98, 106, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 49, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 50, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 52, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 56, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 49, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 50, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 52, 46, 117, 110, + 14, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 56, 46, 117, 110, + 13, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 46, 117, 110, + 13, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 46, 117, 110, + 3, 98, 111, 120, + 6, 110, 101, 119, 97, 114, 114, + 5, 108, 100, 108, 101, 110, + 7, 108, 100, 101, 108, 101, 109, 97, + 9, 108, 100, 101, 108, 101, 109, 46, 105, 49, + 9, 108, 100, 101, 108, 101, 109, 46, 117, 49, + 9, 108, 100, 101, 108, 101, 109, 46, 105, 50, + 9, 108, 100, 101, 108, 101, 109, 46, 117, 50, + 9, 108, 100, 101, 108, 101, 109, 46, 105, 52, + 9, 108, 100, 101, 108, 101, 109, 46, 117, 52, + 9, 108, 100, 101, 108, 101, 109, 46, 105, 56, + 8, 108, 100, 101, 108, 101, 109, 46, 105, + 9, 108, 100, 101, 108, 101, 109, 46, 114, 52, + 9, 108, 100, 101, 108, 101, 109, 46, 114, 56, + 10, 108, 100, 101, 108, 101, 109, 46, 114, 101, 102, + 8, 115, 116, 101, 108, 101, 109, 46, 105, + 9, 115, 116, 101, 108, 101, 109, 46, 105, 49, + 9, 115, 116, 101, 108, 101, 109, 46, 105, 50, + 9, 115, 116, 101, 108, 101, 109, 46, 105, 52, + 9, 115, 116, 101, 108, 101, 109, 46, 105, 56, + 9, 115, 116, 101, 108, 101, 109, 46, 114, 52, + 9, 115, 116, 101, 108, 101, 109, 46, 114, 56, + 10, 115, 116, 101, 108, 101, 109, 46, 114, 101, 102, + 10, 108, 100, 101, 108, 101, 109, 46, 97, 110, 121, + 10, 115, 116, 101, 108, 101, 109, 46, 97, 110, 121, + 9, 117, 110, 98, 111, 120, 46, 97, 110, 121, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 49, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 49, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 50, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 50, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 52, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 52, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, 56, + 11, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, 56, + 9, 114, 101, 102, 97, 110, 121, 118, 97, 108, + 8, 99, 107, 102, 105, 110, 105, 116, 101, + 8, 109, 107, 114, 101, 102, 97, 110, 121, + 7, 108, 100, 116, 111, 107, 101, 110, + 7, 99, 111, 110, 118, 46, 117, 50, + 7, 99, 111, 110, 118, 46, 117, 49, + 6, 99, 111, 110, 118, 46, 105, + 10, 99, 111, 110, 118, 46, 111, 118, 102, 46, 105, + 10, 99, 111, 110, 118, 46, 111, 118, 102, 46, 117, + 7, 97, 100, 100, 46, 111, 118, 102, + 10, 97, 100, 100, 46, 111, 118, 102, 46, 117, 110, + 7, 109, 117, 108, 46, 111, 118, 102, + 10, 109, 117, 108, 46, 111, 118, 102, 46, 117, 110, + 7, 115, 117, 98, 46, 111, 118, 102, + 10, 115, 117, 98, 46, 111, 118, 102, 46, 117, 110, + 10, 101, 110, 100, 102, 105, 110, 97, 108, 108, 121, + 5, 108, 101, 97, 118, 101, + 7, 108, 101, 97, 118, 101, 46, 115, + 7, 115, 116, 105, 110, 100, 46, 105, + 6, 99, 111, 110, 118, 46, 117, + 7, 97, 114, 103, 108, 105, 115, 116, + 3, 99, 101, 113, + 3, 99, 103, 116, + 6, 99, 103, 116, 46, 117, 110, + 3, 99, 108, 116, + 6, 99, 108, 116, 46, 117, 110, + 5, 108, 100, 102, 116, 110, + 9, 108, 100, 118, 105, 114, 116, 102, 116, 110, + 5, 108, 100, 97, 114, 103, + 6, 108, 100, 97, 114, 103, 97, + 5, 115, 116, 97, 114, 103, + 5, 108, 100, 108, 111, 99, + 6, 108, 100, 108, 111, 99, 97, + 5, 115, 116, 108, 111, 99, + 8, 108, 111, 99, 97, 108, 108, 111, 99, + 9, 101, 110, 100, 102, 105, 108, 116, 101, 114, + 10, 117, 110, 97, 108, 105, 103, 110, 101, 100, 46, + 9, 118, 111, 108, 97, 116, 105, 108, 101, 46, + 5, 116, 97, 105, 108, 46, + 7, 105, 110, 105, 116, 111, 98, 106, + 12, 99, 111, 110, 115, 116, 114, 97, 105, 110, 101, 100, 46, + 5, 99, 112, 98, 108, 107, + 7, 105, 110, 105, 116, 98, 108, 107, + 3, 110, 111, 46, + 7, 114, 101, 116, 104, 114, 111, 119, + 6, 115, 105, 122, 101, 111, 102, + 10, 114, 101, 102, 97, 110, 121, 116, 121, 112, 101, + 9, 114, 101, 97, 100, 111, 110, 108, 121, 46, + }; + + names = new string [219]; + + for (int i = 0, p = 0; i < names.Length; i++) { + var buffer = new char [table [p++]]; + + for (int j = 0; j < buffer.Length; j++) + buffer [j] = (char) table [p++]; + + names [i] = new string (buffer); + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs.meta new file mode 100644 index 0000000..6a20b8b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b2f1bbabe6bd444080a8db95efce4fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs new file mode 100644 index 0000000..ba0468d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs @@ -0,0 +1,894 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Cil { + + public static class OpCodes { + + internal static readonly OpCode [] OneByteOpCode = new OpCode [0xe0 + 1]; + internal static readonly OpCode [] TwoBytesOpCode = new OpCode [0x1e + 1]; + + public static readonly OpCode Nop = new OpCode ( + 0xff << 0 | 0x00 << 8 | (byte) Code.Nop << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Break = new OpCode ( + 0xff << 0 | 0x01 << 8 | (byte) Code.Break << 16 | (byte) FlowControl.Break << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldarg_0 = new OpCode ( + 0xff << 0 | 0x02 << 8 | (byte) Code.Ldarg_0 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldarg_1 = new OpCode ( + 0xff << 0 | 0x03 << 8 | (byte) Code.Ldarg_1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldarg_2 = new OpCode ( + 0xff << 0 | 0x04 << 8 | (byte) Code.Ldarg_2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldarg_3 = new OpCode ( + 0xff << 0 | 0x05 << 8 | (byte) Code.Ldarg_3 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldloc_0 = new OpCode ( + 0xff << 0 | 0x06 << 8 | (byte) Code.Ldloc_0 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldloc_1 = new OpCode ( + 0xff << 0 | 0x07 << 8 | (byte) Code.Ldloc_1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldloc_2 = new OpCode ( + 0xff << 0 | 0x08 << 8 | (byte) Code.Ldloc_2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldloc_3 = new OpCode ( + 0xff << 0 | 0x09 << 8 | (byte) Code.Ldloc_3 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Stloc_0 = new OpCode ( + 0xff << 0 | 0x0a << 8 | (byte) Code.Stloc_0 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stloc_1 = new OpCode ( + 0xff << 0 | 0x0b << 8 | (byte) Code.Stloc_1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stloc_2 = new OpCode ( + 0xff << 0 | 0x0c << 8 | (byte) Code.Stloc_2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stloc_3 = new OpCode ( + 0xff << 0 | 0x0d << 8 | (byte) Code.Stloc_3 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldarg_S = new OpCode ( + 0xff << 0 | 0x0e << 8 | (byte) Code.Ldarg_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldarga_S = new OpCode ( + 0xff << 0 | 0x0f << 8 | (byte) Code.Ldarga_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Starg_S = new OpCode ( + 0xff << 0 | 0x10 << 8 | (byte) Code.Starg_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineArg << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldloc_S = new OpCode ( + 0xff << 0 | 0x11 << 8 | (byte) Code.Ldloc_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldloca_S = new OpCode ( + 0xff << 0 | 0x12 << 8 | (byte) Code.Ldloca_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Stloc_S = new OpCode ( + 0xff << 0 | 0x13 << 8 | (byte) Code.Stloc_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineVar << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldnull = new OpCode ( + 0xff << 0 | 0x14 << 8 | (byte) Code.Ldnull << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Ldc_I4_M1 = new OpCode ( + 0xff << 0 | 0x15 << 8 | (byte) Code.Ldc_I4_M1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_0 = new OpCode ( + 0xff << 0 | 0x16 << 8 | (byte) Code.Ldc_I4_0 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_1 = new OpCode ( + 0xff << 0 | 0x17 << 8 | (byte) Code.Ldc_I4_1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_2 = new OpCode ( + 0xff << 0 | 0x18 << 8 | (byte) Code.Ldc_I4_2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_3 = new OpCode ( + 0xff << 0 | 0x19 << 8 | (byte) Code.Ldc_I4_3 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_4 = new OpCode ( + 0xff << 0 | 0x1a << 8 | (byte) Code.Ldc_I4_4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_5 = new OpCode ( + 0xff << 0 | 0x1b << 8 | (byte) Code.Ldc_I4_5 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_6 = new OpCode ( + 0xff << 0 | 0x1c << 8 | (byte) Code.Ldc_I4_6 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_7 = new OpCode ( + 0xff << 0 | 0x1d << 8 | (byte) Code.Ldc_I4_7 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_8 = new OpCode ( + 0xff << 0 | 0x1e << 8 | (byte) Code.Ldc_I4_8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4_S = new OpCode ( + 0xff << 0 | 0x1f << 8 | (byte) Code.Ldc_I4_S << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I4 = new OpCode ( + 0xff << 0 | 0x20 << 8 | (byte) Code.Ldc_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldc_I8 = new OpCode ( + 0xff << 0 | 0x21 << 8 | (byte) Code.Ldc_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineI8 << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Ldc_R4 = new OpCode ( + 0xff << 0 | 0x22 << 8 | (byte) Code.Ldc_R4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.ShortInlineR << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushr4 << 24); + + public static readonly OpCode Ldc_R8 = new OpCode ( + 0xff << 0 | 0x23 << 8 | (byte) Code.Ldc_R8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineR << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushr8 << 24); + + public static readonly OpCode Dup = new OpCode ( + 0xff << 0 | 0x25 << 8 | (byte) Code.Dup << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push1_push1 << 24); + + public static readonly OpCode Pop = new OpCode ( + 0xff << 0 | 0x26 << 8 | (byte) Code.Pop << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Jmp = new OpCode ( + 0xff << 0 | 0x27 << 8 | (byte) Code.Jmp << 16 | (byte) FlowControl.Call << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Call = new OpCode ( + 0xff << 0 | 0x28 << 8 | (byte) Code.Call << 16 | (byte) FlowControl.Call << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Varpush << 24); + + public static readonly OpCode Calli = new OpCode ( + 0xff << 0 | 0x29 << 8 | (byte) Code.Calli << 16 | (byte) FlowControl.Call << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineSig << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Varpush << 24); + + public static readonly OpCode Ret = new OpCode ( + 0xff << 0 | 0x2a << 8 | (byte) Code.Ret << 16 | (byte) FlowControl.Return << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Br_S = new OpCode ( + 0xff << 0 | 0x2b << 8 | (byte) Code.Br_S << 16 | (byte) FlowControl.Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Brfalse_S = new OpCode ( + 0xff << 0 | 0x2c << 8 | (byte) Code.Brfalse_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Brtrue_S = new OpCode ( + 0xff << 0 | 0x2d << 8 | (byte) Code.Brtrue_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Beq_S = new OpCode ( + 0xff << 0 | 0x2e << 8 | (byte) Code.Beq_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bge_S = new OpCode ( + 0xff << 0 | 0x2f << 8 | (byte) Code.Bge_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bgt_S = new OpCode ( + 0xff << 0 | 0x30 << 8 | (byte) Code.Bgt_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ble_S = new OpCode ( + 0xff << 0 | 0x31 << 8 | (byte) Code.Ble_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Blt_S = new OpCode ( + 0xff << 0 | 0x32 << 8 | (byte) Code.Blt_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bne_Un_S = new OpCode ( + 0xff << 0 | 0x33 << 8 | (byte) Code.Bne_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bge_Un_S = new OpCode ( + 0xff << 0 | 0x34 << 8 | (byte) Code.Bge_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bgt_Un_S = new OpCode ( + 0xff << 0 | 0x35 << 8 | (byte) Code.Bgt_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ble_Un_S = new OpCode ( + 0xff << 0 | 0x36 << 8 | (byte) Code.Ble_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Blt_Un_S = new OpCode ( + 0xff << 0 | 0x37 << 8 | (byte) Code.Blt_Un_S << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Br = new OpCode ( + 0xff << 0 | 0x38 << 8 | (byte) Code.Br << 16 | (byte) FlowControl.Branch << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Brfalse = new OpCode ( + 0xff << 0 | 0x39 << 8 | (byte) Code.Brfalse << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Brtrue = new OpCode ( + 0xff << 0 | 0x3a << 8 | (byte) Code.Brtrue << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Beq = new OpCode ( + 0xff << 0 | 0x3b << 8 | (byte) Code.Beq << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bge = new OpCode ( + 0xff << 0 | 0x3c << 8 | (byte) Code.Bge << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bgt = new OpCode ( + 0xff << 0 | 0x3d << 8 | (byte) Code.Bgt << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ble = new OpCode ( + 0xff << 0 | 0x3e << 8 | (byte) Code.Ble << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Blt = new OpCode ( + 0xff << 0 | 0x3f << 8 | (byte) Code.Blt << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bne_Un = new OpCode ( + 0xff << 0 | 0x40 << 8 | (byte) Code.Bne_Un << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bge_Un = new OpCode ( + 0xff << 0 | 0x41 << 8 | (byte) Code.Bge_Un << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Bgt_Un = new OpCode ( + 0xff << 0 | 0x42 << 8 | (byte) Code.Bgt_Un << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ble_Un = new OpCode ( + 0xff << 0 | 0x43 << 8 | (byte) Code.Ble_Un << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Blt_Un = new OpCode ( + 0xff << 0 | 0x44 << 8 | (byte) Code.Blt_Un << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Switch = new OpCode ( + 0xff << 0 | 0x45 << 8 | (byte) Code.Switch << 16 | (byte) FlowControl.Cond_Branch << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineSwitch << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldind_I1 = new OpCode ( + 0xff << 0 | 0x46 << 8 | (byte) Code.Ldind_I1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_U1 = new OpCode ( + 0xff << 0 | 0x47 << 8 | (byte) Code.Ldind_U1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_I2 = new OpCode ( + 0xff << 0 | 0x48 << 8 | (byte) Code.Ldind_I2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_U2 = new OpCode ( + 0xff << 0 | 0x49 << 8 | (byte) Code.Ldind_U2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_I4 = new OpCode ( + 0xff << 0 | 0x4a << 8 | (byte) Code.Ldind_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_U4 = new OpCode ( + 0xff << 0 | 0x4b << 8 | (byte) Code.Ldind_U4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_I8 = new OpCode ( + 0xff << 0 | 0x4c << 8 | (byte) Code.Ldind_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Ldind_I = new OpCode ( + 0xff << 0 | 0x4d << 8 | (byte) Code.Ldind_I << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldind_R4 = new OpCode ( + 0xff << 0 | 0x4e << 8 | (byte) Code.Ldind_R4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushr4 << 24); + + public static readonly OpCode Ldind_R8 = new OpCode ( + 0xff << 0 | 0x4f << 8 | (byte) Code.Ldind_R8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushr8 << 24); + + public static readonly OpCode Ldind_Ref = new OpCode ( + 0xff << 0 | 0x50 << 8 | (byte) Code.Ldind_Ref << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Stind_Ref = new OpCode ( + 0xff << 0 | 0x51 << 8 | (byte) Code.Stind_Ref << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_I1 = new OpCode ( + 0xff << 0 | 0x52 << 8 | (byte) Code.Stind_I1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_I2 = new OpCode ( + 0xff << 0 | 0x53 << 8 | (byte) Code.Stind_I2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_I4 = new OpCode ( + 0xff << 0 | 0x54 << 8 | (byte) Code.Stind_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_I8 = new OpCode ( + 0xff << 0 | 0x55 << 8 | (byte) Code.Stind_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi8 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_R4 = new OpCode ( + 0xff << 0 | 0x56 << 8 | (byte) Code.Stind_R4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popr4 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_R8 = new OpCode ( + 0xff << 0 | 0x57 << 8 | (byte) Code.Stind_R8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popr8 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Add = new OpCode ( + 0xff << 0 | 0x58 << 8 | (byte) Code.Add << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Sub = new OpCode ( + 0xff << 0 | 0x59 << 8 | (byte) Code.Sub << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Mul = new OpCode ( + 0xff << 0 | 0x5a << 8 | (byte) Code.Mul << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Div = new OpCode ( + 0xff << 0 | 0x5b << 8 | (byte) Code.Div << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Div_Un = new OpCode ( + 0xff << 0 | 0x5c << 8 | (byte) Code.Div_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Rem = new OpCode ( + 0xff << 0 | 0x5d << 8 | (byte) Code.Rem << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Rem_Un = new OpCode ( + 0xff << 0 | 0x5e << 8 | (byte) Code.Rem_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode And = new OpCode ( + 0xff << 0 | 0x5f << 8 | (byte) Code.And << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Or = new OpCode ( + 0xff << 0 | 0x60 << 8 | (byte) Code.Or << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Xor = new OpCode ( + 0xff << 0 | 0x61 << 8 | (byte) Code.Xor << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Shl = new OpCode ( + 0xff << 0 | 0x62 << 8 | (byte) Code.Shl << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Shr = new OpCode ( + 0xff << 0 | 0x63 << 8 | (byte) Code.Shr << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Shr_Un = new OpCode ( + 0xff << 0 | 0x64 << 8 | (byte) Code.Shr_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Neg = new OpCode ( + 0xff << 0 | 0x65 << 8 | (byte) Code.Neg << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Not = new OpCode ( + 0xff << 0 | 0x66 << 8 | (byte) Code.Not << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Conv_I1 = new OpCode ( + 0xff << 0 | 0x67 << 8 | (byte) Code.Conv_I1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_I2 = new OpCode ( + 0xff << 0 | 0x68 << 8 | (byte) Code.Conv_I2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_I4 = new OpCode ( + 0xff << 0 | 0x69 << 8 | (byte) Code.Conv_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_I8 = new OpCode ( + 0xff << 0 | 0x6a << 8 | (byte) Code.Conv_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Conv_R4 = new OpCode ( + 0xff << 0 | 0x6b << 8 | (byte) Code.Conv_R4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr4 << 24); + + public static readonly OpCode Conv_R8 = new OpCode ( + 0xff << 0 | 0x6c << 8 | (byte) Code.Conv_R8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr8 << 24); + + public static readonly OpCode Conv_U4 = new OpCode ( + 0xff << 0 | 0x6d << 8 | (byte) Code.Conv_U4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_U8 = new OpCode ( + 0xff << 0 | 0x6e << 8 | (byte) Code.Conv_U8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Callvirt = new OpCode ( + 0xff << 0 | 0x6f << 8 | (byte) Code.Callvirt << 16 | (byte) FlowControl.Call << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Varpush << 24); + + public static readonly OpCode Cpobj = new OpCode ( + 0xff << 0 | 0x70 << 8 | (byte) Code.Cpobj << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldobj = new OpCode ( + 0xff << 0 | 0x71 << 8 | (byte) Code.Ldobj << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldstr = new OpCode ( + 0xff << 0 | 0x72 << 8 | (byte) Code.Ldstr << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineString << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Newobj = new OpCode ( + 0xff << 0 | 0x73 << 8 | (byte) Code.Newobj << 16 | (byte) FlowControl.Call << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Varpop << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Castclass = new OpCode ( + 0xff << 0 | 0x74 << 8 | (byte) Code.Castclass << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Isinst = new OpCode ( + 0xff << 0 | 0x75 << 8 | (byte) Code.Isinst << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_R_Un = new OpCode ( + 0xff << 0 | 0x76 << 8 | (byte) Code.Conv_R_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr8 << 24); + + public static readonly OpCode Unbox = new OpCode ( + 0xff << 0 | 0x79 << 8 | (byte) Code.Unbox << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Throw = new OpCode ( + 0xff << 0 | 0x7a << 8 | (byte) Code.Throw << 16 | (byte) FlowControl.Throw << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldfld = new OpCode ( + 0xff << 0 | 0x7b << 8 | (byte) Code.Ldfld << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldflda = new OpCode ( + 0xff << 0 | 0x7c << 8 | (byte) Code.Ldflda << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Stfld = new OpCode ( + 0xff << 0 | 0x7d << 8 | (byte) Code.Stfld << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Popref_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldsfld = new OpCode ( + 0xff << 0 | 0x7e << 8 | (byte) Code.Ldsfld << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldsflda = new OpCode ( + 0xff << 0 | 0x7f << 8 | (byte) Code.Ldsflda << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Stsfld = new OpCode ( + 0xff << 0 | 0x80 << 8 | (byte) Code.Stsfld << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineField << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stobj = new OpCode ( + 0xff << 0 | 0x81 << 8 | (byte) Code.Stobj << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi_pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Conv_Ovf_I1_Un = new OpCode ( + 0xff << 0 | 0x82 << 8 | (byte) Code.Conv_Ovf_I1_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I2_Un = new OpCode ( + 0xff << 0 | 0x83 << 8 | (byte) Code.Conv_Ovf_I2_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I4_Un = new OpCode ( + 0xff << 0 | 0x84 << 8 | (byte) Code.Conv_Ovf_I4_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I8_Un = new OpCode ( + 0xff << 0 | 0x85 << 8 | (byte) Code.Conv_Ovf_I8_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Conv_Ovf_U1_Un = new OpCode ( + 0xff << 0 | 0x86 << 8 | (byte) Code.Conv_Ovf_U1_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U2_Un = new OpCode ( + 0xff << 0 | 0x87 << 8 | (byte) Code.Conv_Ovf_U2_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U4_Un = new OpCode ( + 0xff << 0 | 0x88 << 8 | (byte) Code.Conv_Ovf_U4_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U8_Un = new OpCode ( + 0xff << 0 | 0x89 << 8 | (byte) Code.Conv_Ovf_U8_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Conv_Ovf_I_Un = new OpCode ( + 0xff << 0 | 0x8a << 8 | (byte) Code.Conv_Ovf_I_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U_Un = new OpCode ( + 0xff << 0 | 0x8b << 8 | (byte) Code.Conv_Ovf_U_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Box = new OpCode ( + 0xff << 0 | 0x8c << 8 | (byte) Code.Box << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Newarr = new OpCode ( + 0xff << 0 | 0x8d << 8 | (byte) Code.Newarr << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Ldlen = new OpCode ( + 0xff << 0 | 0x8e << 8 | (byte) Code.Ldlen << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelema = new OpCode ( + 0xff << 0 | 0x8f << 8 | (byte) Code.Ldelema << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_I1 = new OpCode ( + 0xff << 0 | 0x90 << 8 | (byte) Code.Ldelem_I1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_U1 = new OpCode ( + 0xff << 0 | 0x91 << 8 | (byte) Code.Ldelem_U1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_I2 = new OpCode ( + 0xff << 0 | 0x92 << 8 | (byte) Code.Ldelem_I2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_U2 = new OpCode ( + 0xff << 0 | 0x93 << 8 | (byte) Code.Ldelem_U2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_I4 = new OpCode ( + 0xff << 0 | 0x94 << 8 | (byte) Code.Ldelem_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_U4 = new OpCode ( + 0xff << 0 | 0x95 << 8 | (byte) Code.Ldelem_U4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_I8 = new OpCode ( + 0xff << 0 | 0x96 << 8 | (byte) Code.Ldelem_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Ldelem_I = new OpCode ( + 0xff << 0 | 0x97 << 8 | (byte) Code.Ldelem_I << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldelem_R4 = new OpCode ( + 0xff << 0 | 0x98 << 8 | (byte) Code.Ldelem_R4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushr4 << 24); + + public static readonly OpCode Ldelem_R8 = new OpCode ( + 0xff << 0 | 0x99 << 8 | (byte) Code.Ldelem_R8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushr8 << 24); + + public static readonly OpCode Ldelem_Ref = new OpCode ( + 0xff << 0 | 0x9a << 8 | (byte) Code.Ldelem_Ref << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Pushref << 24); + + public static readonly OpCode Stelem_I = new OpCode ( + 0xff << 0 | 0x9b << 8 | (byte) Code.Stelem_I << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_I1 = new OpCode ( + 0xff << 0 | 0x9c << 8 | (byte) Code.Stelem_I1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_I2 = new OpCode ( + 0xff << 0 | 0x9d << 8 | (byte) Code.Stelem_I2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_I4 = new OpCode ( + 0xff << 0 | 0x9e << 8 | (byte) Code.Stelem_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_I8 = new OpCode ( + 0xff << 0 | 0x9f << 8 | (byte) Code.Stelem_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popi8 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_R4 = new OpCode ( + 0xff << 0 | 0xa0 << 8 | (byte) Code.Stelem_R4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popr4 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_R8 = new OpCode ( + 0xff << 0 | 0xa1 << 8 | (byte) Code.Stelem_R8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popr8 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stelem_Ref = new OpCode ( + 0xff << 0 | 0xa2 << 8 | (byte) Code.Stelem_Ref << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popref_popi_popref << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldelem_Any = new OpCode ( + 0xff << 0 | 0xa3 << 8 | (byte) Code.Ldelem_Any << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref_popi << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Stelem_Any = new OpCode ( + 0xff << 0 | 0xa4 << 8 | (byte) Code.Stelem_Any << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref_popi_popref << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Unbox_Any = new OpCode ( + 0xff << 0 | 0xa5 << 8 | (byte) Code.Unbox_Any << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Conv_Ovf_I1 = new OpCode ( + 0xff << 0 | 0xb3 << 8 | (byte) Code.Conv_Ovf_I1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U1 = new OpCode ( + 0xff << 0 | 0xb4 << 8 | (byte) Code.Conv_Ovf_U1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I2 = new OpCode ( + 0xff << 0 | 0xb5 << 8 | (byte) Code.Conv_Ovf_I2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U2 = new OpCode ( + 0xff << 0 | 0xb6 << 8 | (byte) Code.Conv_Ovf_U2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I4 = new OpCode ( + 0xff << 0 | 0xb7 << 8 | (byte) Code.Conv_Ovf_I4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U4 = new OpCode ( + 0xff << 0 | 0xb8 << 8 | (byte) Code.Conv_Ovf_U4 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I8 = new OpCode ( + 0xff << 0 | 0xb9 << 8 | (byte) Code.Conv_Ovf_I8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Conv_Ovf_U8 = new OpCode ( + 0xff << 0 | 0xba << 8 | (byte) Code.Conv_Ovf_U8 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi8 << 24); + + public static readonly OpCode Refanyval = new OpCode ( + 0xff << 0 | 0xc2 << 8 | (byte) Code.Refanyval << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ckfinite = new OpCode ( + 0xff << 0 | 0xc3 << 8 | (byte) Code.Ckfinite << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushr8 << 24); + + public static readonly OpCode Mkrefany = new OpCode ( + 0xff << 0 | 0xc6 << 8 | (byte) Code.Mkrefany << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldtoken = new OpCode ( + 0xff << 0 | 0xd0 << 8 | (byte) Code.Ldtoken << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineTok << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_U2 = new OpCode ( + 0xff << 0 | 0xd1 << 8 | (byte) Code.Conv_U2 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_U1 = new OpCode ( + 0xff << 0 | 0xd2 << 8 | (byte) Code.Conv_U1 << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_I = new OpCode ( + 0xff << 0 | 0xd3 << 8 | (byte) Code.Conv_I << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_I = new OpCode ( + 0xff << 0 | 0xd4 << 8 | (byte) Code.Conv_Ovf_I << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Conv_Ovf_U = new OpCode ( + 0xff << 0 | 0xd5 << 8 | (byte) Code.Conv_Ovf_U << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Add_Ovf = new OpCode ( + 0xff << 0 | 0xd6 << 8 | (byte) Code.Add_Ovf << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Add_Ovf_Un = new OpCode ( + 0xff << 0 | 0xd7 << 8 | (byte) Code.Add_Ovf_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Mul_Ovf = new OpCode ( + 0xff << 0 | 0xd8 << 8 | (byte) Code.Mul_Ovf << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Mul_Ovf_Un = new OpCode ( + 0xff << 0 | 0xd9 << 8 | (byte) Code.Mul_Ovf_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Sub_Ovf = new OpCode ( + 0xff << 0 | 0xda << 8 | (byte) Code.Sub_Ovf << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Sub_Ovf_Un = new OpCode ( + 0xff << 0 | 0xdb << 8 | (byte) Code.Sub_Ovf_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Endfinally = new OpCode ( + 0xff << 0 | 0xdc << 8 | (byte) Code.Endfinally << 16 | (byte) FlowControl.Return << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Leave = new OpCode ( + 0xff << 0 | 0xdd << 8 | (byte) Code.Leave << 16 | (byte) FlowControl.Branch << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineBrTarget << 8 | (byte) StackBehaviour.PopAll << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Leave_S = new OpCode ( + 0xff << 0 | 0xde << 8 | (byte) Code.Leave_S << 16 | (byte) FlowControl.Branch << 24, + (byte) OpCodeType.Macro << 0 | (byte) OperandType.ShortInlineBrTarget << 8 | (byte) StackBehaviour.PopAll << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Stind_I = new OpCode ( + 0xff << 0 | 0xdf << 8 | (byte) Code.Stind_I << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Conv_U = new OpCode ( + 0xff << 0 | 0xe0 << 8 | (byte) Code.Conv_U << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Arglist = new OpCode ( + 0xfe << 0 | 0x00 << 8 | (byte) Code.Arglist << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ceq = new OpCode ( + 0xfe << 0 | 0x01 << 8 | (byte) Code.Ceq << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Cgt = new OpCode ( + 0xfe << 0 | 0x02 << 8 | (byte) Code.Cgt << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Cgt_Un = new OpCode ( + 0xfe << 0 | 0x03 << 8 | (byte) Code.Cgt_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Clt = new OpCode ( + 0xfe << 0 | 0x04 << 8 | (byte) Code.Clt << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Clt_Un = new OpCode ( + 0xfe << 0 | 0x05 << 8 | (byte) Code.Clt_Un << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1_pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldftn = new OpCode ( + 0xfe << 0 | 0x06 << 8 | (byte) Code.Ldftn << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldvirtftn = new OpCode ( + 0xfe << 0 | 0x07 << 8 | (byte) Code.Ldvirtftn << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineMethod << 8 | (byte) StackBehaviour.Popref << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Ldarg = new OpCode ( + 0xfe << 0 | 0x09 << 8 | (byte) Code.Ldarg << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldarga = new OpCode ( + 0xfe << 0 | 0x0a << 8 | (byte) Code.Ldarga << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineArg << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Starg = new OpCode ( + 0xfe << 0 | 0x0b << 8 | (byte) Code.Starg << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineArg << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Ldloc = new OpCode ( + 0xfe << 0 | 0x0c << 8 | (byte) Code.Ldloc << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push1 << 24); + + public static readonly OpCode Ldloca = new OpCode ( + 0xfe << 0 | 0x0d << 8 | (byte) Code.Ldloca << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineVar << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Stloc = new OpCode ( + 0xfe << 0 | 0x0e << 8 | (byte) Code.Stloc << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineVar << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Localloc = new OpCode ( + 0xfe << 0 | 0x0f << 8 | (byte) Code.Localloc << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Endfilter = new OpCode ( + 0xfe << 0 | 0x11 << 8 | (byte) Code.Endfilter << 16 | (byte) FlowControl.Return << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Unaligned = new OpCode ( + 0xfe << 0 | 0x12 << 8 | (byte) Code.Unaligned << 16 | (byte) FlowControl.Meta << 24, + (byte) OpCodeType.Prefix << 0 | (byte) OperandType.ShortInlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Volatile = new OpCode ( + 0xfe << 0 | 0x13 << 8 | (byte) Code.Volatile << 16 | (byte) FlowControl.Meta << 24, + (byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Tail = new OpCode ( + 0xfe << 0 | 0x14 << 8 | (byte) Code.Tail << 16 | (byte) FlowControl.Meta << 24, + (byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Initobj = new OpCode ( + 0xfe << 0 | 0x15 << 8 | (byte) Code.Initobj << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Constrained = new OpCode ( + 0xfe << 0 | 0x16 << 8 | (byte) Code.Constrained << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Cpblk = new OpCode ( + 0xfe << 0 | 0x17 << 8 | (byte) Code.Cpblk << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Initblk = new OpCode ( + 0xfe << 0 | 0x18 << 8 | (byte) Code.Initblk << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Popi_popi_popi << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode No = new OpCode ( + 0xfe << 0 | 0x19 << 8 | (byte) Code.No << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Prefix << 0 | (byte) OperandType.ShortInlineI << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Rethrow = new OpCode ( + 0xfe << 0 | 0x1a << 8 | (byte) Code.Rethrow << 16 | (byte) FlowControl.Throw << 24, + (byte) OpCodeType.Objmodel << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + + public static readonly OpCode Sizeof = new OpCode ( + 0xfe << 0 | 0x1c << 8 | (byte) Code.Sizeof << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineType << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Refanytype = new OpCode ( + 0xfe << 0 | 0x1d << 8 | (byte) Code.Refanytype << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Primitive << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop1 << 16 | (byte) StackBehaviour.Pushi << 24); + + public static readonly OpCode Readonly = new OpCode ( + 0xfe << 0 | 0x1e << 8 | (byte) Code.Readonly << 16 | (byte) FlowControl.Next << 24, + (byte) OpCodeType.Prefix << 0 | (byte) OperandType.InlineNone << 8 | (byte) StackBehaviour.Pop0 << 16 | (byte) StackBehaviour.Push0 << 24); + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs.meta new file mode 100644 index 0000000..fedea1d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/OpCodes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f3b53f63b4782e44b822483b3cce402 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs new file mode 100644 index 0000000..4f734f3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs @@ -0,0 +1,590 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; + +using Mono.Cecil.Metadata; +using Mono.Cecil.PE; + +namespace Mono.Cecil.Cil { + + public sealed class PortablePdbReaderProvider : ISymbolReaderProvider { + + public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName) + { + Mixin.CheckModule (module); + Mixin.CheckFileName (fileName); + + var file = File.OpenRead (Mixin.GetPdbFileName (fileName)); + return GetSymbolReader (module, Disposable.Owned (file as Stream), file.Name); + } + + public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) + { + Mixin.CheckModule (module); + Mixin.CheckStream (symbolStream); + + return GetSymbolReader (module, Disposable.NotOwned (symbolStream), symbolStream.GetFileName ()); + } + + ISymbolReader GetSymbolReader (ModuleDefinition module, Disposable symbolStream, string fileName) + { + return new PortablePdbReader (ImageReader.ReadPortablePdb (symbolStream, fileName), module); + } + } + + public sealed class PortablePdbReader : ISymbolReader { + + readonly Image image; + readonly ModuleDefinition module; + readonly MetadataReader reader; + readonly MetadataReader debug_reader; + + bool IsEmbedded { get { return reader.image == debug_reader.image; } } + + internal PortablePdbReader (Image image, ModuleDefinition module) + { + this.image = image; + this.module = module; + this.reader = module.reader; + this.debug_reader = new MetadataReader (image, module, this.reader); + } + +#if !READ_ONLY + public ISymbolWriterProvider GetWriterProvider () + { + return new PortablePdbWriterProvider (); + } +#endif + + public bool ProcessDebugHeader (ImageDebugHeader header) + { + if (image == module.Image) + return true; + + var entry = header.GetCodeViewEntry (); + if (entry == null) + return false; + + var data = entry.Data; + + if (data.Length < 24) + return false; + + var magic = ReadInt32 (data, 0); + if (magic != 0x53445352) + return false; + + var buffer = new byte [16]; + Buffer.BlockCopy (data, 4, buffer, 0, 16); + + var module_guid = new Guid (buffer); + + Buffer.BlockCopy (image.PdbHeap.Id, 0, buffer, 0, 16); + + var pdb_guid = new Guid (buffer); + + if (module_guid != pdb_guid) + return false; + + ReadModule (); + return true; + } + + static int ReadInt32 (byte [] bytes, int start) + { + return (bytes [start] + | (bytes [start + 1] << 8) + | (bytes [start + 2] << 16) + | (bytes [start + 3] << 24)); + } + + void ReadModule () + { + module.custom_infos = debug_reader.GetCustomDebugInformation (module); + } + + public MethodDebugInformation Read (MethodDefinition method) + { + var info = new MethodDebugInformation (method); + ReadSequencePoints (info); + ReadScope (info); + ReadStateMachineKickOffMethod (info); + ReadCustomDebugInformations (info); + return info; + } + + void ReadSequencePoints (MethodDebugInformation method_info) + { + method_info.sequence_points = debug_reader.ReadSequencePoints (method_info.method); + } + + void ReadScope (MethodDebugInformation method_info) + { + method_info.scope = debug_reader.ReadScope (method_info.method); + } + + void ReadStateMachineKickOffMethod (MethodDebugInformation method_info) + { + method_info.kickoff_method = debug_reader.ReadStateMachineKickoffMethod (method_info.method); + } + + void ReadCustomDebugInformations (MethodDebugInformation info) + { + info.method.custom_infos = debug_reader.GetCustomDebugInformation (info.method); + } + + public void Dispose () + { + if (IsEmbedded) + return; + + image.Dispose (); + } + } + + public sealed class EmbeddedPortablePdbReaderProvider : ISymbolReaderProvider { + + public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName) + { + Mixin.CheckModule (module); + + var header = module.GetDebugHeader (); + var entry = header.GetEmbeddedPortablePdbEntry (); + if (entry == null) + throw new InvalidOperationException (); + + return new EmbeddedPortablePdbReader ( + (PortablePdbReader) new PortablePdbReaderProvider ().GetSymbolReader (module, GetPortablePdbStream (entry))); + } + + static Stream GetPortablePdbStream (ImageDebugHeaderEntry entry) + { + var compressed_stream = new MemoryStream (entry.Data); + var reader = new BinaryStreamReader (compressed_stream); + reader.ReadInt32 (); // signature + var length = reader.ReadInt32 (); + var decompressed_stream = new MemoryStream (length); + + using (var deflate_stream = new DeflateStream (compressed_stream, CompressionMode.Decompress, leaveOpen: true)) + deflate_stream.CopyTo (decompressed_stream); + + return decompressed_stream; + } + + public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) + { + throw new NotSupportedException (); + } + } + + public sealed class EmbeddedPortablePdbReader : ISymbolReader + { + private readonly PortablePdbReader reader; + + internal EmbeddedPortablePdbReader (PortablePdbReader reader) + { + if (reader == null) + throw new ArgumentNullException (); + + this.reader = reader; + } + +#if !READ_ONLY + public ISymbolWriterProvider GetWriterProvider () + { + return new EmbeddedPortablePdbWriterProvider (); + } +#endif + public bool ProcessDebugHeader (ImageDebugHeader header) + { + return reader.ProcessDebugHeader (header); + } + + public MethodDebugInformation Read (MethodDefinition method) + { + return reader.Read (method); + } + + public void Dispose () + { + reader.Dispose (); + } + } + + +#if !READ_ONLY + + public sealed class PortablePdbWriterProvider : ISymbolWriterProvider + { + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) + { + Mixin.CheckModule (module); + Mixin.CheckFileName (fileName); + + var file = File.OpenWrite (Mixin.GetPdbFileName (fileName)); + return GetSymbolWriter (module, Disposable.Owned (file as Stream)); + } + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, Stream symbolStream) + { + Mixin.CheckModule (module); + Mixin.CheckStream (symbolStream); + + return GetSymbolWriter (module, Disposable.NotOwned (symbolStream)); + } + + ISymbolWriter GetSymbolWriter (ModuleDefinition module, Disposable stream) + { + var metadata = new MetadataBuilder (module, this); + var writer = ImageWriter.CreateDebugWriter (module, metadata, stream); + + return new PortablePdbWriter (metadata, module, writer); + } + } + + public sealed class PortablePdbWriter : ISymbolWriter { + + readonly MetadataBuilder pdb_metadata; + readonly ModuleDefinition module; + readonly ImageWriter writer; + + MetadataBuilder module_metadata; + + bool IsEmbedded { get { return writer == null; } } + + internal PortablePdbWriter (MetadataBuilder pdb_metadata, ModuleDefinition module) + { + this.pdb_metadata = pdb_metadata; + this.module = module; + + this.module_metadata = module.metadata_builder; + + if (module_metadata != pdb_metadata) + this.pdb_metadata.metadata_builder = this.module_metadata; + + pdb_metadata.AddCustomDebugInformations (module); + } + + internal PortablePdbWriter (MetadataBuilder pdb_metadata, ModuleDefinition module, ImageWriter writer) + : this (pdb_metadata, module) + { + this.writer = writer; + } + + public ISymbolReaderProvider GetReaderProvider () + { + return new PortablePdbReaderProvider (); + } + + public ImageDebugHeader GetDebugHeader () + { + if (IsEmbedded) + return new ImageDebugHeader (); + + var directory = new ImageDebugDirectory () { + MajorVersion = 256, + MinorVersion = 20557, + Type = ImageDebugType.CodeView, + TimeDateStamp = (int) module.timestamp, + }; + + var buffer = new ByteBuffer (); + // RSDS + buffer.WriteUInt32 (0x53445352); + // Module ID + buffer.WriteBytes (module.Mvid.ToByteArray ()); + // PDB Age + buffer.WriteUInt32 (1); + // PDB Path + buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (writer.BaseStream.GetFileName ())); + buffer.WriteByte (0); + + var data = new byte [buffer.length]; + Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length); + directory.SizeOfData = data.Length; + + return new ImageDebugHeader (new ImageDebugHeaderEntry (directory, data)); + } + + public void Write (MethodDebugInformation info) + { + CheckMethodDebugInformationTable (); + + pdb_metadata.AddMethodDebugInformation (info); + } + + void CheckMethodDebugInformationTable () + { + var mdi = pdb_metadata.table_heap.GetTable (Table.MethodDebugInformation); + if (mdi.length > 0) + return; + + // The MethodDebugInformation table has the same length as the Method table + mdi.rows = new Row [module_metadata.method_rid - 1]; + mdi.length = mdi.rows.Length; + } + + public void Dispose () + { + if (IsEmbedded) + return; + + WritePdbFile (); + } + + void WritePdbFile () + { + WritePdbHeap (); + + WriteTableHeap (); + + writer.BuildMetadataTextMap (); + writer.WriteMetadataHeader (); + writer.WriteMetadata (); + + writer.Flush (); + writer.stream.Dispose (); + } + + void WritePdbHeap () + { + var pdb_heap = pdb_metadata.pdb_heap; + + pdb_heap.WriteBytes (module.Mvid.ToByteArray ()); + pdb_heap.WriteUInt32 (module_metadata.timestamp); + + pdb_heap.WriteUInt32 (module_metadata.entry_point.ToUInt32 ()); + + var table_heap = module_metadata.table_heap; + var tables = table_heap.tables; + + ulong valid = 0; + for (int i = 0; i < tables.Length; i++) { + if (tables [i] == null || tables [i].Length == 0) + continue; + + valid |= (1UL << i); + } + + pdb_heap.WriteUInt64 (valid); + + for (int i = 0; i < tables.Length; i++) { + if (tables [i] == null || tables [i].Length == 0) + continue; + + pdb_heap.WriteUInt32 ((uint) tables [i].Length); + } + } + + void WriteTableHeap () + { + pdb_metadata.table_heap.string_offsets = pdb_metadata.string_heap.WriteStrings (); + pdb_metadata.table_heap.ComputeTableInformations (); + pdb_metadata.table_heap.WriteTableHeap (); + } + } + + public sealed class EmbeddedPortablePdbWriterProvider : ISymbolWriterProvider { + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) + { + Mixin.CheckModule (module); + Mixin.CheckFileName (fileName); + + var stream = new MemoryStream (); + var pdb_writer = (PortablePdbWriter) new PortablePdbWriterProvider ().GetSymbolWriter (module, stream); + return new EmbeddedPortablePdbWriter (stream, pdb_writer); + } + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, Stream symbolStream) + { + throw new NotSupportedException (); + } + } + + public sealed class EmbeddedPortablePdbWriter : ISymbolWriter { + + readonly Stream stream; + readonly PortablePdbWriter writer; + + internal EmbeddedPortablePdbWriter (Stream stream, PortablePdbWriter writer) + { + this.stream = stream; + this.writer = writer; + } + + public ISymbolReaderProvider GetReaderProvider () + { + return new EmbeddedPortablePdbReaderProvider (); + } + + public ImageDebugHeader GetDebugHeader () + { + writer.Dispose (); + + var directory = new ImageDebugDirectory { + Type = ImageDebugType.EmbeddedPortablePdb, + MajorVersion = 0x0100, + MinorVersion = 0x0100, + }; + + var data = new MemoryStream (); + + var w = new BinaryStreamWriter (data); + w.WriteByte (0x4d); + w.WriteByte (0x50); + w.WriteByte (0x44); + w.WriteByte (0x42); + + w.WriteInt32 ((int) stream.Length); + + stream.Position = 0; + + using (var compress_stream = new DeflateStream (data, CompressionMode.Compress, leaveOpen: true)) + stream.CopyTo (compress_stream); + + directory.SizeOfData = (int) data.Length; + + return new ImageDebugHeader (new [] { + writer.GetDebugHeader ().Entries [0], + new ImageDebugHeaderEntry (directory, data.ToArray ()) + }); + } + + public void Write (MethodDebugInformation info) + { + writer.Write (info); + } + + public void Dispose () + { + } + } + +#endif + + static class PdbGuidMapping { + + static readonly Dictionary guid_language = new Dictionary (); + static readonly Dictionary language_guid = new Dictionary (); + + static PdbGuidMapping () + { + AddMapping (DocumentLanguage.C, new Guid ("63a08714-fc37-11d2-904c-00c04fa302a1")); + AddMapping (DocumentLanguage.Cpp, new Guid ("3a12d0b7-c26c-11d0-b442-00a0244a1dd2")); + AddMapping (DocumentLanguage.CSharp, new Guid ("3f5162f8-07c6-11d3-9053-00c04fa302a1")); + AddMapping (DocumentLanguage.Basic, new Guid ("3a12d0b8-c26c-11d0-b442-00a0244a1dd2")); + AddMapping (DocumentLanguage.Java, new Guid ("3a12d0b4-c26c-11d0-b442-00a0244a1dd2")); + AddMapping (DocumentLanguage.Cobol, new Guid ("af046cd1-d0e1-11d2-977c-00a0c9b4d50c")); + AddMapping (DocumentLanguage.Pascal, new Guid ("af046cd2-d0e1-11d2-977c-00a0c9b4d50c")); + AddMapping (DocumentLanguage.Cil, new Guid ("af046cd3-d0e1-11d2-977c-00a0c9b4d50c")); + AddMapping (DocumentLanguage.JScript, new Guid ("3a12d0b6-c26c-11d0-b442-00a0244a1dd2")); + AddMapping (DocumentLanguage.Smc, new Guid ("0d9b9f7b-6611-11d3-bd2a-0000f80849bd")); + AddMapping (DocumentLanguage.MCpp, new Guid ("4b35fde8-07c6-11d3-9053-00c04fa302a1")); + AddMapping (DocumentLanguage.FSharp, new Guid ("ab4f38c9-b6e6-43ba-be3b-58080b2ccce3")); + } + + static void AddMapping (DocumentLanguage language, Guid guid) + { + guid_language.Add (guid, language); + language_guid.Add (language, guid); + } + + static readonly Guid type_text = new Guid ("5a869d0b-6611-11d3-bd2a-0000f80849bd"); + + public static DocumentType ToType (this Guid guid) + { + if (guid == type_text) + return DocumentType.Text; + + return DocumentType.Other; + } + + public static Guid ToGuid (this DocumentType type) + { + if (type == DocumentType.Text) + return type_text; + + return new Guid (); + } + + static readonly Guid hash_md5 = new Guid ("406ea660-64cf-4c82-b6f0-42d48172a799"); + static readonly Guid hash_sha1 = new Guid ("ff1816ec-aa5e-4d10-87f7-6f4963833460"); + static readonly Guid hash_sha256 = new Guid ("8829d00f-11b8-4213-878b-770e8597ac16"); + + public static DocumentHashAlgorithm ToHashAlgorithm (this Guid guid) + { + if (guid == hash_md5) + return DocumentHashAlgorithm.MD5; + + if (guid == hash_sha1) + return DocumentHashAlgorithm.SHA1; + + if (guid == hash_sha256) + return DocumentHashAlgorithm.SHA256; + + return DocumentHashAlgorithm.None; + } + + public static Guid ToGuid (this DocumentHashAlgorithm hash_algo) + { + if (hash_algo == DocumentHashAlgorithm.MD5) + return hash_md5; + + if (hash_algo == DocumentHashAlgorithm.SHA1) + return hash_sha1; + + if (hash_algo == DocumentHashAlgorithm.SHA256) + return hash_sha256; + + return new Guid (); + } + + public static DocumentLanguage ToLanguage (this Guid guid) + { + DocumentLanguage language; + if (!guid_language.TryGetValue (guid, out language)) + return DocumentLanguage.Other; + + return language; + } + + public static Guid ToGuid (this DocumentLanguage language) + { + Guid guid; + if (!language_guid.TryGetValue (language, out guid)) + return new Guid (); + + return guid; + } + + static readonly Guid vendor_ms = new Guid ("994b45c4-e6e9-11d2-903f-00c04fa302a1"); + + public static DocumentLanguageVendor ToVendor (this Guid guid) + { + if (guid == vendor_ms) + return DocumentLanguageVendor.Microsoft; + + return DocumentLanguageVendor.Other; + } + + public static Guid ToGuid (this DocumentLanguageVendor vendor) + { + if (vendor == DocumentLanguageVendor.Microsoft) + return vendor_ms; + + return new Guid (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs.meta new file mode 100644 index 0000000..d2169b5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/PortablePdb.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02d6d845fd2270b408cb5c24d800687c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs new file mode 100644 index 0000000..725d307 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs @@ -0,0 +1,76 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil.Cil { + + public sealed class SequencePoint { + + internal InstructionOffset offset; + Document document; + + int start_line; + int start_column; + int end_line; + int end_column; + + public int Offset { + get { return offset.Offset; } + } + + public int StartLine { + get { return start_line; } + set { start_line = value; } + } + + public int StartColumn { + get { return start_column; } + set { start_column = value; } + } + + public int EndLine { + get { return end_line; } + set { end_line = value; } + } + + public int EndColumn { + get { return end_column; } + set { end_column = value; } + } + + public bool IsHidden { + get { return start_line == 0xfeefee && start_line == end_line; } + } + + public Document Document { + get { return document; } + set { document = value; } + } + + internal SequencePoint (int offset, Document document) + { + if (document == null) + throw new ArgumentNullException ("document"); + + this.offset = new InstructionOffset (offset); + this.document = document; + } + + public SequencePoint (Instruction instruction, Document document) + { + if (document == null) + throw new ArgumentNullException ("document"); + + this.offset = new InstructionOffset (instruction); + this.document = document; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs.meta new file mode 100644 index 0000000..651cdd1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/SequencePoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43110e89ab910ed40b03258730dbd505 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs new file mode 100644 index 0000000..3095318 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs @@ -0,0 +1,1127 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using SR = System.Reflection; + +using Mono.Collections.Generic; +using Mono.Cecil.Cil; +using Mono.Cecil.PE; + +namespace Mono.Cecil.Cil { + + [StructLayout (LayoutKind.Sequential)] + public struct ImageDebugDirectory { + public const int Size = 28; + + public int Characteristics; + public int TimeDateStamp; + public short MajorVersion; + public short MinorVersion; + public ImageDebugType Type; + public int SizeOfData; + public int AddressOfRawData; + public int PointerToRawData; + } + + public enum ImageDebugType { + CodeView = 2, + Deterministic = 16, + EmbeddedPortablePdb = 17, + } + + public sealed class ImageDebugHeader { + + readonly ImageDebugHeaderEntry [] entries; + + public bool HasEntries { + get { return !entries.IsNullOrEmpty (); } + } + + public ImageDebugHeaderEntry [] Entries { + get { return entries; } + } + + public ImageDebugHeader (ImageDebugHeaderEntry [] entries) + { + this.entries = entries ?? Empty.Array; + } + + public ImageDebugHeader () + : this (Empty.Array) + { + } + + public ImageDebugHeader (ImageDebugHeaderEntry entry) + : this (new [] { entry }) + { + } + } + + public sealed class ImageDebugHeaderEntry { + + ImageDebugDirectory directory; + readonly byte [] data; + + public ImageDebugDirectory Directory { + get { return directory; } + internal set { directory = value; } + } + + public byte [] Data { + get { return data; } + } + + public ImageDebugHeaderEntry (ImageDebugDirectory directory, byte [] data) + { + this.directory = directory; + this.data = data ?? Empty.Array; + } + } + + public sealed class ScopeDebugInformation : DebugInformation { + + internal InstructionOffset start; + internal InstructionOffset end; + internal ImportDebugInformation import; + internal Collection scopes; + internal Collection variables; + internal Collection constants; + + public InstructionOffset Start { + get { return start; } + set { start = value; } + } + + public InstructionOffset End { + get { return end; } + set { end = value; } + } + + public ImportDebugInformation Import { + get { return import; } + set { import = value; } + } + + public bool HasScopes { + get { return !scopes.IsNullOrEmpty (); } + } + + public Collection Scopes { + get { return scopes ?? (scopes = new Collection ()); } + } + + public bool HasVariables { + get { return !variables.IsNullOrEmpty (); } + } + + public Collection Variables { + get { return variables ?? (variables = new Collection ()); } + } + + public bool HasConstants { + get { return !constants.IsNullOrEmpty (); } + } + + public Collection Constants { + get { return constants ?? (constants = new Collection ()); } + } + + internal ScopeDebugInformation () + { + this.token = new MetadataToken (TokenType.LocalScope); + } + + public ScopeDebugInformation (Instruction start, Instruction end) + : this () + { + if (start == null) + throw new ArgumentNullException ("start"); + + this.start = new InstructionOffset (start); + + if (end != null) + this.end = new InstructionOffset (end); + } + + public bool TryGetName (VariableDefinition variable, out string name) + { + name = null; + if (variables == null || variables.Count == 0) + return false; + + for (int i = 0; i < variables.Count; i++) { + if (variables [i].Index == variable.Index) { + name = variables [i].Name; + return true; + } + } + + return false; + } + } + + public struct InstructionOffset { + + readonly Instruction instruction; + readonly int? offset; + + public int Offset { + get { + if (instruction != null) + return instruction.Offset; + if (offset.HasValue) + return offset.Value; + + throw new NotSupportedException (); + } + } + + public bool IsEndOfMethod { + get { return instruction == null && !offset.HasValue; } + } + + public InstructionOffset (Instruction instruction) + { + if (instruction == null) + throw new ArgumentNullException ("instruction"); + + this.instruction = instruction; + this.offset = null; + } + + public InstructionOffset (int offset) + { + this.instruction = null; + this.offset = offset; + } + } + + [Flags] + public enum VariableAttributes : ushort { + None = 0, + DebuggerHidden = 1, + } + + public struct VariableIndex { + readonly VariableDefinition variable; + readonly int? index; + + public int Index { + get { + if (variable != null) + return variable.Index; + if (index.HasValue) + return index.Value; + + throw new NotSupportedException (); + } + } + + public VariableIndex (VariableDefinition variable) + { + if (variable == null) + throw new ArgumentNullException ("variable"); + + this.variable = variable; + this.index = null; + } + + public VariableIndex (int index) + { + this.variable = null; + this.index = index; + } + } + + public abstract class DebugInformation : ICustomDebugInformationProvider { + + internal MetadataToken token; + internal Collection custom_infos; + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + public bool HasCustomDebugInformations { + get { return !custom_infos.IsNullOrEmpty (); } + } + + public Collection CustomDebugInformations { + get { return custom_infos ?? (custom_infos = new Collection ()); } + } + + internal DebugInformation () + { + } + } + + public sealed class VariableDebugInformation : DebugInformation { + + string name; + ushort attributes; + internal VariableIndex index; + + public int Index { + get { return index.Index; } + } + + public string Name { + get { return name; } + set { name = value; } + } + + public VariableAttributes Attributes { + get { return (VariableAttributes) attributes; } + set { attributes = (ushort) value; } + } + + public bool IsDebuggerHidden { + get { return attributes.GetAttributes ((ushort) VariableAttributes.DebuggerHidden); } + set { attributes = attributes.SetAttributes ((ushort) VariableAttributes.DebuggerHidden, value); } + } + + internal VariableDebugInformation (int index, string name) + { + if (name == null) + throw new ArgumentNullException ("name"); + + this.index = new VariableIndex (index); + this.name = name; + } + + public VariableDebugInformation (VariableDefinition variable, string name) + { + if (variable == null) + throw new ArgumentNullException ("variable"); + if (name == null) + throw new ArgumentNullException ("name"); + + this.index = new VariableIndex (variable); + this.name = name; + this.token = new MetadataToken (TokenType.LocalVariable); + } + } + + public sealed class ConstantDebugInformation : DebugInformation { + + string name; + TypeReference constant_type; + object value; + + public string Name { + get { return name; } + set { name = value; } + } + + public TypeReference ConstantType { + get { return constant_type; } + set { constant_type = value; } + } + + public object Value { + get { return value; } + set { this.value = value; } + } + + public ConstantDebugInformation (string name, TypeReference constant_type, object value) + { + if (name == null) + throw new ArgumentNullException ("name"); + + this.name = name; + this.constant_type = constant_type; + this.value = value; + this.token = new MetadataToken (TokenType.LocalConstant); + } + } + + public enum ImportTargetKind : byte { + ImportNamespace = 1, + ImportNamespaceInAssembly = 2, + ImportType = 3, + ImportXmlNamespaceWithAlias = 4, + ImportAlias = 5, + DefineAssemblyAlias = 6, + DefineNamespaceAlias = 7, + DefineNamespaceInAssemblyAlias = 8, + DefineTypeAlias = 9, + } + + public sealed class ImportTarget { + + internal ImportTargetKind kind; + + internal string @namespace; + internal TypeReference type; + internal AssemblyNameReference reference; + internal string alias; + + public string Namespace { + get { return @namespace; } + set { @namespace = value; } + } + + public TypeReference Type { + get { return type; } + set { type = value; } + } + + public AssemblyNameReference AssemblyReference { + get { return reference; } + set { reference = value; } + } + + public string Alias { + get { return alias; } + set { alias = value; } + } + + public ImportTargetKind Kind { + get { return kind; } + set { kind = value; } + } + + public ImportTarget (ImportTargetKind kind) + { + this.kind = kind; + } + } + + public sealed class ImportDebugInformation : DebugInformation { + + internal ImportDebugInformation parent; + internal Collection targets; + + public bool HasTargets { + get { return !targets.IsNullOrEmpty (); } + } + + public Collection Targets { + get { return targets ?? (targets = new Collection ()); } + } + + public ImportDebugInformation Parent { + get { return parent; } + set { parent = value; } + } + + public ImportDebugInformation () + { + this.token = new MetadataToken (TokenType.ImportScope); + } + } + + public interface ICustomDebugInformationProvider : IMetadataTokenProvider { + bool HasCustomDebugInformations { get; } + Collection CustomDebugInformations { get; } + } + + public enum CustomDebugInformationKind { + Binary, + StateMachineScope, + DynamicVariable, + DefaultNamespace, + AsyncMethodBody, + EmbeddedSource, + SourceLink, + } + + public abstract class CustomDebugInformation : DebugInformation { + + Guid identifier; + + public Guid Identifier { + get { return identifier; } + } + + public abstract CustomDebugInformationKind Kind { get; } + + internal CustomDebugInformation (Guid identifier) + { + this.identifier = identifier; + this.token = new MetadataToken (TokenType.CustomDebugInformation); + } + } + + public sealed class BinaryCustomDebugInformation : CustomDebugInformation { + + byte [] data; + + public byte [] Data { + get { return data; } + set { data = value; } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.Binary; } + } + + public BinaryCustomDebugInformation (Guid identifier, byte [] data) + : base (identifier) + { + this.data = data; + } + } + + public sealed class AsyncMethodBodyDebugInformation : CustomDebugInformation { + + internal InstructionOffset catch_handler; + internal Collection yields; + internal Collection resumes; + internal Collection resume_methods; + + public InstructionOffset CatchHandler { + get { return catch_handler; } + set { catch_handler = value; } + } + + public Collection Yields { + get { return yields ?? (yields = new Collection ()); } + } + + public Collection Resumes { + get { return resumes ?? (resumes = new Collection ()); } + } + + public Collection ResumeMethods { + get { return resume_methods ?? (resume_methods = new Collection ()); } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.AsyncMethodBody; } + } + + public static Guid KindIdentifier = new Guid ("{54FD2AC5-E925-401A-9C2A-F94F171072F8}"); + + internal AsyncMethodBodyDebugInformation (int catchHandler) + : base (KindIdentifier) + { + this.catch_handler = new InstructionOffset (catchHandler); + } + + public AsyncMethodBodyDebugInformation (Instruction catchHandler) + : base (KindIdentifier) + { + this.catch_handler = new InstructionOffset (catchHandler); + } + + public AsyncMethodBodyDebugInformation () + : base (KindIdentifier) + { + this.catch_handler = new InstructionOffset (-1); + } + } + + public sealed class StateMachineScope { + + internal InstructionOffset start; + internal InstructionOffset end; + + public InstructionOffset Start { + get { return start; } + set { start = value; } + } + + public InstructionOffset End { + get { return end; } + set { end = value; } + } + + internal StateMachineScope (int start, int end) + { + this.start = new InstructionOffset (start); + this.end = new InstructionOffset (end); + } + + public StateMachineScope (Instruction start, Instruction end) + { + this.start = new InstructionOffset (start); + this.end = end != null ? new InstructionOffset (end) : new InstructionOffset (); + } + } + + public sealed class StateMachineScopeDebugInformation : CustomDebugInformation { + + internal Collection scopes; + + public Collection Scopes { + get { return scopes ?? (scopes = new Collection ()); } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.StateMachineScope; } + } + + public static Guid KindIdentifier = new Guid ("{6DA9A61E-F8C7-4874-BE62-68BC5630DF71}"); + + public StateMachineScopeDebugInformation () + : base (KindIdentifier) + { + } + } + + public sealed class EmbeddedSourceDebugInformation : CustomDebugInformation { + + internal byte [] content; + internal bool compress; + + public byte [] Content { + get { return content; } + set { content = value; } + } + + public bool Compress { + get { return compress; } + set { compress = value; } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.EmbeddedSource; } + } + + public static Guid KindIdentifier = new Guid ("{0E8A571B-6926-466E-B4AD-8AB04611F5FE}"); + + public EmbeddedSourceDebugInformation (byte [] content, bool compress) + : base (KindIdentifier) + { + this.content = content; + this.compress = compress; + } + } + + public sealed class SourceLinkDebugInformation : CustomDebugInformation { + + internal string content; + + public string Content { + get { return content; } + set { content = value; } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.SourceLink; } + } + + public static Guid KindIdentifier = new Guid ("{CC110556-A091-4D38-9FEC-25AB9A351A6A}"); + + public SourceLinkDebugInformation (string content) + : base (KindIdentifier) + { + this.content = content; + } + } + + public sealed class MethodDebugInformation : DebugInformation { + + internal MethodDefinition method; + internal Collection sequence_points; + internal ScopeDebugInformation scope; + internal MethodDefinition kickoff_method; + internal int code_size; + internal MetadataToken local_var_token; + + public MethodDefinition Method { + get { return method; } + } + + public bool HasSequencePoints { + get { return !sequence_points.IsNullOrEmpty (); } + } + + public Collection SequencePoints { + get { return sequence_points ?? (sequence_points = new Collection ()); } + } + + public ScopeDebugInformation Scope { + get { return scope; } + set { scope = value; } + } + + public MethodDefinition StateMachineKickOffMethod { + get { return kickoff_method; } + set { kickoff_method = value; } + } + + internal MethodDebugInformation (MethodDefinition method) + { + if (method == null) + throw new ArgumentNullException ("method"); + + this.method = method; + this.token = new MetadataToken (TokenType.MethodDebugInformation, method.MetadataToken.RID); + } + + public SequencePoint GetSequencePoint (Instruction instruction) + { + if (!HasSequencePoints) + return null; + + for (int i = 0; i < sequence_points.Count; i++) + if (sequence_points [i].Offset == instruction.Offset) + return sequence_points [i]; + + return null; + } + + public IDictionary GetSequencePointMapping () + { + var instruction_mapping = new Dictionary (); + if (!HasSequencePoints || !method.HasBody) + return instruction_mapping; + + var offset_mapping = new Dictionary (sequence_points.Count); + + for (int i = 0; i < sequence_points.Count; i++) { + if (!offset_mapping.ContainsKey (sequence_points [i].Offset)) + offset_mapping.Add (sequence_points [i].Offset, sequence_points [i]); + } + + var instructions = method.Body.Instructions; + + for (int i = 0; i < instructions.Count; i++) { + SequencePoint sequence_point; + if (offset_mapping.TryGetValue (instructions [i].Offset, out sequence_point)) + instruction_mapping.Add (instructions [i], sequence_point); + } + + return instruction_mapping; + } + + public IEnumerable GetScopes () + { + if (scope == null) + return Empty.Array; + + return GetScopes (new[] { scope }); + } + + static IEnumerable GetScopes (IList scopes) + { + for (int i = 0; i < scopes.Count; i++) { + var scope = scopes [i]; + + yield return scope; + + if (!scope.HasScopes) + continue; + + foreach (var sub_scope in GetScopes (scope.Scopes)) + yield return sub_scope; + } + } + + public bool TryGetName (VariableDefinition variable, out string name) + { + name = null; + + var has_name = false; + var unique_name = ""; + + foreach (var scope in GetScopes ()) { + string slot_name; + if (!scope.TryGetName (variable, out slot_name)) + continue; + + if (!has_name) { + has_name = true; + unique_name = slot_name; + continue; + } + + if (unique_name != slot_name) + return false; + } + + name = unique_name; + return has_name; + } + } + + public interface ISymbolReader : IDisposable { +#if !READ_ONLY + ISymbolWriterProvider GetWriterProvider (); +#endif + bool ProcessDebugHeader (ImageDebugHeader header); + MethodDebugInformation Read (MethodDefinition method); + } + + public interface ISymbolReaderProvider { + ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName); + ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream); + } + +#if !NET_CORE + [Serializable] +#endif + public sealed class SymbolsNotFoundException : FileNotFoundException { + + public SymbolsNotFoundException (string message) : base (message) + { + } + +#if !NET_CORE + SymbolsNotFoundException ( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base (info, context) + { + } +#endif + } + +#if !NET_CORE + [Serializable] +#endif + public sealed class SymbolsNotMatchingException : InvalidOperationException { + + public SymbolsNotMatchingException (string message) : base (message) + { + } + +#if !NET_CORE + SymbolsNotMatchingException ( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base (info, context) + { + } +#endif + } + + public class DefaultSymbolReaderProvider : ISymbolReaderProvider { + + readonly bool throw_if_no_symbol; + + public DefaultSymbolReaderProvider () + : this (throwIfNoSymbol: true) + { + } + + public DefaultSymbolReaderProvider (bool throwIfNoSymbol) + { + throw_if_no_symbol = throwIfNoSymbol; + } + + public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName) + { + if (module.Image.HasDebugTables ()) + return null; + + if (module.HasDebugHeader) { + var header = module.GetDebugHeader (); + var entry = header.GetEmbeddedPortablePdbEntry (); + if (entry != null) + return new EmbeddedPortablePdbReaderProvider ().GetSymbolReader (module, fileName); + } + + var pdb_file_name = Mixin.GetPdbFileName (fileName); + + if (File.Exists (pdb_file_name)) { + if (Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName))) + return new PortablePdbReaderProvider ().GetSymbolReader (module, fileName); + + try { + return SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, fileName); + } catch (Exception) { + // We might not include support for native pdbs. + } + } + + var mdb_file_name = Mixin.GetMdbFileName (fileName); + if (File.Exists (mdb_file_name)) { + try { + return SymbolProvider.GetReaderProvider (SymbolKind.Mdb).GetSymbolReader (module, fileName); + } catch (Exception) { + // We might not include support for mdbs. + } + } + + if (throw_if_no_symbol) + throw new SymbolsNotFoundException (string.Format ("No symbol found for file: {0}", fileName)); + + return null; + } + + public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream) + { + if (module.Image.HasDebugTables ()) + return null; + + if (module.HasDebugHeader) { + var header = module.GetDebugHeader (); + var entry = header.GetEmbeddedPortablePdbEntry (); + if (entry != null) + return new EmbeddedPortablePdbReaderProvider ().GetSymbolReader (module, ""); + } + + Mixin.CheckStream (symbolStream); + Mixin.CheckReadSeek (symbolStream); + + var position = symbolStream.Position; + + const int portablePdbHeader = 0x424a5342; + + var reader = new BinaryStreamReader (symbolStream); + var intHeader = reader.ReadInt32 (); + symbolStream.Position = position; + + if (intHeader == portablePdbHeader) { + return new PortablePdbReaderProvider ().GetSymbolReader (module, symbolStream); + } + + const string nativePdbHeader = "Microsoft C/C++ MSF 7.00"; + + var bytesHeader = reader.ReadBytes (nativePdbHeader.Length); + symbolStream.Position = position; + var isNativePdb = true; + + for (var i = 0; i < bytesHeader.Length; i++) { + if (bytesHeader [i] != (byte) nativePdbHeader [i]) { + isNativePdb = false; + break; + } + } + + if (isNativePdb) { + try { + return SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, symbolStream); + } catch (Exception) { + // We might not include support for native pdbs. + } + } + + const long mdbHeader = 0x45e82623fd7fa614; + + var longHeader = reader.ReadInt64 (); + symbolStream.Position = position; + + if (longHeader == mdbHeader) { + try { + return SymbolProvider.GetReaderProvider (SymbolKind.Mdb).GetSymbolReader (module, symbolStream); + } catch (Exception) { + // We might not include support for mdbs. + } + } + + if (throw_if_no_symbol) + throw new SymbolsNotFoundException (string.Format ("No symbols found in stream")); + + return null; + } + } + + enum SymbolKind { + NativePdb, + PortablePdb, + EmbeddedPortablePdb, + Mdb, + } + + static class SymbolProvider { + + static SR.AssemblyName GetSymbolAssemblyName (SymbolKind kind) + { + if (kind == SymbolKind.PortablePdb) + throw new ArgumentException (); + + var suffix = GetSymbolNamespace (kind); + + var cecil_name = typeof (SymbolProvider).Assembly ().GetName (); + + var name = new SR.AssemblyName { + Name = cecil_name.Name + "." + suffix, + Version = cecil_name.Version, +#if NET_CORE + CultureName = cecil_name.CultureName, +#else + CultureInfo = cecil_name.CultureInfo, +#endif + }; + + name.SetPublicKeyToken (cecil_name.GetPublicKeyToken ()); + + return name; + } + + static Type GetSymbolType (SymbolKind kind, string fullname) + { + var type = Type.GetType (fullname); + if (type != null) + return type; + + var assembly_name = GetSymbolAssemblyName (kind); + + type = Type.GetType (fullname + ", " + assembly_name.FullName); + if (type != null) + return type; + + try { + var assembly = SR.Assembly.Load (assembly_name); + if (assembly != null) + return assembly.GetType (fullname); + } catch (FileNotFoundException) { + } catch (FileLoadException) { + } + + return null; + } + + public static ISymbolReaderProvider GetReaderProvider (SymbolKind kind) + { + if (kind == SymbolKind.PortablePdb) + return new PortablePdbReaderProvider (); + if (kind == SymbolKind.EmbeddedPortablePdb) + return new EmbeddedPortablePdbReaderProvider (); + + var provider_name = GetSymbolTypeName (kind, "ReaderProvider"); + var type = GetSymbolType (kind, provider_name); + if (type == null) + throw new TypeLoadException ("Could not find symbol provider type " + provider_name); + + return (ISymbolReaderProvider) Activator.CreateInstance (type); + } + + static string GetSymbolTypeName (SymbolKind kind, string name) + { + return "Mono.Cecil" + "." + GetSymbolNamespace (kind) + "." + kind + name; + } + + static string GetSymbolNamespace (SymbolKind kind) + { + if (kind == SymbolKind.PortablePdb || kind == SymbolKind.EmbeddedPortablePdb) + return "Cil"; + if (kind == SymbolKind.NativePdb) + return "Pdb"; + if (kind == SymbolKind.Mdb) + return "Mdb"; + + throw new ArgumentException (); + } + } + +#if !READ_ONLY + + public interface ISymbolWriter : IDisposable { + + ISymbolReaderProvider GetReaderProvider (); + ImageDebugHeader GetDebugHeader (); + void Write (MethodDebugInformation info); + } + + public interface ISymbolWriterProvider { + + ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName); + ISymbolWriter GetSymbolWriter (ModuleDefinition module, Stream symbolStream); + } + + public class DefaultSymbolWriterProvider : ISymbolWriterProvider { + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fileName) + { + var reader = module.SymbolReader; + if (reader == null) + throw new InvalidOperationException (); + + if (module.Image != null && module.Image.HasDebugTables ()) + return null; + + return reader.GetWriterProvider ().GetSymbolWriter (module, fileName); + } + + public ISymbolWriter GetSymbolWriter (ModuleDefinition module, Stream symbolStream) + { + throw new NotSupportedException (); + } + } + +#endif +} + +namespace Mono.Cecil { + + static partial class Mixin { + + public static ImageDebugHeaderEntry GetCodeViewEntry (this ImageDebugHeader header) + { + return GetEntry (header, ImageDebugType.CodeView); + } + + public static ImageDebugHeaderEntry GetDeterministicEntry (this ImageDebugHeader header) + { + return GetEntry (header, ImageDebugType.Deterministic); + } + + public static ImageDebugHeader AddDeterministicEntry (this ImageDebugHeader header) + { + var entry = new ImageDebugHeaderEntry (new ImageDebugDirectory { Type = ImageDebugType.Deterministic }, Empty.Array); + if (header == null) + return new ImageDebugHeader (entry); + + var entries = new ImageDebugHeaderEntry [header.Entries.Length + 1]; + Array.Copy (header.Entries, entries, header.Entries.Length); + entries [entries.Length - 1] = entry; + return new ImageDebugHeader (entries); + } + + public static ImageDebugHeaderEntry GetEmbeddedPortablePdbEntry (this ImageDebugHeader header) + { + return GetEntry (header, ImageDebugType.EmbeddedPortablePdb); + } + + private static ImageDebugHeaderEntry GetEntry (this ImageDebugHeader header, ImageDebugType type) + { + if (!header.HasEntries) + return null; + + for (var i = 0; i < header.Entries.Length; i++) { + var entry = header.Entries [i]; + if (entry.Directory.Type == type) + return entry; + } + + return null; + } + + public static string GetPdbFileName (string assemblyFileName) + { + return Path.ChangeExtension (assemblyFileName, ".pdb"); + } + + public static string GetMdbFileName (string assemblyFileName) + { + return assemblyFileName + ".mdb"; + } + + public static bool IsPortablePdb (string fileName) + { + using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + return IsPortablePdb (file); + } + + public static bool IsPortablePdb (Stream stream) + { + const uint ppdb_signature = 0x424a5342; + + if (stream.Length < 4) return false; + var position = stream.Position; + try { + var reader = new BinaryReader (stream); + return reader.ReadUInt32 () == ppdb_signature; + } finally { + stream.Position = position; + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs.meta new file mode 100644 index 0000000..b715c23 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/Symbols.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d2209ce408298e4fad2c4678b231271 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs new file mode 100644 index 0000000..bd13284 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs @@ -0,0 +1,29 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Cil { + + public sealed class VariableDefinition : VariableReference { + + public bool IsPinned { + get { return variable_type.IsPinned; } + } + + public VariableDefinition (TypeReference variableType) + : base (variableType) + { + } + + public override VariableDefinition Resolve () + { + return this; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs.meta new file mode 100644 index 0000000..3814e9b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 249f2dbd4c5cfc742a0a172d572e1fca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs new file mode 100644 index 0000000..fb12e8c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs @@ -0,0 +1,42 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Cil { + + public abstract class VariableReference { + + internal int index = -1; + protected TypeReference variable_type; + + public TypeReference VariableType { + get { return variable_type; } + set { variable_type = value; } + } + + public int Index { + get { return index; } + } + + internal VariableReference (TypeReference variable_type) + { + this.variable_type = variable_type; + } + + public abstract VariableDefinition Resolve (); + + public override string ToString () + { + if (index >= 0) + return "V_" + index; + + return string.Empty; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs.meta new file mode 100644 index 0000000..6255223 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Cil/VariableReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9b7fe5ffeb9764478a69be035537257 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata.meta new file mode 100644 index 0000000..ba16057 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29bc12203fd109e4489a2eb375f01a06 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs new file mode 100644 index 0000000..574a130 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs @@ -0,0 +1,54 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil.Metadata { + + sealed class BlobHeap : Heap { + + public BlobHeap (byte [] data) + : base (data) + { + } + + public byte [] Read (uint index) + { + if (index == 0 || index > this.data.Length - 1) + return Empty.Array; + + int position = (int) index; + int length = (int) data.ReadCompressedUInt32 (ref position); + + if (length > data.Length - position) + return Empty.Array; + + var buffer = new byte [length]; + + Buffer.BlockCopy (data, position, buffer, 0, length); + + return buffer; + } + + public void GetView (uint signature, out byte [] buffer, out int index, out int length) + { + if (signature == 0 || signature > data.Length - 1) { + buffer = null; + index = length = 0; + return; + } + + buffer = data; + + index = (int) signature; + length = (int) buffer.ReadCompressedUInt32 (ref index); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs.meta new file mode 100644 index 0000000..dbefcd4 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/BlobHeap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0970a5a562614f349804949f1893dc06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs new file mode 100644 index 0000000..d87cb2a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs @@ -0,0 +1,505 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.Text; + +using Mono.Cecil.PE; + +using RVA = System.UInt32; + +#if !READ_ONLY + +namespace Mono.Cecil.Metadata { + + sealed class TableHeapBuffer : HeapBuffer { + + readonly ModuleDefinition module; + readonly MetadataBuilder metadata; + + readonly internal TableInformation [] table_infos = new TableInformation [Mixin.TableCount]; + readonly internal MetadataTable [] tables = new MetadataTable [Mixin.TableCount]; + + bool large_string; + bool large_blob; + bool large_guid; + + readonly int [] coded_index_sizes = new int [Mixin.CodedIndexCount]; + readonly Func counter; + + internal uint [] string_offsets; + + public override bool IsEmpty { + get { return false; } + } + + public TableHeapBuffer (ModuleDefinition module, MetadataBuilder metadata) + : base (24) + { + this.module = module; + this.metadata = metadata; + this.counter = GetTableLength; + } + + int GetTableLength (Table table) + { + return (int) table_infos [(int) table].Length; + } + + public TTable GetTable (Table table) where TTable : MetadataTable, new () + { + var md_table = (TTable) tables [(int) table]; + if (md_table != null) + return md_table; + + md_table = new TTable (); + tables [(int) table] = md_table; + return md_table; + } + + public void WriteBySize (uint value, int size) + { + if (size == 4) + WriteUInt32 (value); + else + WriteUInt16 ((ushort) value); + } + + public void WriteBySize (uint value, bool large) + { + if (large) + WriteUInt32 (value); + else + WriteUInt16 ((ushort) value); + } + + public void WriteString (uint @string) + { + WriteBySize (string_offsets [@string], large_string); + } + + public void WriteBlob (uint blob) + { + WriteBySize (blob, large_blob); + } + + public void WriteGuid (uint guid) + { + WriteBySize (guid, large_guid); + } + + public void WriteRID (uint rid, Table table) + { + WriteBySize (rid, table_infos [(int) table].IsLarge); + } + + int GetCodedIndexSize (CodedIndex coded_index) + { + var index = (int) coded_index; + var size = coded_index_sizes [index]; + if (size != 0) + return size; + + return coded_index_sizes [index] = coded_index.GetSize (counter); + } + + public void WriteCodedRID (uint rid, CodedIndex coded_index) + { + WriteBySize (rid, GetCodedIndexSize (coded_index)); + } + + public void WriteTableHeap () + { + WriteUInt32 (0); // Reserved + WriteByte (GetTableHeapVersion ()); // MajorVersion + WriteByte (0); // MinorVersion + WriteByte (GetHeapSizes ()); // HeapSizes + WriteByte (10); // Reserved2 + WriteUInt64 (GetValid ()); // Valid + WriteUInt64 (0xc416003301fa00); // Sorted + + WriteRowCount (); + WriteTables (); + } + + void WriteRowCount () + { + for (int i = 0; i < tables.Length; i++) { + var table = tables [i]; + if (table == null || table.Length == 0) + continue; + + WriteUInt32 ((uint) table.Length); + } + } + + void WriteTables () + { + for (int i = 0; i < tables.Length; i++) { + var table = tables [i]; + if (table == null || table.Length == 0) + continue; + + table.Write (this); + } + } + + ulong GetValid () + { + ulong valid = 0; + + for (int i = 0; i < tables.Length; i++) { + var table = tables [i]; + if (table == null || table.Length == 0) + continue; + + table.Sort (); + valid |= (1UL << i); + } + + return valid; + } + + public void ComputeTableInformations () + { + if (metadata.metadata_builder != null) + ComputeTableInformations (metadata.metadata_builder.table_heap); + + ComputeTableInformations (metadata.table_heap); + } + + void ComputeTableInformations (TableHeapBuffer table_heap) + { + var tables = table_heap.tables; + for (int i = 0; i < tables.Length; i++) { + var table = tables [i]; + if (table != null && table.Length > 0) + table_infos [i].Length = (uint) table.Length; + } + } + + byte GetHeapSizes () + { + byte heap_sizes = 0; + + if (metadata.string_heap.IsLarge) { + large_string = true; + heap_sizes |= 0x01; + } + + if (metadata.guid_heap.IsLarge) { + large_guid = true; + heap_sizes |= 0x02; + } + + if (metadata.blob_heap.IsLarge) { + large_blob = true; + heap_sizes |= 0x04; + } + + return heap_sizes; + } + + byte GetTableHeapVersion () + { + switch (module.Runtime) { + case TargetRuntime.Net_1_0: + case TargetRuntime.Net_1_1: + return 1; + default: + return 2; + } + } + + public void FixupData (RVA data_rva) + { + var table = GetTable (Table.FieldRVA); + if (table.length == 0) + return; + + var field_idx_size = GetTable (Table.Field).IsLarge ? 4 : 2; + var previous = this.position; + + base.position = table.position; + for (int i = 0; i < table.length; i++) { + var rva = ReadUInt32 (); + base.position -= 4; + WriteUInt32 (rva + data_rva); + base.position += field_idx_size; + } + + base.position = previous; + } + } + + sealed class ResourceBuffer : ByteBuffer { + + public ResourceBuffer () + : base (0) + { + } + + public uint AddResource (byte [] resource) + { + var offset = (uint) this.position; + WriteInt32 (resource.Length); + WriteBytes (resource); + return offset; + } + } + + sealed class DataBuffer : ByteBuffer { + + public DataBuffer () + : base (0) + { + } + + public RVA AddData (byte [] data) + { + var rva = (RVA) position; + WriteBytes (data); + return rva; + } + } + + abstract class HeapBuffer : ByteBuffer { + + public bool IsLarge { + get { return base.length > 65535; } + } + + public abstract bool IsEmpty { get; } + + protected HeapBuffer (int length) + : base (length) + { + } + } + + sealed class GuidHeapBuffer : HeapBuffer { + + readonly Dictionary guids = new Dictionary (); + + public override bool IsEmpty { + get { return length == 0; } + } + + public GuidHeapBuffer () + : base (16) + { + } + + public uint GetGuidIndex (Guid guid) + { + uint index; + if (guids.TryGetValue (guid, out index)) + return index; + + index = (uint) guids.Count + 1; + WriteGuid (guid); + guids.Add (guid, index); + return index; + } + + void WriteGuid (Guid guid) + { + WriteBytes (guid.ToByteArray ()); + } + } + + class StringHeapBuffer : HeapBuffer { + + protected Dictionary strings = new Dictionary (StringComparer.Ordinal); + + public sealed override bool IsEmpty { + get { return length <= 1; } + } + + public StringHeapBuffer () + : base (1) + { + WriteByte (0); + } + + public virtual uint GetStringIndex (string @string) + { + uint index; + if (strings.TryGetValue (@string, out index)) + return index; + + index = (uint) strings.Count + 1; + strings.Add (@string, index); + return index; + } + + public uint [] WriteStrings () + { + var sorted = SortStrings (strings); + strings = null; + + // Add 1 for empty string whose index and offset are both 0 + var string_offsets = new uint [sorted.Count + 1]; + string_offsets [0] = 0; + + // Find strings that can be folded + var previous = string.Empty; + foreach (var entry in sorted) { + var @string = entry.Key; + var index = entry.Value; + var position = base.position; + + if (previous.EndsWith (@string, StringComparison.Ordinal) && !IsLowSurrogateChar (entry.Key [0])) { + // Map over the tail of prev string. Watch for null-terminator of prev string. + string_offsets [index] = (uint) (position - (Encoding.UTF8.GetByteCount (entry.Key) + 1)); + } else { + string_offsets [index] = (uint) position; + WriteString (@string); + } + + previous = entry.Key; + } + + return string_offsets; + } + + static List> SortStrings (Dictionary strings) + { + var sorted = new List> (strings); + sorted.Sort (new SuffixSort ()); + return sorted; + } + + static bool IsLowSurrogateChar (int c) + { + return unchecked((uint)(c - 0xDC00)) <= 0xDFFF - 0xDC00; + } + + protected virtual void WriteString (string @string) + { + WriteBytes (Encoding.UTF8.GetBytes (@string)); + WriteByte (0); + } + + // Sorts strings such that a string is followed immediately by all strings + // that are a suffix of it. + private class SuffixSort : IComparer> { + + public int Compare(KeyValuePair xPair, KeyValuePair yPair) + { + var x = xPair.Key; + var y = yPair.Key; + + for (int i = x.Length - 1, j = y.Length - 1; i >= 0 & j >= 0; i--, j--) { + if (x [i] < y [j]) { + return -1; + } + + if (x [i] > y [j]) { + return +1; + } + } + + return y.Length.CompareTo (x.Length); + } + } + } + + sealed class BlobHeapBuffer : HeapBuffer { + + readonly Dictionary blobs = new Dictionary (new ByteBufferEqualityComparer ()); + + public override bool IsEmpty { + get { return length <= 1; } + } + + public BlobHeapBuffer () + : base (1) + { + WriteByte (0); + } + + public uint GetBlobIndex (ByteBuffer blob) + { + uint index; + if (blobs.TryGetValue (blob, out index)) + return index; + + index = (uint) base.position; + WriteBlob (blob); + blobs.Add (blob, index); + return index; + } + + void WriteBlob (ByteBuffer blob) + { + WriteCompressedUInt32 ((uint) blob.length); + WriteBytes (blob); + } + } + + sealed class UserStringHeapBuffer : StringHeapBuffer { + + public override uint GetStringIndex (string @string) + { + uint index; + if (strings.TryGetValue (@string, out index)) + return index; + + index = (uint) base.position; + WriteString (@string); + strings.Add (@string, index); + return index; + } + + protected override void WriteString (string @string) + { + WriteCompressedUInt32 ((uint) @string.Length * 2 + 1); + + byte special = 0; + + for (int i = 0; i < @string.Length; i++) { + var @char = @string [i]; + WriteUInt16 (@char); + + if (special == 1) + continue; + + if (@char < 0x20 || @char > 0x7e) { + if (@char > 0x7e + || (@char >= 0x01 && @char <= 0x08) + || (@char >= 0x0e && @char <= 0x1f) + || @char == 0x27 + || @char == 0x2d) { + + special = 1; + } + } + } + + WriteByte (special); + } + } + + sealed class PdbHeapBuffer : HeapBuffer { + + public override bool IsEmpty { + get { return false; } + } + + public PdbHeapBuffer () + : base (0) + { + } + } +} + +#endif diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs.meta new file mode 100644 index 0000000..d8dc80c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Buffers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7514497fc8d6fca4ca755934cd21fee3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs new file mode 100644 index 0000000..2026a8a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs @@ -0,0 +1,29 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Metadata { + + enum CodedIndex { + TypeDefOrRef, + HasConstant, + HasCustomAttribute, + HasFieldMarshal, + HasDeclSecurity, + MemberRefParent, + HasSemantics, + MethodDefOrRef, + MemberForwarded, + Implementation, + CustomAttributeType, + ResolutionScope, + TypeOrMethodDef, + HasCustomDebugInformation, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs.meta new file mode 100644 index 0000000..7d19eaf --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/CodedIndex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bc5b2efed0df0b4481a686f119b5f19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs new file mode 100644 index 0000000..2190160 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs @@ -0,0 +1,55 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Metadata { + + enum ElementType : byte { + None = 0x00, + Void = 0x01, + Boolean = 0x02, + Char = 0x03, + I1 = 0x04, + U1 = 0x05, + I2 = 0x06, + U2 = 0x07, + I4 = 0x08, + U4 = 0x09, + I8 = 0x0a, + U8 = 0x0b, + R4 = 0x0c, + R8 = 0x0d, + String = 0x0e, + Ptr = 0x0f, // Followed by token + ByRef = 0x10, // Followed by token + ValueType = 0x11, // Followed by token + Class = 0x12, // Followed by token + Var = 0x13, // Followed by generic parameter number + Array = 0x14, // + GenericInst = 0x15, // ... */ + TypedByRef = 0x16, + I = 0x18, // System.IntPtr + U = 0x19, // System.UIntPtr + FnPtr = 0x1b, // Followed by full method signature + Object = 0x1c, // System.Object + SzArray = 0x1d, // Single-dim array with 0 lower bound + MVar = 0x1e, // Followed by generic parameter number + CModReqD = 0x1f, // Required modifier : followed by a TypeDef or TypeRef token + CModOpt = 0x20, // Optional modifier : followed by a TypeDef or TypeRef token + Internal = 0x21, // Implemented within the CLI + Modifier = 0x40, // Or'd with following element types + Sentinel = 0x41, // Sentinel for varargs method signature + Pinned = 0x45, // Denotes a local variable that points at a pinned object + + // special undocumented constants + Type = 0x50, + Boxed = 0x51, + Enum = 0x55 + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs.meta new file mode 100644 index 0000000..bc21ff1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/ElementType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b9f0d5d70effe442a34611469e3108b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs new file mode 100644 index 0000000..76ec9d1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs @@ -0,0 +1,36 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil.Metadata { + + sealed class GuidHeap : Heap { + + public GuidHeap (byte [] data) + : base (data) + { + } + + public Guid Read (uint index) + { + const int guid_size = 16; + + if (index == 0 || ((index - 1) + guid_size) > data.Length) + return new Guid (); + + var buffer = new byte [guid_size]; + + Buffer.BlockCopy (this.data, (int) ((index - 1) * guid_size), buffer, 0, guid_size); + + return new Guid (buffer); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs.meta new file mode 100644 index 0000000..f7adfc0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/GuidHeap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c300db4e3060db4f88da49de2d2e9e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs new file mode 100644 index 0000000..6874d79 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs @@ -0,0 +1,24 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Metadata { + + abstract class Heap { + + public int IndexSize; + + readonly internal byte [] data; + + protected Heap (byte [] data) + { + this.data = data; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs.meta new file mode 100644 index 0000000..168fd57 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Heap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 668142f38294d744b8165536041c0fc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs new file mode 100644 index 0000000..a8b712e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs @@ -0,0 +1,94 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public struct MetadataToken : IEquatable { + + readonly uint token; + + public uint RID { + get { return token & 0x00ffffff; } + } + + public TokenType TokenType { + get { return (TokenType) (token & 0xff000000); } + } + + public static readonly MetadataToken Zero = new MetadataToken ((uint) 0); + + public MetadataToken (uint token) + { + this.token = token; + } + + public MetadataToken (TokenType type) + : this (type, 0) + { + } + + public MetadataToken (TokenType type, uint rid) + { + token = (uint) type | rid; + } + + public MetadataToken (TokenType type, int rid) + { + token = (uint) type | (uint) rid; + } + + public int ToInt32 () + { + return (int) token; + } + + public uint ToUInt32 () + { + return token; + } + + public override int GetHashCode () + { + return (int) token; + } + + public bool Equals (MetadataToken other) + { + return other.token == token; + } + + public override bool Equals (object obj) + { + if (obj is MetadataToken) { + var other = (MetadataToken) obj; + return other.token == token; + } + + return false; + } + + public static bool operator == (MetadataToken one, MetadataToken other) + { + return one.token == other.token; + } + + public static bool operator != (MetadataToken one, MetadataToken other) + { + return one.token != other.token; + } + + public override string ToString () + { + return string.Format ("[{0}:0x{1}]", TokenType, RID.ToString ("x4")); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs.meta new file mode 100644 index 0000000..573cea5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/MetadataToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61282a65259d830418119e30b793dab8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs new file mode 100644 index 0000000..39e275a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs @@ -0,0 +1,34 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using Mono.Cecil.PE; + +using RID = System.UInt32; + +namespace Mono.Cecil.Metadata { + + sealed class PdbHeap : Heap { + + public byte [] Id; + public RID EntryPoint; + public long TypeSystemTables; + public uint [] TypeSystemTableRows; + + public PdbHeap (byte [] data) + : base (data) + { + } + + public bool HasTable (Table table) + { + return (TypeSystemTables & (1L << (int) table)) != 0; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs.meta new file mode 100644 index 0000000..5d7fe10 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/PdbHeap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe32204eb1480834092d5e046c853af7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs new file mode 100644 index 0000000..0c05eba --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs @@ -0,0 +1,152 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System.Collections.Generic; + +namespace Mono.Cecil.Metadata { + + struct Row { + internal T1 Col1; + internal T2 Col2; + + public Row (T1 col1, T2 col2) + { + Col1 = col1; + Col2 = col2; + } + } + + struct Row { + internal T1 Col1; + internal T2 Col2; + internal T3 Col3; + + public Row (T1 col1, T2 col2, T3 col3) + { + Col1 = col1; + Col2 = col2; + Col3 = col3; + } + } + + struct Row { + internal T1 Col1; + internal T2 Col2; + internal T3 Col3; + internal T4 Col4; + + public Row (T1 col1, T2 col2, T3 col3, T4 col4) + { + Col1 = col1; + Col2 = col2; + Col3 = col3; + Col4 = col4; + } + } + + struct Row { + internal T1 Col1; + internal T2 Col2; + internal T3 Col3; + internal T4 Col4; + internal T5 Col5; + + public Row (T1 col1, T2 col2, T3 col3, T4 col4, T5 col5) + { + Col1 = col1; + Col2 = col2; + Col3 = col3; + Col4 = col4; + Col5 = col5; + } + } + + struct Row { + internal T1 Col1; + internal T2 Col2; + internal T3 Col3; + internal T4 Col4; + internal T5 Col5; + internal T6 Col6; + + public Row (T1 col1, T2 col2, T3 col3, T4 col4, T5 col5, T6 col6) + { + Col1 = col1; + Col2 = col2; + Col3 = col3; + Col4 = col4; + Col5 = col5; + Col6 = col6; + } + } + + struct Row { + internal T1 Col1; + internal T2 Col2; + internal T3 Col3; + internal T4 Col4; + internal T5 Col5; + internal T6 Col6; + internal T7 Col7; + internal T8 Col8; + internal T9 Col9; + + public Row (T1 col1, T2 col2, T3 col3, T4 col4, T5 col5, T6 col6, T7 col7, T8 col8, T9 col9) + { + Col1 = col1; + Col2 = col2; + Col3 = col3; + Col4 = col4; + Col5 = col5; + Col6 = col6; + Col7 = col7; + Col8 = col8; + Col9 = col9; + } + } + + sealed class RowEqualityComparer : IEqualityComparer>, IEqualityComparer>, IEqualityComparer> { + + public bool Equals (Row x, Row y) + { + return x.Col1 == y.Col1 + && x.Col2 == y.Col2; + } + + public int GetHashCode (Row obj) + { + string x = obj.Col1, y = obj.Col2; + return (x != null ? x.GetHashCode () : 0) ^ (y != null ? y.GetHashCode () : 0); + } + + public bool Equals (Row x, Row y) + { + return x.Col1 == y.Col1 + && x.Col2 == y.Col2; + } + + public int GetHashCode (Row obj) + { + return (int) (obj.Col1 ^ obj.Col2); + } + + public bool Equals (Row x, Row y) + { + return x.Col1 == y.Col1 + && x.Col2 == y.Col2 + && x.Col3 == y.Col3; + } + + public int GetHashCode (Row obj) + { + return (int) (obj.Col1 ^ obj.Col2 ^ obj.Col3); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs.meta new file mode 100644 index 0000000..36d6308 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Row.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 780a34d776d4262429edc11018a16556 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs new file mode 100644 index 0000000..4bde70e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs @@ -0,0 +1,60 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Mono.Cecil.Metadata { + + class StringHeap : Heap { + + readonly Dictionary strings = new Dictionary (); + + public StringHeap (byte [] data) + : base (data) + { + } + + public string Read (uint index) + { + if (index == 0) + return string.Empty; + + string @string; + if (strings.TryGetValue (index, out @string)) + return @string; + + if (index > data.Length - 1) + return string.Empty; + + @string = ReadStringAt (index); + if (@string.Length != 0) + strings.Add (index, @string); + + return @string; + } + + protected virtual string ReadStringAt (uint index) + { + int length = 0; + int start = (int) index; + + for (int i = start; ; i++) { + if (data [i] == 0) + break; + + length++; + } + + return Encoding.UTF8.GetString (data, start, length); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs.meta new file mode 100644 index 0000000..78ebbee --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/StringHeap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32e2f1cecfd2513489712964cb0e3c59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs new file mode 100644 index 0000000..dee655a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs @@ -0,0 +1,104 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using Mono.Cecil.PE; + +namespace Mono.Cecil.Metadata { + + enum Table : byte { + Module = 0x00, + TypeRef = 0x01, + TypeDef = 0x02, + FieldPtr = 0x03, + Field = 0x04, + MethodPtr = 0x05, + Method = 0x06, + ParamPtr = 0x07, + Param = 0x08, + InterfaceImpl = 0x09, + MemberRef = 0x0a, + Constant = 0x0b, + CustomAttribute = 0x0c, + FieldMarshal = 0x0d, + DeclSecurity = 0x0e, + ClassLayout = 0x0f, + FieldLayout = 0x10, + StandAloneSig = 0x11, + EventMap = 0x12, + EventPtr = 0x13, + Event = 0x14, + PropertyMap = 0x15, + PropertyPtr = 0x16, + Property = 0x17, + MethodSemantics = 0x18, + MethodImpl = 0x19, + ModuleRef = 0x1a, + TypeSpec = 0x1b, + ImplMap = 0x1c, + FieldRVA = 0x1d, + EncLog = 0x1e, + EncMap = 0x1f, + Assembly = 0x20, + AssemblyProcessor = 0x21, + AssemblyOS = 0x22, + AssemblyRef = 0x23, + AssemblyRefProcessor = 0x24, + AssemblyRefOS = 0x25, + File = 0x26, + ExportedType = 0x27, + ManifestResource = 0x28, + NestedClass = 0x29, + GenericParam = 0x2a, + MethodSpec = 0x2b, + GenericParamConstraint = 0x2c, + + Document = 0x30, + MethodDebugInformation = 0x31, + LocalScope = 0x32, + LocalVariable = 0x33, + LocalConstant = 0x34, + ImportScope = 0x35, + StateMachineMethod = 0x36, + CustomDebugInformation = 0x37, + } + + struct TableInformation { + public uint Offset; + public uint Length; + public uint RowSize; + + public bool IsLarge { + get { return Length > ushort.MaxValue; } + } + } + + sealed class TableHeap : Heap { + + public long Valid; + public long Sorted; + + public readonly TableInformation [] Tables = new TableInformation [Mixin.TableCount]; + + public TableInformation this [Table table] { + get { return Tables [(int) table]; } + } + + public TableHeap (byte [] data) + : base (data) + { + } + + public bool HasTable (Table table) + { + return (Valid & (1L << (int) table)) != 0; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs.meta new file mode 100644 index 0000000..9634200 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TableHeap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f523290b9ab607741aaf89bbe49ccab1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs new file mode 100644 index 0000000..547f6c6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs @@ -0,0 +1,49 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum TokenType : uint { + Module = 0x00000000, + TypeRef = 0x01000000, + TypeDef = 0x02000000, + Field = 0x04000000, + Method = 0x06000000, + Param = 0x08000000, + InterfaceImpl = 0x09000000, + MemberRef = 0x0a000000, + CustomAttribute = 0x0c000000, + Permission = 0x0e000000, + Signature = 0x11000000, + Event = 0x14000000, + Property = 0x17000000, + ModuleRef = 0x1a000000, + TypeSpec = 0x1b000000, + Assembly = 0x20000000, + AssemblyRef = 0x23000000, + File = 0x26000000, + ExportedType = 0x27000000, + ManifestResource = 0x28000000, + GenericParam = 0x2a000000, + MethodSpec = 0x2b000000, + GenericParamConstraint = 0x2c000000, + + Document = 0x30000000, + MethodDebugInformation = 0x31000000, + LocalScope = 0x32000000, + LocalVariable = 0x33000000, + LocalConstant = 0x34000000, + ImportScope = 0x35000000, + StateMachineMethod = 0x36000000, + CustomDebugInformation = 0x37000000, + + String = 0x70000000, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs.meta new file mode 100644 index 0000000..b3fd80b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/TokenType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 474031069d1f9c849a750680a0034682 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs new file mode 100644 index 0000000..7b1b42f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs @@ -0,0 +1,36 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil.Metadata { + + sealed class UserStringHeap : StringHeap { + + public UserStringHeap (byte [] data) + : base (data) + { + } + + protected override string ReadStringAt (uint index) + { + int start = (int) index; + + uint length = (uint) (data.ReadCompressedUInt32 (ref start) & ~1); + if (length < 1) + return string.Empty; + + var chars = new char [length / 2]; + + for (int i = start, j = 0; i < start + length; i += 2) + chars [j++] = (char) (data [i] | (data [i + 1] << 8)); + + return new string (chars); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs.meta new file mode 100644 index 0000000..92e7359 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/UserStringHeap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e1eda44cb9037742aaf5026491b43de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs new file mode 100644 index 0000000..3a4330d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs @@ -0,0 +1,652 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + static partial class Mixin { + + public const int TableCount = 58; + public const int CodedIndexCount = 14; + + public static uint ReadCompressedUInt32 (this byte [] data, ref int position) + { + uint integer; + if ((data [position] & 0x80) == 0) { + integer = data [position]; + position++; + } else if ((data [position] & 0x40) == 0) { + integer = (uint) (data [position] & ~0x80) << 8; + integer |= data [position + 1]; + position += 2; + } else { + integer = (uint) (data [position] & ~0xc0) << 24; + integer |= (uint) data [position + 1] << 16; + integer |= (uint) data [position + 2] << 8; + integer |= (uint) data [position + 3]; + position += 4; + } + return integer; + } + + public static MetadataToken GetMetadataToken (this CodedIndex self, uint data) + { + uint rid; + TokenType token_type; + switch (self) { + case CodedIndex.TypeDefOrRef: + rid = data >> 2; + switch (data & 3) { + case 0: + token_type = TokenType.TypeDef; goto ret; + case 1: + token_type = TokenType.TypeRef; goto ret; + case 2: + token_type = TokenType.TypeSpec; goto ret; + default: + goto exit; + } + case CodedIndex.HasConstant: + rid = data >> 2; + switch (data & 3) { + case 0: + token_type = TokenType.Field; goto ret; + case 1: + token_type = TokenType.Param; goto ret; + case 2: + token_type = TokenType.Property; goto ret; + default: + goto exit; + } + case CodedIndex.HasCustomAttribute: + rid = data >> 5; + switch (data & 31) { + case 0: + token_type = TokenType.Method; goto ret; + case 1: + token_type = TokenType.Field; goto ret; + case 2: + token_type = TokenType.TypeRef; goto ret; + case 3: + token_type = TokenType.TypeDef; goto ret; + case 4: + token_type = TokenType.Param; goto ret; + case 5: + token_type = TokenType.InterfaceImpl; goto ret; + case 6: + token_type = TokenType.MemberRef; goto ret; + case 7: + token_type = TokenType.Module; goto ret; + case 8: + token_type = TokenType.Permission; goto ret; + case 9: + token_type = TokenType.Property; goto ret; + case 10: + token_type = TokenType.Event; goto ret; + case 11: + token_type = TokenType.Signature; goto ret; + case 12: + token_type = TokenType.ModuleRef; goto ret; + case 13: + token_type = TokenType.TypeSpec; goto ret; + case 14: + token_type = TokenType.Assembly; goto ret; + case 15: + token_type = TokenType.AssemblyRef; goto ret; + case 16: + token_type = TokenType.File; goto ret; + case 17: + token_type = TokenType.ExportedType; goto ret; + case 18: + token_type = TokenType.ManifestResource; goto ret; + case 19: + token_type = TokenType.GenericParam; goto ret; + case 20: + token_type = TokenType.GenericParamConstraint; goto ret; + case 21: + token_type = TokenType.MethodSpec; goto ret; + default: + goto exit; + } + case CodedIndex.HasFieldMarshal: + rid = data >> 1; + switch (data & 1) { + case 0: + token_type = TokenType.Field; goto ret; + case 1: + token_type = TokenType.Param; goto ret; + default: + goto exit; + } + case CodedIndex.HasDeclSecurity: + rid = data >> 2; + switch (data & 3) { + case 0: + token_type = TokenType.TypeDef; goto ret; + case 1: + token_type = TokenType.Method; goto ret; + case 2: + token_type = TokenType.Assembly; goto ret; + default: + goto exit; + } + case CodedIndex.MemberRefParent: + rid = data >> 3; + switch (data & 7) { + case 0: + token_type = TokenType.TypeDef; goto ret; + case 1: + token_type = TokenType.TypeRef; goto ret; + case 2: + token_type = TokenType.ModuleRef; goto ret; + case 3: + token_type = TokenType.Method; goto ret; + case 4: + token_type = TokenType.TypeSpec; goto ret; + default: + goto exit; + } + case CodedIndex.HasSemantics: + rid = data >> 1; + switch (data & 1) { + case 0: + token_type = TokenType.Event; goto ret; + case 1: + token_type = TokenType.Property; goto ret; + default: + goto exit; + } + case CodedIndex.MethodDefOrRef: + rid = data >> 1; + switch (data & 1) { + case 0: + token_type = TokenType.Method; goto ret; + case 1: + token_type = TokenType.MemberRef; goto ret; + default: + goto exit; + } + case CodedIndex.MemberForwarded: + rid = data >> 1; + switch (data & 1) { + case 0: + token_type = TokenType.Field; goto ret; + case 1: + token_type = TokenType.Method; goto ret; + default: + goto exit; + } + case CodedIndex.Implementation: + rid = data >> 2; + switch (data & 3) { + case 0: + token_type = TokenType.File; goto ret; + case 1: + token_type = TokenType.AssemblyRef; goto ret; + case 2: + token_type = TokenType.ExportedType; goto ret; + default: + goto exit; + } + case CodedIndex.CustomAttributeType: + rid = data >> 3; + switch (data & 7) { + case 2: + token_type = TokenType.Method; goto ret; + case 3: + token_type = TokenType.MemberRef; goto ret; + default: + goto exit; + } + case CodedIndex.ResolutionScope: + rid = data >> 2; + switch (data & 3) { + case 0: + token_type = TokenType.Module; goto ret; + case 1: + token_type = TokenType.ModuleRef; goto ret; + case 2: + token_type = TokenType.AssemblyRef; goto ret; + case 3: + token_type = TokenType.TypeRef; goto ret; + default: + goto exit; + } + case CodedIndex.TypeOrMethodDef: + rid = data >> 1; + switch (data & 1) { + case 0: + token_type = TokenType.TypeDef; goto ret; + case 1: + token_type = TokenType.Method; goto ret; + default: goto exit; + } + case CodedIndex.HasCustomDebugInformation: + rid = data >> 5; + switch (data & 31) { + case 0: + token_type = TokenType.Method; goto ret; + case 1: + token_type = TokenType.Field; goto ret; + case 2: + token_type = TokenType.TypeRef; goto ret; + case 3: + token_type = TokenType.TypeDef; goto ret; + case 4: + token_type = TokenType.Param; goto ret; + case 5: + token_type = TokenType.InterfaceImpl; goto ret; + case 6: + token_type = TokenType.MemberRef; goto ret; + case 7: + token_type = TokenType.Module; goto ret; + case 8: + token_type = TokenType.Permission; goto ret; + case 9: + token_type = TokenType.Property; goto ret; + case 10: + token_type = TokenType.Event; goto ret; + case 11: + token_type = TokenType.Signature; goto ret; + case 12: + token_type = TokenType.ModuleRef; goto ret; + case 13: + token_type = TokenType.TypeSpec; goto ret; + case 14: + token_type = TokenType.Assembly; goto ret; + case 15: + token_type = TokenType.AssemblyRef; goto ret; + case 16: + token_type = TokenType.File; goto ret; + case 17: + token_type = TokenType.ExportedType; goto ret; + case 18: + token_type = TokenType.ManifestResource; goto ret; + case 19: + token_type = TokenType.GenericParam; goto ret; + case 20: + token_type = TokenType.GenericParamConstraint; goto ret; + case 21: + token_type = TokenType.MethodSpec; goto ret; + case 22: + token_type = TokenType.Document; goto ret; + case 23: + token_type = TokenType.LocalScope; goto ret; + case 24: + token_type = TokenType.LocalVariable; goto ret; + case 25: + token_type = TokenType.LocalConstant; goto ret; + case 26: + token_type = TokenType.ImportScope; goto ret; + default: + goto exit; + } + default: + goto exit; + } + ret: + return new MetadataToken (token_type, rid); + exit: + return MetadataToken.Zero; + } + +#if !READ_ONLY + public static uint CompressMetadataToken (this CodedIndex self, MetadataToken token) + { + uint ret = 0; + if (token.RID == 0) + return ret; + switch (self) { + case CodedIndex.TypeDefOrRef: + ret = token.RID << 2; + switch (token.TokenType) { + case TokenType.TypeDef: + return ret | 0; + case TokenType.TypeRef: + return ret | 1; + case TokenType.TypeSpec: + return ret | 2; + default: + goto exit; + } + case CodedIndex.HasConstant: + ret = token.RID << 2; + switch (token.TokenType) { + case TokenType.Field: + return ret | 0; + case TokenType.Param: + return ret | 1; + case TokenType.Property: + return ret | 2; + default: + goto exit; + } + case CodedIndex.HasCustomAttribute: + ret = token.RID << 5; + switch (token.TokenType) { + case TokenType.Method: + return ret | 0; + case TokenType.Field: + return ret | 1; + case TokenType.TypeRef: + return ret | 2; + case TokenType.TypeDef: + return ret | 3; + case TokenType.Param: + return ret | 4; + case TokenType.InterfaceImpl: + return ret | 5; + case TokenType.MemberRef: + return ret | 6; + case TokenType.Module: + return ret | 7; + case TokenType.Permission: + return ret | 8; + case TokenType.Property: + return ret | 9; + case TokenType.Event: + return ret | 10; + case TokenType.Signature: + return ret | 11; + case TokenType.ModuleRef: + return ret | 12; + case TokenType.TypeSpec: + return ret | 13; + case TokenType.Assembly: + return ret | 14; + case TokenType.AssemblyRef: + return ret | 15; + case TokenType.File: + return ret | 16; + case TokenType.ExportedType: + return ret | 17; + case TokenType.ManifestResource: + return ret | 18; + case TokenType.GenericParam: + return ret | 19; + case TokenType.GenericParamConstraint: + return ret | 20; + case TokenType.MethodSpec: + return ret | 21; + default: + goto exit; + } + case CodedIndex.HasFieldMarshal: + ret = token.RID << 1; + switch (token.TokenType) { + case TokenType.Field: + return ret | 0; + case TokenType.Param: + return ret | 1; + default: + goto exit; + } + case CodedIndex.HasDeclSecurity: + ret = token.RID << 2; + switch (token.TokenType) { + case TokenType.TypeDef: + return ret | 0; + case TokenType.Method: + return ret | 1; + case TokenType.Assembly: + return ret | 2; + default: + goto exit; + } + case CodedIndex.MemberRefParent: + ret = token.RID << 3; + switch (token.TokenType) { + case TokenType.TypeDef: + return ret | 0; + case TokenType.TypeRef: + return ret | 1; + case TokenType.ModuleRef: + return ret | 2; + case TokenType.Method: + return ret | 3; + case TokenType.TypeSpec: + return ret | 4; + default: + goto exit; + } + case CodedIndex.HasSemantics: + ret = token.RID << 1; + switch (token.TokenType) { + case TokenType.Event: + return ret | 0; + case TokenType.Property: + return ret | 1; + default: + goto exit; + } + case CodedIndex.MethodDefOrRef: + ret = token.RID << 1; + switch (token.TokenType) { + case TokenType.Method: + return ret | 0; + case TokenType.MemberRef: + return ret | 1; + default: + goto exit; + } + case CodedIndex.MemberForwarded: + ret = token.RID << 1; + switch (token.TokenType) { + case TokenType.Field: + return ret | 0; + case TokenType.Method: + return ret | 1; + default: + goto exit; + } + case CodedIndex.Implementation: + ret = token.RID << 2; + switch (token.TokenType) { + case TokenType.File: + return ret | 0; + case TokenType.AssemblyRef: + return ret | 1; + case TokenType.ExportedType: + return ret | 2; + default: + goto exit; + } + case CodedIndex.CustomAttributeType: + ret = token.RID << 3; + switch (token.TokenType) { + case TokenType.Method: + return ret | 2; + case TokenType.MemberRef: + return ret | 3; + default: + goto exit; + } + case CodedIndex.ResolutionScope: + ret = token.RID << 2; + switch (token.TokenType) { + case TokenType.Module: + return ret | 0; + case TokenType.ModuleRef: + return ret | 1; + case TokenType.AssemblyRef: + return ret | 2; + case TokenType.TypeRef: + return ret | 3; + default: + goto exit; + } + case CodedIndex.TypeOrMethodDef: + ret = token.RID << 1; + switch (token.TokenType) { + case TokenType.TypeDef: + return ret | 0; + case TokenType.Method: + return ret | 1; + default: + goto exit; + } + case CodedIndex.HasCustomDebugInformation: + ret = token.RID << 5; + switch (token.TokenType) { + case TokenType.Method: + return ret | 0; + case TokenType.Field: + return ret | 1; + case TokenType.TypeRef: + return ret | 2; + case TokenType.TypeDef: + return ret | 3; + case TokenType.Param: + return ret | 4; + case TokenType.InterfaceImpl: + return ret | 5; + case TokenType.MemberRef: + return ret | 6; + case TokenType.Module: + return ret | 7; + case TokenType.Permission: + return ret | 8; + case TokenType.Property: + return ret | 9; + case TokenType.Event: + return ret | 10; + case TokenType.Signature: + return ret | 11; + case TokenType.ModuleRef: + return ret | 12; + case TokenType.TypeSpec: + return ret | 13; + case TokenType.Assembly: + return ret | 14; + case TokenType.AssemblyRef: + return ret | 15; + case TokenType.File: + return ret | 16; + case TokenType.ExportedType: + return ret | 17; + case TokenType.ManifestResource: + return ret | 18; + case TokenType.GenericParam: + return ret | 19; + case TokenType.GenericParamConstraint: + return ret | 20; + case TokenType.MethodSpec: + return ret | 21; + case TokenType.Document: + return ret | 22; + case TokenType.LocalScope: + return ret | 23; + case TokenType.LocalVariable: + return ret | 24; + case TokenType.LocalConstant: + return ret | 25; + case TokenType.ImportScope: + return ret | 26; + default: + goto exit; + } + default: + goto exit; + } + exit: + throw new ArgumentException (); + } +#endif + + public static int GetSize (this CodedIndex self, Func counter) + { + int bits; + Table [] tables; + + switch (self) { + case CodedIndex.TypeDefOrRef: + bits = 2; + tables = new [] { Table.TypeDef, Table.TypeRef, Table.TypeSpec }; + break; + case CodedIndex.HasConstant: + bits = 2; + tables = new [] { Table.Field, Table.Param, Table.Property }; + break; + case CodedIndex.HasCustomAttribute: + bits = 5; + tables = new [] { + Table.Method, Table.Field, Table.TypeRef, Table.TypeDef, Table.Param, Table.InterfaceImpl, Table.MemberRef, + Table.Module, Table.DeclSecurity, Table.Property, Table.Event, Table.StandAloneSig, Table.ModuleRef, + Table.TypeSpec, Table.Assembly, Table.AssemblyRef, Table.File, Table.ExportedType, + Table.ManifestResource, Table.GenericParam, Table.GenericParamConstraint, Table.MethodSpec, + }; + break; + case CodedIndex.HasFieldMarshal: + bits = 1; + tables = new [] { Table.Field, Table.Param }; + break; + case CodedIndex.HasDeclSecurity: + bits = 2; + tables = new [] { Table.TypeDef, Table.Method, Table.Assembly }; + break; + case CodedIndex.MemberRefParent: + bits = 3; + tables = new [] { Table.TypeDef, Table.TypeRef, Table.ModuleRef, Table.Method, Table.TypeSpec }; + break; + case CodedIndex.HasSemantics: + bits = 1; + tables = new [] { Table.Event, Table.Property }; + break; + case CodedIndex.MethodDefOrRef: + bits = 1; + tables = new [] { Table.Method, Table.MemberRef }; + break; + case CodedIndex.MemberForwarded: + bits = 1; + tables = new [] { Table.Field, Table.Method }; + break; + case CodedIndex.Implementation: + bits = 2; + tables = new [] { Table.File, Table.AssemblyRef, Table.ExportedType }; + break; + case CodedIndex.CustomAttributeType: + bits = 3; + tables = new [] { Table.Method, Table.MemberRef }; + break; + case CodedIndex.ResolutionScope: + bits = 2; + tables = new [] { Table.Module, Table.ModuleRef, Table.AssemblyRef, Table.TypeRef }; + break; + case CodedIndex.TypeOrMethodDef: + bits = 1; + tables = new [] { Table.TypeDef, Table.Method }; + break; + case CodedIndex.HasCustomDebugInformation: + bits = 5; + tables = new[] { + Table.Method, Table.Field, Table.TypeRef, Table.TypeDef, Table.Param, Table.InterfaceImpl, Table.MemberRef, + Table.Module, Table.DeclSecurity, Table.Property, Table.Event, Table.StandAloneSig, Table.ModuleRef, + Table.TypeSpec, Table.Assembly, Table.AssemblyRef, Table.File, Table.ExportedType, + Table.ManifestResource, Table.GenericParam, Table.GenericParamConstraint, Table.MethodSpec, + Table.Document, Table.LocalScope, Table.LocalVariable, Table.LocalConstant, Table.ImportScope, + }; + break; + default: + throw new ArgumentException (); + } + + int max = 0; + + for (int i = 0; i < tables.Length; i++) { + max = System.Math.Max (counter (tables [i]), max); + } + + return max < (1 << (16 - bits)) ? 2 : 4; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs.meta new file mode 100644 index 0000000..6ff25ac --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.Metadata/Utilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab1ae5ded4b36bd4690497af95d81b3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE.meta new file mode 100644 index 0000000..83ef287 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 595ddad507ae06e46abf416941aa47aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs new file mode 100644 index 0000000..812adbc --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs @@ -0,0 +1,54 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +namespace Mono.Cecil.PE { + + class BinaryStreamReader : BinaryReader { + + public int Position { + get { return (int) BaseStream.Position; } + set { BaseStream.Position = value; } + } + + public int Length { + get { return (int) BaseStream.Length; } + } + + public BinaryStreamReader (Stream stream) + : base (stream) + { + } + + public void Advance (int bytes) + { + BaseStream.Seek (bytes, SeekOrigin.Current); + } + + public void MoveTo (uint position) + { + BaseStream.Seek (position, SeekOrigin.Begin); + } + + public void Align (int align) + { + align--; + var position = Position; + Advance (((position + align) & ~align) - position); + } + + public DataDirectory ReadDataDirectory () + { + return new DataDirectory (ReadUInt32 (), ReadUInt32 ()); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs.meta new file mode 100644 index 0000000..5e06ce0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cae4b51a3ff124047a4c66bc8bdf8fba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs new file mode 100644 index 0000000..b741f68 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs @@ -0,0 +1,93 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +#if !READ_ONLY + +namespace Mono.Cecil.PE { + + class BinaryStreamWriter : BinaryWriter { + + public int Position { + get { return (int) BaseStream.Position; } + set { BaseStream.Position = value; } + } + + public BinaryStreamWriter (Stream stream) + : base (stream) + { + } + + public void WriteByte (byte value) + { + Write (value); + } + + public void WriteUInt16 (ushort value) + { + Write (value); + } + + public void WriteInt16 (short value) + { + Write (value); + } + + public void WriteUInt32 (uint value) + { + Write (value); + } + + public void WriteInt32 (int value) + { + Write (value); + } + + public void WriteUInt64 (ulong value) + { + Write (value); + } + + public void WriteBytes (byte [] bytes) + { + Write (bytes); + } + + public void WriteDataDirectory (DataDirectory directory) + { + Write (directory.VirtualAddress); + Write (directory.Size); + } + + public void WriteBuffer (ByteBuffer buffer) + { + Write (buffer.buffer, 0, buffer.length); + } + + protected void Advance (int bytes) + { + BaseStream.Seek (bytes, SeekOrigin.Current); + } + + public void Align (int align) + { + align--; + var position = Position; + var bytes = ((position + align) & ~align) - position; + + for (int i = 0; i < bytes; i++) + WriteByte (0); + } + } +} + +#endif diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs.meta new file mode 100644 index 0000000..7954b62 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/BinaryStreamWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a35c48879036d52448e525d495ebe18f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs new file mode 100644 index 0000000..8aee04b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs @@ -0,0 +1,341 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil.PE { + + class ByteBuffer { + + internal byte [] buffer; + internal int length; + internal int position; + + public ByteBuffer () + { + this.buffer = Empty.Array; + } + + public ByteBuffer (int length) + { + this.buffer = new byte [length]; + } + + public ByteBuffer (byte [] buffer) + { + this.buffer = buffer ?? Empty.Array; + this.length = this.buffer.Length; + } + + public void Advance (int length) + { + position += length; + } + + public byte ReadByte () + { + return buffer [position++]; + } + + public sbyte ReadSByte () + { + return (sbyte) ReadByte (); + } + + public byte [] ReadBytes (int length) + { + var bytes = new byte [length]; + Buffer.BlockCopy (buffer, position, bytes, 0, length); + position += length; + return bytes; + } + + public ushort ReadUInt16 () + { + ushort value = (ushort) (buffer [position] + | (buffer [position + 1] << 8)); + position += 2; + return value; + } + + public short ReadInt16 () + { + return (short) ReadUInt16 (); + } + + public uint ReadUInt32 () + { + uint value = (uint) (buffer [position] + | (buffer [position + 1] << 8) + | (buffer [position + 2] << 16) + | (buffer [position + 3] << 24)); + position += 4; + return value; + } + + public int ReadInt32 () + { + return (int) ReadUInt32 (); + } + + public ulong ReadUInt64 () + { + uint low = ReadUInt32 (); + uint high = ReadUInt32 (); + + return (((ulong) high) << 32) | low; + } + + public long ReadInt64 () + { + return (long) ReadUInt64 (); + } + + public uint ReadCompressedUInt32 () + { + byte first = ReadByte (); + if ((first & 0x80) == 0) + return first; + + if ((first & 0x40) == 0) + return ((uint) (first & ~0x80) << 8) + | ReadByte (); + + return ((uint) (first & ~0xc0) << 24) + | (uint) ReadByte () << 16 + | (uint) ReadByte () << 8 + | ReadByte (); + } + + public int ReadCompressedInt32 () + { + var b = buffer [position]; + var u = (int) ReadCompressedUInt32 (); + var v = u >> 1; + if ((u & 1) == 0) + return v; + + switch (b & 0xc0) + { + case 0: + case 0x40: + return v - 0x40; + case 0x80: + return v - 0x2000; + default: + return v - 0x10000000; + } + } + + public float ReadSingle () + { + if (!BitConverter.IsLittleEndian) { + var bytes = ReadBytes (4); + Array.Reverse (bytes); + return BitConverter.ToSingle (bytes, 0); + } + + float value = BitConverter.ToSingle (buffer, position); + position += 4; + return value; + } + + public double ReadDouble () + { + if (!BitConverter.IsLittleEndian) { + var bytes = ReadBytes (8); + Array.Reverse (bytes); + return BitConverter.ToDouble (bytes, 0); + } + + double value = BitConverter.ToDouble (buffer, position); + position += 8; + return value; + } + +#if !READ_ONLY + + public void WriteByte (byte value) + { + if (position == buffer.Length) + Grow (1); + + buffer [position++] = value; + + if (position > length) + length = position; + } + + public void WriteSByte (sbyte value) + { + WriteByte ((byte) value); + } + + public void WriteUInt16 (ushort value) + { + if (position + 2 > buffer.Length) + Grow (2); + + buffer [position++] = (byte) value; + buffer [position++] = (byte) (value >> 8); + + if (position > length) + length = position; + } + + public void WriteInt16 (short value) + { + WriteUInt16 ((ushort) value); + } + + public void WriteUInt32 (uint value) + { + if (position + 4 > buffer.Length) + Grow (4); + + buffer [position++] = (byte) value; + buffer [position++] = (byte) (value >> 8); + buffer [position++] = (byte) (value >> 16); + buffer [position++] = (byte) (value >> 24); + + if (position > length) + length = position; + } + + public void WriteInt32 (int value) + { + WriteUInt32 ((uint) value); + } + + public void WriteUInt64 (ulong value) + { + if (position + 8 > buffer.Length) + Grow (8); + + buffer [position++] = (byte) value; + buffer [position++] = (byte) (value >> 8); + buffer [position++] = (byte) (value >> 16); + buffer [position++] = (byte) (value >> 24); + buffer [position++] = (byte) (value >> 32); + buffer [position++] = (byte) (value >> 40); + buffer [position++] = (byte) (value >> 48); + buffer [position++] = (byte) (value >> 56); + + if (position > length) + length = position; + } + + public void WriteInt64 (long value) + { + WriteUInt64 ((ulong) value); + } + + public void WriteCompressedUInt32 (uint value) + { + if (value < 0x80) + WriteByte ((byte) value); + else if (value < 0x4000) { + WriteByte ((byte) (0x80 | (value >> 8))); + WriteByte ((byte) (value & 0xff)); + } else { + WriteByte ((byte) ((value >> 24) | 0xc0)); + WriteByte ((byte) ((value >> 16) & 0xff)); + WriteByte ((byte) ((value >> 8) & 0xff)); + WriteByte ((byte) (value & 0xff)); + } + } + + public void WriteCompressedInt32 (int value) + { + if (value >= 0) { + WriteCompressedUInt32 ((uint) (value << 1)); + return; + } + + if (value > -0x40) + value = 0x40 + value; + else if (value >= -0x2000) + value = 0x2000 + value; + else if (value >= -0x20000000) + value = 0x20000000 + value; + + WriteCompressedUInt32 ((uint) ((value << 1) | 1)); + } + + public void WriteBytes (byte [] bytes) + { + var length = bytes.Length; + if (position + length > buffer.Length) + Grow (length); + + Buffer.BlockCopy (bytes, 0, buffer, position, length); + position += length; + + if (position > this.length) + this.length = position; + } + + public void WriteBytes (int length) + { + if (position + length > buffer.Length) + Grow (length); + + position += length; + + if (position > this.length) + this.length = position; + } + + public void WriteBytes (ByteBuffer buffer) + { + if (position + buffer.length > this.buffer.Length) + Grow (buffer.length); + + Buffer.BlockCopy (buffer.buffer, 0, this.buffer, position, buffer.length); + position += buffer.length; + + if (position > this.length) + this.length = position; + } + + public void WriteSingle (float value) + { + var bytes = BitConverter.GetBytes (value); + + if (!BitConverter.IsLittleEndian) + Array.Reverse (bytes); + + WriteBytes (bytes); + } + + public void WriteDouble (double value) + { + var bytes = BitConverter.GetBytes (value); + + if (!BitConverter.IsLittleEndian) + Array.Reverse (bytes); + + WriteBytes (bytes); + } + + void Grow (int desired) + { + var current = this.buffer; + var current_length = current.Length; + + var buffer = new byte [System.Math.Max (current_length + desired, current_length * 2)]; + Buffer.BlockCopy (current, 0, buffer, 0, current_length); + this.buffer = buffer; + } + +#endif + + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs.meta new file mode 100644 index 0000000..1f8cbdd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBuffer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f03d26c3ea4b99f4f8a7f7e4fb3d47be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs new file mode 100644 index 0000000..8b7cb23 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs @@ -0,0 +1,48 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +namespace Mono.Cecil.PE { + + sealed class ByteBufferEqualityComparer : IEqualityComparer { + + public bool Equals (ByteBuffer x, ByteBuffer y) + { + if (x.length != y.length) + return false; + + var x_buffer = x.buffer; + var y_buffer = y.buffer; + + for (int i = 0; i < x.length; i++) + if (x_buffer [i] != y_buffer [i]) + return false; + + return true; + } + + public int GetHashCode (ByteBuffer buffer) + { + // See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function + const int fnv_offset_bias = unchecked((int)2166136261); + const int fnv_prime = 16777619; + + var hash_code = fnv_offset_bias; + var bytes = buffer.buffer; + + for (int i = 0; i < buffer.length; i++) + hash_code = unchecked ((hash_code ^ bytes [i]) * fnv_prime); + + return hash_code; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs.meta new file mode 100644 index 0000000..481df8e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ByteBufferEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3c2a4a625376fb45a042be891fc6759 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs new file mode 100644 index 0000000..4922dd2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs @@ -0,0 +1,32 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using RVA = System.UInt32; + +namespace Mono.Cecil.PE { + + struct DataDirectory { + + public readonly RVA VirtualAddress; + public readonly uint Size; + + public bool IsZero { + get { return VirtualAddress == 0 && Size == 0; } + } + + public DataDirectory (RVA rva, uint size) + { + this.VirtualAddress = rva; + this.Size = size; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs.meta new file mode 100644 index 0000000..ed84d84 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/DataDirectory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea8d4203e2d346c458dd0c6f603e48b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs new file mode 100644 index 0000000..1092061 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs @@ -0,0 +1,170 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; +using Mono.Collections.Generic; + +using RVA = System.UInt32; + +namespace Mono.Cecil.PE { + + sealed class Image : IDisposable { + + public Disposable Stream; + public string FileName; + + public ModuleKind Kind; + public string RuntimeVersion; + public TargetArchitecture Architecture; + public ModuleCharacteristics Characteristics; + public ushort LinkerVersion; + public ushort SubSystemMajor; + public ushort SubSystemMinor; + + public ImageDebugHeader DebugHeader; + + public Section [] Sections; + + public Section MetadataSection; + + public uint EntryPointToken; + public uint Timestamp; + public ModuleAttributes Attributes; + + public DataDirectory Win32Resources; + public DataDirectory Debug; + public DataDirectory Resources; + public DataDirectory StrongName; + + public StringHeap StringHeap; + public BlobHeap BlobHeap; + public UserStringHeap UserStringHeap; + public GuidHeap GuidHeap; + public TableHeap TableHeap; + public PdbHeap PdbHeap; + + readonly int [] coded_index_sizes = new int [14]; + + readonly Func counter; + + public Image () + { + counter = GetTableLength; + } + + public bool HasTable (Table table) + { + return GetTableLength (table) > 0; + } + + public int GetTableLength (Table table) + { + return (int) TableHeap [table].Length; + } + + public int GetTableIndexSize (Table table) + { + return GetTableLength (table) < 65536 ? 2 : 4; + } + + public int GetCodedIndexSize (CodedIndex coded_index) + { + var index = (int) coded_index; + var size = coded_index_sizes [index]; + if (size != 0) + return size; + + return coded_index_sizes [index] = coded_index.GetSize (counter); + } + + public uint ResolveVirtualAddress (RVA rva) + { + var section = GetSectionAtVirtualAddress (rva); + if (section == null) + throw new ArgumentOutOfRangeException (); + + return ResolveVirtualAddressInSection (rva, section); + } + + public uint ResolveVirtualAddressInSection (RVA rva, Section section) + { + return rva + section.PointerToRawData - section.VirtualAddress; + } + + public Section GetSection (string name) + { + var sections = this.Sections; + for (int i = 0; i < sections.Length; i++) { + var section = sections [i]; + if (section.Name == name) + return section; + } + + return null; + } + + public Section GetSectionAtVirtualAddress (RVA rva) + { + var sections = this.Sections; + for (int i = 0; i < sections.Length; i++) { + var section = sections [i]; + if (rva >= section.VirtualAddress && rva < section.VirtualAddress + section.SizeOfRawData) + return section; + } + + return null; + } + + BinaryStreamReader GetReaderAt (RVA rva) + { + var section = GetSectionAtVirtualAddress (rva); + if (section == null) + return null; + + var reader = new BinaryStreamReader (Stream.value); + reader.MoveTo (ResolveVirtualAddressInSection (rva, section)); + return reader; + } + + public TRet GetReaderAt (RVA rva, TItem item, Func read) where TRet : class + { + var position = Stream.value.Position; + try { + var reader = GetReaderAt (rva); + if (reader == null) + return null; + + return read (item, reader); + } finally { + Stream.value.Position = position; + } + } + + public bool HasDebugTables () + { + return HasTable (Table.Document) + || HasTable (Table.MethodDebugInformation) + || HasTable (Table.LocalScope) + || HasTable (Table.LocalVariable) + || HasTable (Table.LocalConstant) + || HasTable (Table.StateMachineMethod) + || HasTable (Table.CustomDebugInformation); + } + + public void Dispose () + { + Stream.Dispose (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs.meta new file mode 100644 index 0000000..cdf59c6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Image.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b4292d02b090a4488ef0924effcc9e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs new file mode 100644 index 0000000..e1bcd4c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs @@ -0,0 +1,793 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; +using Mono.Collections.Generic; + +using RVA = System.UInt32; + +namespace Mono.Cecil.PE { + + sealed class ImageReader : BinaryStreamReader { + + readonly Image image; + + DataDirectory cli; + DataDirectory metadata; + + uint table_heap_offset; + + public ImageReader (Disposable stream, string file_name) + : base (stream.value) + { + image = new Image (); + image.Stream = stream; + image.FileName = file_name; + } + + void MoveTo (DataDirectory directory) + { + BaseStream.Position = image.ResolveVirtualAddress (directory.VirtualAddress); + } + + void ReadImage () + { + if (BaseStream.Length < 128) + throw new BadImageFormatException (); + + // - DOSHeader + + // PE 2 + // Start 58 + // Lfanew 4 + // End 64 + + if (ReadUInt16 () != 0x5a4d) + throw new BadImageFormatException (); + + Advance (58); + + MoveTo (ReadUInt32 ()); + + if (ReadUInt32 () != 0x00004550) + throw new BadImageFormatException (); + + // - PEFileHeader + + // Machine 2 + image.Architecture = ReadArchitecture (); + + // NumberOfSections 2 + ushort sections = ReadUInt16 (); + + // TimeDateStamp 4 + image.Timestamp = ReadUInt32 (); + // PointerToSymbolTable 4 + // NumberOfSymbols 4 + // OptionalHeaderSize 2 + Advance (10); + + // Characteristics 2 + ushort characteristics = ReadUInt16 (); + + ushort subsystem, dll_characteristics; + ReadOptionalHeaders (out subsystem, out dll_characteristics); + ReadSections (sections); + ReadCLIHeader (); + ReadMetadata (); + ReadDebugHeader (); + + image.Kind = GetModuleKind (characteristics, subsystem); + image.Characteristics = (ModuleCharacteristics) dll_characteristics; + } + + TargetArchitecture ReadArchitecture () + { + return (TargetArchitecture) ReadUInt16 (); + } + + static ModuleKind GetModuleKind (ushort characteristics, ushort subsystem) + { + if ((characteristics & 0x2000) != 0) // ImageCharacteristics.Dll + return ModuleKind.Dll; + + if (subsystem == 0x2 || subsystem == 0x9) // SubSystem.WindowsGui || SubSystem.WindowsCeGui + return ModuleKind.Windows; + + return ModuleKind.Console; + } + + void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics) + { + // - PEOptionalHeader + // - StandardFieldsHeader + + // Magic 2 + bool pe64 = ReadUInt16 () == 0x20b; + + // pe32 || pe64 + + image.LinkerVersion = ReadUInt16 (); + // CodeSize 4 + // InitializedDataSize 4 + // UninitializedDataSize4 + // EntryPointRVA 4 + // BaseOfCode 4 + // BaseOfData 4 || 0 + + // - NTSpecificFieldsHeader + + // ImageBase 4 || 8 + // SectionAlignment 4 + // FileAlignement 4 + // OSMajor 2 + // OSMinor 2 + // UserMajor 2 + // UserMinor 2 + // SubSysMajor 2 + // SubSysMinor 2 + Advance(44); + + image.SubSystemMajor = ReadUInt16 (); + image.SubSystemMinor = ReadUInt16 (); + + // Reserved 4 + // ImageSize 4 + // HeaderSize 4 + // FileChecksum 4 + Advance (16); + + // SubSystem 2 + subsystem = ReadUInt16 (); + + // DLLFlags 2 + dll_characteristics = ReadUInt16 (); + // StackReserveSize 4 || 8 + // StackCommitSize 4 || 8 + // HeapReserveSize 4 || 8 + // HeapCommitSize 4 || 8 + // LoaderFlags 4 + // NumberOfDataDir 4 + + // - DataDirectoriesHeader + + // ExportTable 8 + // ImportTable 8 + + Advance (pe64 ? 56 : 40); + + // ResourceTable 8 + + image.Win32Resources = ReadDataDirectory (); + + // ExceptionTable 8 + // CertificateTable 8 + // BaseRelocationTable 8 + + Advance (24); + + // Debug 8 + image.Debug = ReadDataDirectory (); + + // Copyright 8 + // GlobalPtr 8 + // TLSTable 8 + // LoadConfigTable 8 + // BoundImport 8 + // IAT 8 + // DelayImportDescriptor8 + Advance (56); + + // CLIHeader 8 + cli = ReadDataDirectory (); + + if (cli.IsZero) + throw new BadImageFormatException (); + + // Reserved 8 + Advance (8); + } + + string ReadAlignedString (int length) + { + int read = 0; + var buffer = new char [length]; + while (read < length) { + var current = ReadByte (); + if (current == 0) + break; + + buffer [read++] = (char) current; + } + + Advance (-1 + ((read + 4) & ~3) - read); + + return new string (buffer, 0, read); + } + + string ReadZeroTerminatedString (int length) + { + int read = 0; + var buffer = new char [length]; + var bytes = ReadBytes (length); + while (read < length) { + var current = bytes [read]; + if (current == 0) + break; + + buffer [read++] = (char) current; + } + + return new string (buffer, 0, read); + } + + void ReadSections (ushort count) + { + var sections = new Section [count]; + + for (int i = 0; i < count; i++) { + var section = new Section (); + + // Name + section.Name = ReadZeroTerminatedString (8); + + // VirtualSize 4 + Advance (4); + + // VirtualAddress 4 + section.VirtualAddress = ReadUInt32 (); + // SizeOfRawData 4 + section.SizeOfRawData = ReadUInt32 (); + // PointerToRawData 4 + section.PointerToRawData = ReadUInt32 (); + + // PointerToRelocations 4 + // PointerToLineNumbers 4 + // NumberOfRelocations 2 + // NumberOfLineNumbers 2 + // Characteristics 4 + Advance (16); + + sections [i] = section; + } + + image.Sections = sections; + } + + void ReadCLIHeader () + { + MoveTo (cli); + + // - CLIHeader + + // Cb 4 + // MajorRuntimeVersion 2 + // MinorRuntimeVersion 2 + Advance (8); + + // Metadata 8 + metadata = ReadDataDirectory (); + // Flags 4 + image.Attributes = (ModuleAttributes) ReadUInt32 (); + // EntryPointToken 4 + image.EntryPointToken = ReadUInt32 (); + // Resources 8 + image.Resources = ReadDataDirectory (); + // StrongNameSignature 8 + image.StrongName = ReadDataDirectory (); + // CodeManagerTable 8 + // VTableFixups 8 + // ExportAddressTableJumps 8 + // ManagedNativeHeader 8 + } + + void ReadMetadata () + { + MoveTo (metadata); + + if (ReadUInt32 () != 0x424a5342) + throw new BadImageFormatException (); + + // MajorVersion 2 + // MinorVersion 2 + // Reserved 4 + Advance (8); + + image.RuntimeVersion = ReadZeroTerminatedString (ReadInt32 ()); + + // Flags 2 + Advance (2); + + var streams = ReadUInt16 (); + + var section = image.GetSectionAtVirtualAddress (metadata.VirtualAddress); + if (section == null) + throw new BadImageFormatException (); + + image.MetadataSection = section; + + for (int i = 0; i < streams; i++) + ReadMetadataStream (section); + + if (image.PdbHeap != null) + ReadPdbHeap (); + + if (image.TableHeap != null) + ReadTableHeap (); + } + + void ReadDebugHeader () + { + if (image.Debug.IsZero) { + image.DebugHeader = new ImageDebugHeader (Empty.Array); + return; + } + + MoveTo (image.Debug); + + var entries = new ImageDebugHeaderEntry [(int) image.Debug.Size / ImageDebugDirectory.Size]; + + for (int i = 0; i < entries.Length; i++) { + var directory = new ImageDebugDirectory { + Characteristics = ReadInt32 (), + TimeDateStamp = ReadInt32 (), + MajorVersion = ReadInt16 (), + MinorVersion = ReadInt16 (), + Type = (ImageDebugType) ReadInt32 (), + SizeOfData = ReadInt32 (), + AddressOfRawData = ReadInt32 (), + PointerToRawData = ReadInt32 (), + }; + + if (directory.AddressOfRawData == 0) { + entries [i] = new ImageDebugHeaderEntry (directory, Empty.Array); + continue; + } + + var position = Position; + try { + MoveTo ((uint) directory.PointerToRawData); + var data = ReadBytes (directory.SizeOfData); + entries [i] = new ImageDebugHeaderEntry (directory, data); + } finally { + Position = position; + } + } + + image.DebugHeader = new ImageDebugHeader (entries); + } + + void ReadMetadataStream (Section section) + { + // Offset 4 + uint offset = metadata.VirtualAddress - section.VirtualAddress + ReadUInt32 (); // relative to the section start + + // Size 4 + uint size = ReadUInt32 (); + + var data = ReadHeapData (offset, size); + + var name = ReadAlignedString (16); + switch (name) { + case "#~": + case "#-": + image.TableHeap = new TableHeap (data); + table_heap_offset = offset; + break; + case "#Strings": + image.StringHeap = new StringHeap (data); + break; + case "#Blob": + image.BlobHeap = new BlobHeap (data); + break; + case "#GUID": + image.GuidHeap = new GuidHeap (data); + break; + case "#US": + image.UserStringHeap = new UserStringHeap (data); + break; + case "#Pdb": + image.PdbHeap = new PdbHeap (data); + break; + } + } + + byte [] ReadHeapData (uint offset, uint size) + { + var position = BaseStream.Position; + MoveTo (offset + image.MetadataSection.PointerToRawData); + var data = ReadBytes ((int) size); + BaseStream.Position = position; + + return data; + } + + void ReadTableHeap () + { + var heap = image.TableHeap; + + MoveTo (table_heap_offset + image.MetadataSection.PointerToRawData); + + // Reserved 4 + // MajorVersion 1 + // MinorVersion 1 + Advance (6); + + // HeapSizes 1 + var sizes = ReadByte (); + + // Reserved2 1 + Advance (1); + + // Valid 8 + heap.Valid = ReadInt64 (); + + // Sorted 8 + heap.Sorted = ReadInt64 (); + + if (image.PdbHeap != null) { + for (int i = 0; i < Mixin.TableCount; i++) { + if (!image.PdbHeap.HasTable ((Table) i)) + continue; + + heap.Tables [i].Length = image.PdbHeap.TypeSystemTableRows [i]; + } + } + + for (int i = 0; i < Mixin.TableCount; i++) { + if (!heap.HasTable ((Table) i)) + continue; + + heap.Tables [i].Length = ReadUInt32 (); + } + + SetIndexSize (image.StringHeap, sizes, 0x1); + SetIndexSize (image.GuidHeap, sizes, 0x2); + SetIndexSize (image.BlobHeap, sizes, 0x4); + + ComputeTableInformations (); + } + + static void SetIndexSize (Heap heap, uint sizes, byte flag) + { + if (heap == null) + return; + + heap.IndexSize = (sizes & flag) > 0 ? 4 : 2; + } + + int GetTableIndexSize (Table table) + { + return image.GetTableIndexSize (table); + } + + int GetCodedIndexSize (CodedIndex index) + { + return image.GetCodedIndexSize (index); + } + + void ComputeTableInformations () + { + uint offset = (uint) BaseStream.Position - table_heap_offset - image.MetadataSection.PointerToRawData; // header + + int stridx_size = image.StringHeap.IndexSize; + int guididx_size = image.GuidHeap != null ? image.GuidHeap.IndexSize : 2; + int blobidx_size = image.BlobHeap != null ? image.BlobHeap.IndexSize : 2; + + var heap = image.TableHeap; + var tables = heap.Tables; + + for (int i = 0; i < Mixin.TableCount; i++) { + var table = (Table) i; + if (!heap.HasTable (table)) + continue; + + int size; + switch (table) { + case Table.Module: + size = 2 // Generation + + stridx_size // Name + + (guididx_size * 3); // Mvid, EncId, EncBaseId + break; + case Table.TypeRef: + size = GetCodedIndexSize (CodedIndex.ResolutionScope) // ResolutionScope + + (stridx_size * 2); // Name, Namespace + break; + case Table.TypeDef: + size = 4 // Flags + + (stridx_size * 2) // Name, Namespace + + GetCodedIndexSize (CodedIndex.TypeDefOrRef) // BaseType + + GetTableIndexSize (Table.Field) // FieldList + + GetTableIndexSize (Table.Method); // MethodList + break; + case Table.FieldPtr: + size = GetTableIndexSize (Table.Field); // Field + break; + case Table.Field: + size = 2 // Flags + + stridx_size // Name + + blobidx_size; // Signature + break; + case Table.MethodPtr: + size = GetTableIndexSize (Table.Method); // Method + break; + case Table.Method: + size = 8 // Rva 4, ImplFlags 2, Flags 2 + + stridx_size // Name + + blobidx_size // Signature + + GetTableIndexSize (Table.Param); // ParamList + break; + case Table.ParamPtr: + size = GetTableIndexSize (Table.Param); // Param + break; + case Table.Param: + size = 4 // Flags 2, Sequence 2 + + stridx_size; // Name + break; + case Table.InterfaceImpl: + size = GetTableIndexSize (Table.TypeDef) // Class + + GetCodedIndexSize (CodedIndex.TypeDefOrRef); // Interface + break; + case Table.MemberRef: + size = GetCodedIndexSize (CodedIndex.MemberRefParent) // Class + + stridx_size // Name + + blobidx_size; // Signature + break; + case Table.Constant: + size = 2 // Type + + GetCodedIndexSize (CodedIndex.HasConstant) // Parent + + blobidx_size; // Value + break; + case Table.CustomAttribute: + size = GetCodedIndexSize (CodedIndex.HasCustomAttribute) // Parent + + GetCodedIndexSize (CodedIndex.CustomAttributeType) // Type + + blobidx_size; // Value + break; + case Table.FieldMarshal: + size = GetCodedIndexSize (CodedIndex.HasFieldMarshal) // Parent + + blobidx_size; // NativeType + break; + case Table.DeclSecurity: + size = 2 // Action + + GetCodedIndexSize (CodedIndex.HasDeclSecurity) // Parent + + blobidx_size; // PermissionSet + break; + case Table.ClassLayout: + size = 6 // PackingSize 2, ClassSize 4 + + GetTableIndexSize (Table.TypeDef); // Parent + break; + case Table.FieldLayout: + size = 4 // Offset + + GetTableIndexSize (Table.Field); // Field + break; + case Table.StandAloneSig: + size = blobidx_size; // Signature + break; + case Table.EventMap: + size = GetTableIndexSize (Table.TypeDef) // Parent + + GetTableIndexSize (Table.Event); // EventList + break; + case Table.EventPtr: + size = GetTableIndexSize (Table.Event); // Event + break; + case Table.Event: + size = 2 // Flags + + stridx_size // Name + + GetCodedIndexSize (CodedIndex.TypeDefOrRef); // EventType + break; + case Table.PropertyMap: + size = GetTableIndexSize (Table.TypeDef) // Parent + + GetTableIndexSize (Table.Property); // PropertyList + break; + case Table.PropertyPtr: + size = GetTableIndexSize (Table.Property); // Property + break; + case Table.Property: + size = 2 // Flags + + stridx_size // Name + + blobidx_size; // Type + break; + case Table.MethodSemantics: + size = 2 // Semantics + + GetTableIndexSize (Table.Method) // Method + + GetCodedIndexSize (CodedIndex.HasSemantics); // Association + break; + case Table.MethodImpl: + size = GetTableIndexSize (Table.TypeDef) // Class + + GetCodedIndexSize (CodedIndex.MethodDefOrRef) // MethodBody + + GetCodedIndexSize (CodedIndex.MethodDefOrRef); // MethodDeclaration + break; + case Table.ModuleRef: + size = stridx_size; // Name + break; + case Table.TypeSpec: + size = blobidx_size; // Signature + break; + case Table.ImplMap: + size = 2 // MappingFlags + + GetCodedIndexSize (CodedIndex.MemberForwarded) // MemberForwarded + + stridx_size // ImportName + + GetTableIndexSize (Table.ModuleRef); // ImportScope + break; + case Table.FieldRVA: + size = 4 // RVA + + GetTableIndexSize (Table.Field); // Field + break; + case Table.EncLog: + size = 8; + break; + case Table.EncMap: + size = 4; + break; + case Table.Assembly: + size = 16 // HashAlgId 4, Version 4 * 2, Flags 4 + + blobidx_size // PublicKey + + (stridx_size * 2); // Name, Culture + break; + case Table.AssemblyProcessor: + size = 4; // Processor + break; + case Table.AssemblyOS: + size = 12; // Platform 4, Version 2 * 4 + break; + case Table.AssemblyRef: + size = 12 // Version 2 * 4 + Flags 4 + + (blobidx_size * 2) // PublicKeyOrToken, HashValue + + (stridx_size * 2); // Name, Culture + break; + case Table.AssemblyRefProcessor: + size = 4 // Processor + + GetTableIndexSize (Table.AssemblyRef); // AssemblyRef + break; + case Table.AssemblyRefOS: + size = 12 // Platform 4, Version 2 * 4 + + GetTableIndexSize (Table.AssemblyRef); // AssemblyRef + break; + case Table.File: + size = 4 // Flags + + stridx_size // Name + + blobidx_size; // HashValue + break; + case Table.ExportedType: + size = 8 // Flags 4, TypeDefId 4 + + (stridx_size * 2) // Name, Namespace + + GetCodedIndexSize (CodedIndex.Implementation); // Implementation + break; + case Table.ManifestResource: + size = 8 // Offset, Flags + + stridx_size // Name + + GetCodedIndexSize (CodedIndex.Implementation); // Implementation + break; + case Table.NestedClass: + size = GetTableIndexSize (Table.TypeDef) // NestedClass + + GetTableIndexSize (Table.TypeDef); // EnclosingClass + break; + case Table.GenericParam: + size = 4 // Number, Flags + + GetCodedIndexSize (CodedIndex.TypeOrMethodDef) // Owner + + stridx_size; // Name + break; + case Table.MethodSpec: + size = GetCodedIndexSize (CodedIndex.MethodDefOrRef) // Method + + blobidx_size; // Instantiation + break; + case Table.GenericParamConstraint: + size = GetTableIndexSize (Table.GenericParam) // Owner + + GetCodedIndexSize (CodedIndex.TypeDefOrRef); // Constraint + break; + case Table.Document: + size = blobidx_size // Name + + guididx_size // HashAlgorithm + + blobidx_size // Hash + + guididx_size; // Language + break; + case Table.MethodDebugInformation: + size = GetTableIndexSize (Table.Document) // Document + + blobidx_size; // SequencePoints + break; + case Table.LocalScope: + size = GetTableIndexSize (Table.Method) // Method + + GetTableIndexSize (Table.ImportScope) // ImportScope + + GetTableIndexSize (Table.LocalVariable) // VariableList + + GetTableIndexSize (Table.LocalConstant) // ConstantList + + 4 * 2; // StartOffset, Length + break; + case Table.LocalVariable: + size = 2 // Attributes + + 2 // Index + + stridx_size; // Name + break; + case Table.LocalConstant: + size = stridx_size // Name + + blobidx_size; // Signature + break; + case Table.ImportScope: + size = GetTableIndexSize (Table.ImportScope) // Parent + + blobidx_size; + break; + case Table.StateMachineMethod: + size = GetTableIndexSize (Table.Method) // MoveNextMethod + + GetTableIndexSize (Table.Method); // KickOffMethod + break; + case Table.CustomDebugInformation: + size = GetCodedIndexSize (CodedIndex.HasCustomDebugInformation) // Parent + + guididx_size // Kind + + blobidx_size; // Value + break; + default: + throw new NotSupportedException (); + } + + tables [i].RowSize = (uint) size; + tables [i].Offset = offset; + + offset += (uint) size * tables [i].Length; + } + } + + void ReadPdbHeap () + { + var heap = image.PdbHeap; + + var buffer = new ByteBuffer (heap.data); + + heap.Id = buffer.ReadBytes (20); + heap.EntryPoint = buffer.ReadUInt32 (); + heap.TypeSystemTables = buffer.ReadInt64 (); + heap.TypeSystemTableRows = new uint [Mixin.TableCount]; + + for (int i = 0; i < Mixin.TableCount; i++) { + var table = (Table) i; + if (!heap.HasTable (table)) + continue; + + heap.TypeSystemTableRows [i] = buffer.ReadUInt32 (); + } + } + + public static Image ReadImage (Disposable stream, string file_name) + { + try { + var reader = new ImageReader (stream, file_name); + reader.ReadImage (); + return reader.image; + } catch (EndOfStreamException e) { + throw new BadImageFormatException (stream.value.GetFileName (), e); + } + } + + public static Image ReadPortablePdb (Disposable stream, string file_name) + { + try { + var reader = new ImageReader (stream, file_name); + var length = (uint) stream.value.Length; + + reader.image.Sections = new[] { + new Section { + PointerToRawData = 0, + SizeOfRawData = length, + VirtualAddress = 0, + VirtualSize = length, + } + }; + + reader.metadata = new DataDirectory (0, length); + reader.ReadMetadata (); + return reader.image; + } catch (EndOfStreamException e) { + throw new BadImageFormatException (stream.value.GetFileName (), e); + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs.meta new file mode 100644 index 0000000..3f86744 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89cef7646a1432b48abde6f46d79ec90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs new file mode 100644 index 0000000..95a36c1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs @@ -0,0 +1,855 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +#if !READ_ONLY + +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; + +using RVA = System.UInt32; + +namespace Mono.Cecil.PE { + + sealed class ImageWriter : BinaryStreamWriter { + + readonly ModuleDefinition module; + readonly MetadataBuilder metadata; + readonly TextMap text_map; + readonly internal Disposable stream; + + readonly string runtime_version; + + ImageDebugHeader debug_header; + + ByteBuffer win32_resources; + + const uint pe_header_size = 0x98u; + const uint section_header_size = 0x28u; + const uint file_alignment = 0x200; + const uint section_alignment = 0x2000; + const ulong image_base = 0x00400000; + + internal const RVA text_rva = 0x2000; + + readonly bool pe64; + readonly bool has_reloc; + + internal Section text; + internal Section rsrc; + internal Section reloc; + + ushort sections; + + ImageWriter (ModuleDefinition module, string runtime_version, MetadataBuilder metadata, Disposable stream, bool metadataOnly = false) + : base (stream.value) + { + this.module = module; + this.runtime_version = runtime_version; + this.text_map = metadata.text_map; + this.stream = stream; + this.metadata = metadata; + if (metadataOnly) + return; + + this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64; + this.has_reloc = module.Architecture == TargetArchitecture.I386; + this.GetDebugHeader (); + this.GetWin32Resources (); + this.BuildTextMap (); + this.sections = (ushort) (has_reloc ? 2 : 1); // text + reloc? + } + + void GetDebugHeader () + { + var symbol_writer = metadata.symbol_writer; + if (symbol_writer != null) + debug_header = symbol_writer.GetDebugHeader (); + + if (module.HasDebugHeader) { + var header = module.GetDebugHeader (); + var deterministic = header.GetDeterministicEntry (); + if (deterministic == null) + return; + + debug_header = debug_header.AddDeterministicEntry (); + } + } + + void GetWin32Resources () + { + if (!module.HasImage) + return; + + DataDirectory win32_resources_directory = module.Image.Win32Resources; + var size = win32_resources_directory.Size; + + if (size > 0) { + win32_resources = module.Image.GetReaderAt (win32_resources_directory.VirtualAddress, size, (s, reader) => new ByteBuffer (reader.ReadBytes ((int) s))); + } + } + + public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable stream) + { + var writer = new ImageWriter (module, module.runtime_version, metadata, stream); + writer.BuildSections (); + return writer; + } + + public static ImageWriter CreateDebugWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable stream) + { + var writer = new ImageWriter (module, "PDB v1.0", metadata, stream, metadataOnly: true); + var length = metadata.text_map.GetLength (); + writer.text = new Section { SizeOfRawData = length, VirtualSize = length }; + return writer; + } + + void BuildSections () + { + var has_win32_resources = win32_resources != null; + if (has_win32_resources) + sections++; + + text = CreateSection (".text", text_map.GetLength (), null); + var previous = text; + + if (has_win32_resources) { + rsrc = CreateSection (".rsrc", (uint) win32_resources.length, previous); + + PatchWin32Resources (win32_resources); + previous = rsrc; + } + + if (has_reloc) + reloc = CreateSection (".reloc", 12u, previous); + } + + Section CreateSection (string name, uint size, Section previous) + { + return new Section { + Name = name, + VirtualAddress = previous != null + ? previous.VirtualAddress + Align (previous.VirtualSize, section_alignment) + : text_rva, + VirtualSize = size, + PointerToRawData = previous != null + ? previous.PointerToRawData + previous.SizeOfRawData + : Align (GetHeaderSize (), file_alignment), + SizeOfRawData = Align (size, file_alignment) + }; + } + + static uint Align (uint value, uint align) + { + align--; + return (value + align) & ~align; + } + + void WriteDOSHeader () + { + Write (new byte [] { + // dos header start + 0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + // lfanew + 0x80, 0x00, 0x00, 0x00, + // dos header end + 0x0e, 0x1f, 0xba, 0x0e, 0x00, 0xb4, 0x09, + 0xcd, 0x21, 0xb8, 0x01, 0x4c, 0xcd, 0x21, + 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x63, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, + 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x69, + 0x6e, 0x20, 0x44, 0x4f, 0x53, 0x20, 0x6d, + 0x6f, 0x64, 0x65, 0x2e, 0x0d, 0x0d, 0x0a, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00 + }); + } + + ushort SizeOfOptionalHeader () + { + return (ushort) (!pe64 ? 0xe0 : 0xf0); + } + + void WritePEFileHeader () + { + WriteUInt32 (0x00004550); // Magic + WriteUInt16 ((ushort) module.Architecture); // Machine + WriteUInt16 (sections); // NumberOfSections + WriteUInt32 (metadata.timestamp); + WriteUInt32 (0); // PointerToSymbolTable + WriteUInt32 (0); // NumberOfSymbols + WriteUInt16 (SizeOfOptionalHeader ()); // SizeOfOptionalHeader + + // ExecutableImage | (pe64 ? 32BitsMachine : LargeAddressAware) + var characteristics = (ushort) (0x0002 | (!pe64 ? 0x0100 : 0x0020)); + if (module.Kind == ModuleKind.Dll || module.Kind == ModuleKind.NetModule) + characteristics |= 0x2000; + WriteUInt16 (characteristics); // Characteristics + } + + Section LastSection () + { + if (reloc != null) + return reloc; + + if (rsrc != null) + return rsrc; + + return text; + } + + void WriteOptionalHeaders () + { + WriteUInt16 ((ushort) (!pe64 ? 0x10b : 0x20b)); // Magic + WriteUInt16 (module.linker_version); + WriteUInt32 (text.SizeOfRawData); // CodeSize + WriteUInt32 ((reloc != null ? reloc.SizeOfRawData : 0) + + (rsrc != null ? rsrc.SizeOfRawData : 0)); // InitializedDataSize + WriteUInt32 (0); // UninitializedDataSize + + var startub_stub = text_map.GetRange (TextSegment.StartupStub); + WriteUInt32 (startub_stub.Length > 0 ? startub_stub.Start : 0); // EntryPointRVA + WriteUInt32 (text_rva); // BaseOfCode + + if (!pe64) { + WriteUInt32 (0); // BaseOfData + WriteUInt32 ((uint) image_base); // ImageBase + } else { + WriteUInt64 (image_base); // ImageBase + } + + WriteUInt32 (section_alignment); // SectionAlignment + WriteUInt32 (file_alignment); // FileAlignment + + WriteUInt16 (4); // OSMajor + WriteUInt16 (0); // OSMinor + WriteUInt16 (0); // UserMajor + WriteUInt16 (0); // UserMinor + WriteUInt16 (module.subsystem_major); // SubSysMajor + WriteUInt16 (module.subsystem_minor); // SubSysMinor + WriteUInt32 (0); // Reserved + + var last_section = LastSection(); + WriteUInt32 (last_section.VirtualAddress + Align (last_section.VirtualSize, section_alignment)); // ImageSize + WriteUInt32 (text.PointerToRawData); // HeaderSize + + WriteUInt32 (0); // Checksum + WriteUInt16 (GetSubSystem ()); // SubSystem + WriteUInt16 ((ushort) module.Characteristics); // DLLFlags + + if (!pe64) { + const uint stack_reserve = 0x100000; + const uint stack_commit = 0x1000; + const uint heap_reserve = 0x100000; + const uint heap_commit = 0x1000; + + WriteUInt32 (stack_reserve); + WriteUInt32 (stack_commit); + WriteUInt32 (heap_reserve); + WriteUInt32 (heap_commit); + } else { + const ulong stack_reserve = 0x400000; + const ulong stack_commit = 0x4000; + const ulong heap_reserve = 0x100000; + const ulong heap_commit = 0x2000; + + WriteUInt64 (stack_reserve); + WriteUInt64 (stack_commit); + WriteUInt64 (heap_reserve); + WriteUInt64 (heap_commit); + } + + WriteUInt32 (0); // LoaderFlags + WriteUInt32 (16); // NumberOfDataDir + + WriteZeroDataDirectory (); // ExportTable + WriteDataDirectory (text_map.GetDataDirectory (TextSegment.ImportDirectory)); // ImportTable + if (rsrc != null) { // ResourceTable + WriteUInt32 (rsrc.VirtualAddress); + WriteUInt32 (rsrc.VirtualSize); + } else + WriteZeroDataDirectory (); + + WriteZeroDataDirectory (); // ExceptionTable + WriteZeroDataDirectory (); // CertificateTable + WriteUInt32 (reloc != null ? reloc.VirtualAddress : 0); // BaseRelocationTable + WriteUInt32 (reloc != null ? reloc.VirtualSize : 0); + + if (text_map.GetLength (TextSegment.DebugDirectory) > 0) { + WriteUInt32 (text_map.GetRVA (TextSegment.DebugDirectory)); + WriteUInt32 ((uint) (debug_header.Entries.Length * ImageDebugDirectory.Size)); + } else + WriteZeroDataDirectory (); + + WriteZeroDataDirectory (); // Copyright + WriteZeroDataDirectory (); // GlobalPtr + WriteZeroDataDirectory (); // TLSTable + WriteZeroDataDirectory (); // LoadConfigTable + WriteZeroDataDirectory (); // BoundImport + WriteDataDirectory (text_map.GetDataDirectory (TextSegment.ImportAddressTable)); // IAT + WriteZeroDataDirectory (); // DelayImportDesc + WriteDataDirectory (text_map.GetDataDirectory (TextSegment.CLIHeader)); // CLIHeader + WriteZeroDataDirectory (); // Reserved + } + + void WriteZeroDataDirectory () + { + WriteUInt32 (0); + WriteUInt32 (0); + } + + ushort GetSubSystem () + { + switch (module.Kind) { + case ModuleKind.Console: + case ModuleKind.Dll: + case ModuleKind.NetModule: + return 0x3; + case ModuleKind.Windows: + return 0x2; + default: + throw new ArgumentOutOfRangeException (); + } + } + + void WriteSectionHeaders () + { + WriteSection (text, 0x60000020); + + if (rsrc != null) + WriteSection (rsrc, 0x40000040); + + if (reloc != null) + WriteSection (reloc, 0x42000040); + } + + void WriteSection (Section section, uint characteristics) + { + var name = new byte [8]; + var sect_name = section.Name; + for (int i = 0; i < sect_name.Length; i++) + name [i] = (byte) sect_name [i]; + + WriteBytes (name); + WriteUInt32 (section.VirtualSize); + WriteUInt32 (section.VirtualAddress); + WriteUInt32 (section.SizeOfRawData); + WriteUInt32 (section.PointerToRawData); + WriteUInt32 (0); // PointerToRelocations + WriteUInt32 (0); // PointerToLineNumbers + WriteUInt16 (0); // NumberOfRelocations + WriteUInt16 (0); // NumberOfLineNumbers + WriteUInt32 (characteristics); + } + + void MoveTo (uint pointer) + { + BaseStream.Seek (pointer, SeekOrigin.Begin); + } + + void MoveToRVA (Section section, RVA rva) + { + BaseStream.Seek (section.PointerToRawData + rva - section.VirtualAddress, SeekOrigin.Begin); + } + + void MoveToRVA (TextSegment segment) + { + MoveToRVA (text, text_map.GetRVA (segment)); + } + + void WriteRVA (RVA rva) + { + if (!pe64) + WriteUInt32 (rva); + else + WriteUInt64 (rva); + } + + void PrepareSection (Section section) + { + MoveTo (section.PointerToRawData); + + const int buffer_size = 4096; + + if (section.SizeOfRawData <= buffer_size) { + Write (new byte [section.SizeOfRawData]); + MoveTo (section.PointerToRawData); + return; + } + + var written = 0; + var buffer = new byte [buffer_size]; + while (written != section.SizeOfRawData) { + var write_size = System.Math.Min((int) section.SizeOfRawData - written, buffer_size); + Write (buffer, 0, write_size); + written += write_size; + } + + MoveTo (section.PointerToRawData); + } + + void WriteText () + { + PrepareSection (text); + + // ImportAddressTable + + if (has_reloc) { + WriteRVA (text_map.GetRVA (TextSegment.ImportHintNameTable)); + WriteRVA (0); + } + + // CLIHeader + + WriteUInt32 (0x48); + WriteUInt16 (2); + WriteUInt16 ((ushort) ((module.Runtime <= TargetRuntime.Net_1_1) ? 0 : 5)); + + WriteUInt32 (text_map.GetRVA (TextSegment.MetadataHeader)); + WriteUInt32 (GetMetadataLength ()); + WriteUInt32 ((uint) module.Attributes); + WriteUInt32 (metadata.entry_point.ToUInt32 ()); + WriteDataDirectory (text_map.GetDataDirectory (TextSegment.Resources)); + WriteDataDirectory (text_map.GetDataDirectory (TextSegment.StrongNameSignature)); + WriteZeroDataDirectory (); // CodeManagerTable + WriteZeroDataDirectory (); // VTableFixups + WriteZeroDataDirectory (); // ExportAddressTableJumps + WriteZeroDataDirectory (); // ManagedNativeHeader + + // Code + + MoveToRVA (TextSegment.Code); + WriteBuffer (metadata.code); + + // Resources + + MoveToRVA (TextSegment.Resources); + WriteBuffer (metadata.resources); + + // Data + + if (metadata.data.length > 0) { + MoveToRVA (TextSegment.Data); + WriteBuffer (metadata.data); + } + + // StrongNameSignature + // stays blank + + // MetadataHeader + + MoveToRVA (TextSegment.MetadataHeader); + WriteMetadataHeader (); + + WriteMetadata (); + + // DebugDirectory + if (text_map.GetLength (TextSegment.DebugDirectory) > 0) { + MoveToRVA (TextSegment.DebugDirectory); + WriteDebugDirectory (); + } + + if (!has_reloc) + return; + + // ImportDirectory + MoveToRVA (TextSegment.ImportDirectory); + WriteImportDirectory (); + + // StartupStub + MoveToRVA (TextSegment.StartupStub); + WriteStartupStub (); + } + + uint GetMetadataLength () + { + return text_map.GetRVA (TextSegment.DebugDirectory) - text_map.GetRVA (TextSegment.MetadataHeader); + } + + public void WriteMetadataHeader () + { + WriteUInt32 (0x424a5342); // Signature + WriteUInt16 (1); // MajorVersion + WriteUInt16 (1); // MinorVersion + WriteUInt32 (0); // Reserved + + var version = GetZeroTerminatedString (runtime_version); + WriteUInt32 ((uint) version.Length); + WriteBytes (version); + WriteUInt16 (0); // Flags + WriteUInt16 (GetStreamCount ()); + + uint offset = text_map.GetRVA (TextSegment.TableHeap) - text_map.GetRVA (TextSegment.MetadataHeader); + + WriteStreamHeader (ref offset, TextSegment.TableHeap, "#~"); + WriteStreamHeader (ref offset, TextSegment.StringHeap, "#Strings"); + WriteStreamHeader (ref offset, TextSegment.UserStringHeap, "#US"); + WriteStreamHeader (ref offset, TextSegment.GuidHeap, "#GUID"); + WriteStreamHeader (ref offset, TextSegment.BlobHeap, "#Blob"); + WriteStreamHeader (ref offset, TextSegment.PdbHeap, "#Pdb"); + } + + ushort GetStreamCount () + { + return (ushort) ( + 1 // #~ + + 1 // #Strings + + (metadata.user_string_heap.IsEmpty ? 0 : 1) // #US + + (metadata.guid_heap.IsEmpty ? 0 : 1) // GUID + + (metadata.blob_heap.IsEmpty ? 0 : 1) + + (metadata.pdb_heap == null ? 0 : 1)); // #Blob + } + + void WriteStreamHeader (ref uint offset, TextSegment heap, string name) + { + var length = (uint) text_map.GetLength (heap); + if (length == 0) + return; + + WriteUInt32 (offset); + WriteUInt32 (length); + WriteBytes (GetZeroTerminatedString (name)); + offset += length; + } + + static int GetZeroTerminatedStringLength (string @string) + { + return (@string.Length + 1 + 3) & ~3; + } + + static byte [] GetZeroTerminatedString (string @string) + { + return GetString (@string, GetZeroTerminatedStringLength (@string)); + } + + static byte [] GetSimpleString (string @string) + { + return GetString (@string, @string.Length); + } + + static byte [] GetString (string @string, int length) + { + var bytes = new byte [length]; + for (int i = 0; i < @string.Length; i++) + bytes [i] = (byte) @string [i]; + + return bytes; + } + + public void WriteMetadata () + { + WriteHeap (TextSegment.TableHeap, metadata.table_heap); + WriteHeap (TextSegment.StringHeap, metadata.string_heap); + WriteHeap (TextSegment.UserStringHeap, metadata.user_string_heap); + WriteHeap (TextSegment.GuidHeap, metadata.guid_heap); + WriteHeap (TextSegment.BlobHeap, metadata.blob_heap); + WriteHeap (TextSegment.PdbHeap, metadata.pdb_heap); + } + + void WriteHeap (TextSegment heap, HeapBuffer buffer) + { + if (buffer == null || buffer.IsEmpty) + return; + + MoveToRVA (heap); + WriteBuffer (buffer); + } + + void WriteDebugDirectory () + { + var data_start = (int) BaseStream.Position + (debug_header.Entries.Length * ImageDebugDirectory.Size); + + for (var i = 0; i < debug_header.Entries.Length; i++) { + var entry = debug_header.Entries [i]; + var directory = entry.Directory; + WriteInt32 (directory.Characteristics); + WriteInt32 (directory.TimeDateStamp); + WriteInt16 (directory.MajorVersion); + WriteInt16 (directory.MinorVersion); + WriteInt32 ((int) directory.Type); + WriteInt32 (directory.SizeOfData); + WriteInt32 (directory.AddressOfRawData); + WriteInt32 (data_start); + + data_start += entry.Data.Length; + } + + for (var i = 0; i < debug_header.Entries.Length; i++) { + var entry = debug_header.Entries [i]; + WriteBytes (entry.Data); + } + } + + void WriteImportDirectory () + { + WriteUInt32 (text_map.GetRVA (TextSegment.ImportDirectory) + 40); // ImportLookupTable + WriteUInt32 (0); // DateTimeStamp + WriteUInt32 (0); // ForwarderChain + WriteUInt32 (text_map.GetRVA (TextSegment.ImportHintNameTable) + 14); + WriteUInt32 (text_map.GetRVA (TextSegment.ImportAddressTable)); + Advance (20); + + // ImportLookupTable + WriteUInt32 (text_map.GetRVA (TextSegment.ImportHintNameTable)); + + // ImportHintNameTable + MoveToRVA (TextSegment.ImportHintNameTable); + + WriteUInt16 (0); // Hint + WriteBytes (GetRuntimeMain ()); + WriteByte (0); + WriteBytes (GetSimpleString ("mscoree.dll")); + WriteUInt16 (0); + } + + byte [] GetRuntimeMain () + { + return module.Kind == ModuleKind.Dll || module.Kind == ModuleKind.NetModule + ? GetSimpleString ("_CorDllMain") + : GetSimpleString ("_CorExeMain"); + } + + void WriteStartupStub () + { + switch (module.Architecture) { + case TargetArchitecture.I386: + WriteUInt16 (0x25ff); + WriteUInt32 ((uint) image_base + text_map.GetRVA (TextSegment.ImportAddressTable)); + return; + default: + throw new NotSupportedException (); + } + } + + void WriteRsrc () + { + PrepareSection (rsrc); + WriteBuffer (win32_resources); + } + + void WriteReloc () + { + PrepareSection (reloc); + + var reloc_rva = text_map.GetRVA (TextSegment.StartupStub); + reloc_rva += module.Architecture == TargetArchitecture.IA64 ? 0x20u : 2; + var page_rva = reloc_rva & ~0xfffu; + + WriteUInt32 (page_rva); // PageRVA + WriteUInt32 (0x000c); // Block Size + + switch (module.Architecture) { + case TargetArchitecture.I386: + WriteUInt32 (0x3000 + reloc_rva - page_rva); + break; + default: + throw new NotSupportedException(); + } + } + + public void WriteImage () + { + WriteDOSHeader (); + WritePEFileHeader (); + WriteOptionalHeaders (); + WriteSectionHeaders (); + WriteText (); + if (rsrc != null) + WriteRsrc (); + if (reloc != null) + WriteReloc (); + Flush (); + } + + void BuildTextMap () + { + var map = text_map; + + map.AddMap (TextSegment.Code, metadata.code.length, !pe64 ? 4 : 16); + map.AddMap (TextSegment.Resources, metadata.resources.length, 8); + map.AddMap (TextSegment.Data, metadata.data.length, 4); + if (metadata.data.length > 0) + metadata.table_heap.FixupData (map.GetRVA (TextSegment.Data)); + map.AddMap (TextSegment.StrongNameSignature, GetStrongNameLength (), 4); + + BuildMetadataTextMap (); + + int debug_dir_len = 0; + if (debug_header != null && debug_header.HasEntries) { + var directories_len = debug_header.Entries.Length * ImageDebugDirectory.Size; + var data_address = (int) map.GetNextRVA (TextSegment.BlobHeap) + directories_len; + var data_len = 0; + + for (var i = 0; i < debug_header.Entries.Length; i++) { + var entry = debug_header.Entries [i]; + var directory = entry.Directory; + + directory.AddressOfRawData = entry.Data.Length == 0 ? 0 : data_address; + entry.Directory = directory; + + data_len += entry.Data.Length; + data_address += data_len; + } + + debug_dir_len = directories_len + data_len; + } + + map.AddMap (TextSegment.DebugDirectory, debug_dir_len, 4); + + if (!has_reloc) { + var start = map.GetNextRVA (TextSegment.DebugDirectory); + map.AddMap (TextSegment.ImportDirectory, new Range (start, 0)); + map.AddMap (TextSegment.ImportHintNameTable, new Range (start, 0)); + map.AddMap (TextSegment.StartupStub, new Range (start, 0)); + return; + } + + RVA import_dir_rva = map.GetNextRVA (TextSegment.DebugDirectory); + RVA import_hnt_rva = import_dir_rva + 48u; + import_hnt_rva = (import_hnt_rva + 15u) & ~15u; + uint import_dir_len = (import_hnt_rva - import_dir_rva) + 27u; + + RVA startup_stub_rva = import_dir_rva + import_dir_len; + startup_stub_rva = module.Architecture == TargetArchitecture.IA64 + ? (startup_stub_rva + 15u) & ~15u + : 2 + ((startup_stub_rva + 3u) & ~3u); + + map.AddMap (TextSegment.ImportDirectory, new Range (import_dir_rva, import_dir_len)); + map.AddMap (TextSegment.ImportHintNameTable, new Range (import_hnt_rva, 0)); + map.AddMap (TextSegment.StartupStub, new Range (startup_stub_rva, GetStartupStubLength ())); + } + + public void BuildMetadataTextMap () + { + var map = text_map; + + map.AddMap (TextSegment.MetadataHeader, GetMetadataHeaderLength (module.RuntimeVersion)); + map.AddMap (TextSegment.TableHeap, metadata.table_heap.length, 4); + map.AddMap (TextSegment.StringHeap, metadata.string_heap.length, 4); + map.AddMap (TextSegment.UserStringHeap, metadata.user_string_heap.IsEmpty ? 0 : metadata.user_string_heap.length, 4); + map.AddMap (TextSegment.GuidHeap, metadata.guid_heap.length, 4); + map.AddMap (TextSegment.BlobHeap, metadata.blob_heap.IsEmpty ? 0 : metadata.blob_heap.length, 4); + map.AddMap (TextSegment.PdbHeap, metadata.pdb_heap == null ? 0 : metadata.pdb_heap.length, 4); + } + + uint GetStartupStubLength () + { + switch (module.Architecture) { + case TargetArchitecture.I386: + return 6; + default: + throw new NotSupportedException (); + } + } + + int GetMetadataHeaderLength (string runtimeVersion) + { + return + // MetadataHeader + 20 + GetZeroTerminatedStringLength (runtimeVersion) + // #~ header + + 12 + // #Strings header + + 20 + // #US header + + (metadata.user_string_heap.IsEmpty ? 0 : 12) + // #GUID header + + 16 + // #Blob header + + (metadata.blob_heap.IsEmpty ? 0 : 16) + // + + (metadata.pdb_heap == null ? 0 : 16); + } + + int GetStrongNameLength () + { + if (module.Assembly == null) + return 0; + + var public_key = module.Assembly.Name.PublicKey; + if (public_key.IsNullOrEmpty ()) + return 0; + + // in fx 2.0 the key may be from 384 to 16384 bits + // so we must calculate the signature size based on + // the size of the public key (minus the 32 byte header) + int size = public_key.Length; + if (size > 32) + return size - 32; + + // note: size == 16 for the ECMA "key" which is replaced + // by the runtime with a 1024 bits key (128 bytes) + + return 128; // default strongname signature size + } + + public DataDirectory GetStrongNameSignatureDirectory () + { + return text_map.GetDataDirectory (TextSegment.StrongNameSignature); + } + + public uint GetHeaderSize () + { + return pe_header_size + SizeOfOptionalHeader () + (sections * section_header_size); + } + + void PatchWin32Resources (ByteBuffer resources) + { + PatchResourceDirectoryTable (resources); + } + + void PatchResourceDirectoryTable (ByteBuffer resources) + { + resources.Advance (12); + + var entries = resources.ReadUInt16 () + resources.ReadUInt16 (); + + for (int i = 0; i < entries; i++) + PatchResourceDirectoryEntry (resources); + } + + void PatchResourceDirectoryEntry (ByteBuffer resources) + { + resources.Advance (4); + var child = resources.ReadUInt32 (); + + var position = resources.position; + resources.position = (int) child & 0x7fffffff; + + if ((child & 0x80000000) != 0) + PatchResourceDirectoryTable (resources); + else + PatchResourceDataEntry (resources); + + resources.position = position; + } + + void PatchResourceDataEntry (ByteBuffer resources) + { + var rva = resources.ReadUInt32 (); + resources.position -= 4; + + resources.WriteUInt32 (rva - module.Image.Win32Resources.VirtualAddress + rsrc.VirtualAddress); + } + } +} + +#endif diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs.meta new file mode 100644 index 0000000..0469631 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/ImageWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39b65fd57099588448feee4a321d8cae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs new file mode 100644 index 0000000..49d8e90 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs @@ -0,0 +1,24 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using RVA = System.UInt32; + +namespace Mono.Cecil.PE { + + sealed class Section { + public string Name; + public RVA VirtualAddress; + public uint VirtualSize; + public uint SizeOfRawData; + public uint PointerToRawData; + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs.meta new file mode 100644 index 0000000..29d6467 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/Section.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d14264932fcc2b9459193049035e8422 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs new file mode 100644 index 0000000..614691b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs @@ -0,0 +1,112 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +#if !READ_ONLY + +using RVA = System.UInt32; + +namespace Mono.Cecil.PE { + + enum TextSegment { + ImportAddressTable, + CLIHeader, + Code, + Resources, + Data, + StrongNameSignature, + + // Metadata + MetadataHeader, + TableHeap, + StringHeap, + UserStringHeap, + GuidHeap, + BlobHeap, + PdbHeap, + // End Metadata + + DebugDirectory, + ImportDirectory, + ImportHintNameTable, + StartupStub, + } + + sealed class TextMap { + + readonly Range [] map = new Range [17 /*Enum.GetValues (typeof (TextSegment)).Length*/]; + + public void AddMap (TextSegment segment, int length) + { + map [(int) segment] = new Range (GetStart (segment), (uint) length); + } + + public void AddMap (TextSegment segment, int length, int align) + { + align--; + + AddMap (segment, (length + align) & ~align); + } + + public void AddMap (TextSegment segment, Range range) + { + map [(int) segment] = range; + } + + public Range GetRange (TextSegment segment) + { + return map [(int) segment]; + } + + public DataDirectory GetDataDirectory (TextSegment segment) + { + var range = map [(int) segment]; + + return new DataDirectory (range.Length == 0 ? 0 : range.Start, range.Length); + } + + public RVA GetRVA (TextSegment segment) + { + return map [(int) segment].Start; + } + + public RVA GetNextRVA (TextSegment segment) + { + var i = (int) segment; + return map [i].Start + map [i].Length; + } + + public int GetLength (TextSegment segment) + { + return (int) map [(int) segment].Length; + } + + RVA GetStart (TextSegment segment) + { + var index = (int) segment; + return index == 0 ? ImageWriter.text_rva : ComputeStart (index); + } + + RVA ComputeStart (int index) + { + index--; + return map [index].Start + map [index].Length; + } + + public uint GetLength () + { + var range = map [(int) TextSegment.StartupStub]; + return range.Start - ImageWriter.text_rva + range.Length; + } + } +} + +#endif diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs.meta new file mode 100644 index 0000000..2fca1dd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.PE/TextMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c42b43553ec65948be6d10fa6110879 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.meta new file mode 100644 index 0000000..9e780dc --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 399663049c23de644b75bd89eebf2e1e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs new file mode 100644 index 0000000..010049c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs @@ -0,0 +1,141 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; +using Mono.Collections.Generic; +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public struct ArrayDimension { + + int? lower_bound; + int? upper_bound; + + public int? LowerBound { + get { return lower_bound; } + set { lower_bound = value; } + } + + public int? UpperBound { + get { return upper_bound; } + set { upper_bound = value; } + } + + public bool IsSized { + get { return lower_bound.HasValue || upper_bound.HasValue; } + } + + public ArrayDimension (int? lowerBound, int? upperBound) + { + this.lower_bound = lowerBound; + this.upper_bound = upperBound; + } + + public override string ToString () + { + return !IsSized + ? string.Empty + : lower_bound + "..." + upper_bound; + } + } + + public sealed class ArrayType : TypeSpecification { + + Collection dimensions; + + public Collection Dimensions { + get { + if (dimensions != null) + return dimensions; + + dimensions = new Collection (); + dimensions.Add (new ArrayDimension ()); + return dimensions; + } + } + + public int Rank { + get { return dimensions == null ? 1 : dimensions.Count; } + } + + public bool IsVector { + get { + if (dimensions == null) + return true; + + if (dimensions.Count > 1) + return false; + + var dimension = dimensions [0]; + + return !dimension.IsSized; + } + } + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override string Name { + get { return base.Name + Suffix; } + } + + public override string FullName { + get { return base.FullName + Suffix; } + } + + string Suffix { + get { + if (IsVector) + return "[]"; + + var suffix = new StringBuilder (); + suffix.Append ("["); + for (int i = 0; i < dimensions.Count; i++) { + if (i > 0) + suffix.Append (","); + + suffix.Append (dimensions [i].ToString ()); + } + suffix.Append ("]"); + + return suffix.ToString (); + } + } + + public override bool IsArray { + get { return true; } + } + + public ArrayType (TypeReference type) + : base (type) + { + Mixin.CheckType (type); + this.etype = MD.ElementType.Array; + } + + public ArrayType (TypeReference type, int rank) + : this (type) + { + Mixin.CheckType (type); + + if (rank == 1) + return; + + dimensions = new Collection (rank); + for (int i = 0; i < rank; i++) + dimensions.Add (new ArrayDimension ()); + this.etype = MD.ElementType.Array; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs.meta new file mode 100644 index 0000000..4bc5ecd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ArrayType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d79ea7219dda652488e0bd8371c594cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs new file mode 100644 index 0000000..f02b93f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs @@ -0,0 +1,194 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class AssemblyDefinition : ICustomAttributeProvider, ISecurityDeclarationProvider, IDisposable { + + AssemblyNameDefinition name; + + internal ModuleDefinition main_module; + Collection modules; + Collection custom_attributes; + Collection security_declarations; + + public AssemblyNameDefinition Name { + get { return name; } + set { name = value; } + } + + public string FullName { + get { return name != null ? name.FullName : string.Empty; } + } + + public MetadataToken MetadataToken { + get { return new MetadataToken (TokenType.Assembly, 1); } + set { } + } + + public Collection Modules { + get { + if (modules != null) + return modules; + + if (main_module.HasImage) + return main_module.Read (ref modules, this, (_, reader) => reader.ReadModules ()); + + return modules = new Collection (1) { main_module }; + } + } + + public ModuleDefinition MainModule { + get { return main_module; } + } + + public MethodDefinition EntryPoint { + get { return main_module.EntryPoint; } + set { main_module.EntryPoint = value; } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (main_module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, main_module)); } + } + + public bool HasSecurityDeclarations { + get { + if (security_declarations != null) + return security_declarations.Count > 0; + + return this.GetHasSecurityDeclarations (main_module); + } + } + + public Collection SecurityDeclarations { + get { return security_declarations ?? (this.GetSecurityDeclarations (ref security_declarations, main_module)); } + } + + internal AssemblyDefinition () + { + } + + public void Dispose () + { + if (this.modules == null) { + main_module.Dispose (); + return; + } + + var modules = this.Modules; + for (int i = 0; i < modules.Count; i++) + modules [i].Dispose (); + } + +#if !READ_ONLY + public static AssemblyDefinition CreateAssembly (AssemblyNameDefinition assemblyName, string moduleName, ModuleKind kind) + { + return CreateAssembly (assemblyName, moduleName, new ModuleParameters { Kind = kind }); + } + + public static AssemblyDefinition CreateAssembly (AssemblyNameDefinition assemblyName, string moduleName, ModuleParameters parameters) + { + if (assemblyName == null) + throw new ArgumentNullException ("assemblyName"); + if (moduleName == null) + throw new ArgumentNullException ("moduleName"); + Mixin.CheckParameters (parameters); + if (parameters.Kind == ModuleKind.NetModule) + throw new ArgumentException ("kind"); + + var assembly = ModuleDefinition.CreateModule (moduleName, parameters).Assembly; + assembly.Name = assemblyName; + + return assembly; + } +#endif + + public static AssemblyDefinition ReadAssembly (string fileName) + { + return ReadAssembly (ModuleDefinition.ReadModule (fileName)); + } + + public static AssemblyDefinition ReadAssembly (string fileName, ReaderParameters parameters) + { + return ReadAssembly (ModuleDefinition.ReadModule (fileName, parameters)); + } + + public static AssemblyDefinition ReadAssembly (Stream stream) + { + return ReadAssembly (ModuleDefinition.ReadModule (stream)); + } + + public static AssemblyDefinition ReadAssembly (Stream stream, ReaderParameters parameters) + { + return ReadAssembly (ModuleDefinition.ReadModule (stream, parameters)); + } + + static AssemblyDefinition ReadAssembly (ModuleDefinition module) + { + var assembly = module.Assembly; + if (assembly == null) + throw new ArgumentException (); + + return assembly; + } + +#if !READ_ONLY + + public void Write (string fileName) + { + Write (fileName, new WriterParameters ()); + } + + public void Write (string fileName, WriterParameters parameters) + { + main_module.Write (fileName, parameters); + } + + public void Write () + { + main_module.Write (); + } + + public void Write (WriterParameters parameters) + { + main_module.Write (parameters); + } + + public void Write (Stream stream) + { + Write (stream, new WriterParameters ()); + } + + public void Write (Stream stream, WriterParameters parameters) + { + main_module.Write (stream, parameters); + } +#endif + + public override string ToString () + { + return this.FullName; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs.meta new file mode 100644 index 0000000..66fe0a9 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e72c434b18813b64da9226cd80e2510f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs new file mode 100644 index 0000000..6ca5bc2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs @@ -0,0 +1,24 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum AssemblyAttributes : uint { + PublicKey = 0x0001, + SideBySideCompatible = 0x0000, + Retargetable = 0x0100, + WindowsRuntime = 0x0200, + DisableJITCompileOptimizer = 0x4000, + EnableJITCompileTracking = 0x8000, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs.meta new file mode 100644 index 0000000..849660b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d29b626a09ffa84e866ad23d069b6af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs new file mode 100644 index 0000000..66ef4cb --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs @@ -0,0 +1,18 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum AssemblyHashAlgorithm : uint { + None = 0x0000, + Reserved = 0x8003, // MD5 + SHA1 = 0x8004 + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs.meta new file mode 100644 index 0000000..3b330f3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyHashAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eeea7cb62d58c6448924856ebdc0c25e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs new file mode 100644 index 0000000..5571093 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs @@ -0,0 +1,24 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle (Consts.AssemblyName)] + +#if !NET_CORE +[assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")] +#endif + +[assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)] +[assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)] +[assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)] +[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)] diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs.meta new file mode 100644 index 0000000..58a0865 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 624f8d11df9652d46a9a6f4375989034 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs new file mode 100644 index 0000000..f4896bd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs @@ -0,0 +1,39 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public sealed class AssemblyLinkedResource : Resource { + + AssemblyNameReference reference; + + public AssemblyNameReference Assembly { + get { return reference; } + set { reference = value; } + } + + public override ResourceType ResourceType { + get { return ResourceType.AssemblyLinked; } + } + + public AssemblyLinkedResource (string name, ManifestResourceAttributes flags) + : base (name, flags) + { + } + + public AssemblyLinkedResource (string name, ManifestResourceAttributes flags, AssemblyNameReference reference) + : base (name, flags) + { + this.reference = reference; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs.meta new file mode 100644 index 0000000..f71fb86 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyLinkedResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fa4c2b4566c5f046adaaad953403e29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs new file mode 100644 index 0000000..2511d79 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs @@ -0,0 +1,32 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public sealed class AssemblyNameDefinition : AssemblyNameReference { + + public override byte [] Hash { + get { return Empty.Array; } + } + + internal AssemblyNameDefinition () + { + this.token = new MetadataToken (TokenType.Assembly, 1); + } + + public AssemblyNameDefinition (string name, Version version) + : base (name, version) + { + this.token = new MetadataToken (TokenType.Assembly, 1); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs.meta new file mode 100644 index 0000000..670aeba --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 240a2b47ea0df6942bec155160934507 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs new file mode 100644 index 0000000..1d12cc1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs @@ -0,0 +1,266 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Globalization; +using System.Security.Cryptography; +using System.Text; + +namespace Mono.Cecil { + + public class AssemblyNameReference : IMetadataScope { + + string name; + string culture; + Version version; + uint attributes; + byte [] public_key; + byte [] public_key_token; + AssemblyHashAlgorithm hash_algorithm; + byte [] hash; + + internal MetadataToken token; + + string full_name; + + public string Name { + get { return name; } + set { + name = value; + full_name = null; + } + } + + public string Culture { + get { return culture; } + set { + culture = value; + full_name = null; + } + } + + public Version Version { + get { return version; } + set { + version = Mixin.CheckVersion (value); + full_name = null; + } + } + + public AssemblyAttributes Attributes { + get { return (AssemblyAttributes) attributes; } + set { attributes = (uint) value; } + } + + public bool HasPublicKey { + get { return attributes.GetAttributes ((uint) AssemblyAttributes.PublicKey); } + set { attributes = attributes.SetAttributes ((uint) AssemblyAttributes.PublicKey, value); } + } + + public bool IsSideBySideCompatible { + get { return attributes.GetAttributes ((uint) AssemblyAttributes.SideBySideCompatible); } + set { attributes = attributes.SetAttributes ((uint) AssemblyAttributes.SideBySideCompatible, value); } + } + + public bool IsRetargetable { + get { return attributes.GetAttributes ((uint) AssemblyAttributes.Retargetable); } + set { attributes = attributes.SetAttributes ((uint) AssemblyAttributes.Retargetable, value); } + } + + public bool IsWindowsRuntime { + get { return attributes.GetAttributes ((uint) AssemblyAttributes.WindowsRuntime); } + set { attributes = attributes.SetAttributes ((uint) AssemblyAttributes.WindowsRuntime, value); } + } + + public byte [] PublicKey { + get { return public_key ?? Empty.Array; } + set { + public_key = value; + HasPublicKey = !public_key.IsNullOrEmpty (); + public_key_token = Empty.Array; + full_name = null; + } + } + + public byte [] PublicKeyToken { + get { + if (public_key_token.IsNullOrEmpty () && !public_key.IsNullOrEmpty ()) { + var hash = HashPublicKey (); + // we need the last 8 bytes in reverse order + var local_public_key_token = new byte [8]; + Array.Copy (hash, (hash.Length - 8), local_public_key_token, 0, 8); + Array.Reverse (local_public_key_token, 0, 8); + public_key_token = local_public_key_token; // publish only once finished (required for thread-safety) + } + return public_key_token ?? Empty.Array; + } + set { + public_key_token = value; + full_name = null; + } + } + + byte [] HashPublicKey () + { + HashAlgorithm algorithm; + + switch (hash_algorithm) { + case AssemblyHashAlgorithm.Reserved: + algorithm = MD5.Create (); + break; + default: + // None default to SHA1 + algorithm = SHA1.Create (); + break; + } + + using (algorithm) + return algorithm.ComputeHash (public_key); + } + + public virtual MetadataScopeType MetadataScopeType { + get { return MetadataScopeType.AssemblyNameReference; } + } + + public string FullName { + get { + if (full_name != null) + return full_name; + + const string sep = ", "; + + var builder = new StringBuilder (); + builder.Append (name); + builder.Append (sep); + builder.Append ("Version="); + builder.Append (version.ToString (fieldCount: 4)); + builder.Append (sep); + builder.Append ("Culture="); + builder.Append (string.IsNullOrEmpty (culture) ? "neutral" : culture); + builder.Append (sep); + builder.Append ("PublicKeyToken="); + + var pk_token = PublicKeyToken; + if (!pk_token.IsNullOrEmpty () && pk_token.Length > 0) { + for (int i = 0 ; i < pk_token.Length ; i++) { + builder.Append (pk_token [i].ToString ("x2")); + } + } else + builder.Append ("null"); + + if (IsRetargetable) { + builder.Append (sep); + builder.Append ("Retargetable=Yes"); + } + + return full_name = builder.ToString (); + } + } + + public static AssemblyNameReference Parse (string fullName) + { + if (fullName == null) + throw new ArgumentNullException ("fullName"); + if (fullName.Length == 0) + throw new ArgumentException ("Name can not be empty"); + + var name = new AssemblyNameReference (); + var tokens = fullName.Split (','); + for (int i = 0; i < tokens.Length; i++) { + var token = tokens [i].Trim (); + + if (i == 0) { + name.Name = token; + continue; + } + + var parts = token.Split ('='); + if (parts.Length != 2) + throw new ArgumentException ("Malformed name"); + + switch (parts [0].ToLowerInvariant ()) { + case "version": + name.Version = new Version (parts [1]); + break; + case "culture": + name.Culture = parts [1] == "neutral" ? "" : parts [1]; + break; + case "publickeytoken": + var pk_token = parts [1]; + if (pk_token == "null") + break; + + name.PublicKeyToken = new byte [pk_token.Length / 2]; + for (int j = 0; j < name.PublicKeyToken.Length; j++) + name.PublicKeyToken [j] = Byte.Parse (pk_token.Substring (j * 2, 2), NumberStyles.HexNumber); + + break; + } + } + + return name; + } + + public AssemblyHashAlgorithm HashAlgorithm { + get { return hash_algorithm; } + set { hash_algorithm = value; } + } + + public virtual byte [] Hash { + get { return hash; } + set { hash = value; } + } + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + internal AssemblyNameReference () + { + this.version = Mixin.ZeroVersion; + this.token = new MetadataToken (TokenType.AssemblyRef); + } + + public AssemblyNameReference (string name, Version version) + { + Mixin.CheckName (name); + + this.name = name; + this.version = Mixin.CheckVersion (version); + this.hash_algorithm = AssemblyHashAlgorithm.None; + this.token = new MetadataToken (TokenType.AssemblyRef); + } + + public override string ToString () + { + return this.FullName; + } + } + + partial class Mixin { + + public static Version ZeroVersion = new Version (0, 0, 0 ,0); + + public static Version CheckVersion (Version version) + { + if (version == null) + return ZeroVersion; + + if (version.Build == -1) + return new Version (version.Major, version.Minor, 0, 0); + + if (version.Revision == -1) + return new Version (version.Major, version.Minor, version.Build, 0); + + return version; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs.meta new file mode 100644 index 0000000..01efd1a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyNameReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f82948fc67973494d8a3cd396564fde5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs new file mode 100644 index 0000000..48aa4bb --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs @@ -0,0 +1,3862 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; + +using Mono.Collections.Generic; +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; +using Mono.Cecil.PE; + +using RVA = System.UInt32; + +namespace Mono.Cecil { + + abstract class ModuleReader { + + readonly protected ModuleDefinition module; + + protected ModuleReader (Image image, ReadingMode mode) + { + this.module = new ModuleDefinition (image); + this.module.ReadingMode = mode; + } + + protected abstract void ReadModule (); + public abstract void ReadSymbols (ModuleDefinition module); + + protected void ReadModuleManifest (MetadataReader reader) + { + reader.Populate (module); + + ReadAssembly (reader); + } + + void ReadAssembly (MetadataReader reader) + { + var name = reader.ReadAssemblyNameDefinition (); + if (name == null) { + module.kind = ModuleKind.NetModule; + return; + } + + var assembly = new AssemblyDefinition (); + assembly.Name = name; + + module.assembly = assembly; + assembly.main_module = module; + } + + public static ModuleDefinition CreateModule (Image image, ReaderParameters parameters) + { + var reader = CreateModuleReader (image, parameters.ReadingMode); + var module = reader.module; + + if (parameters.assembly_resolver != null) + module.assembly_resolver = Disposable.NotOwned (parameters.assembly_resolver); + + if (parameters.metadata_resolver != null) + module.metadata_resolver = parameters.metadata_resolver; + +#if !READ_ONLY + if (parameters.metadata_importer_provider != null) + module.metadata_importer = parameters.metadata_importer_provider.GetMetadataImporter (module); + if (parameters.reflection_importer_provider != null) + module.reflection_importer = parameters.reflection_importer_provider.GetReflectionImporter (module); +#endif + + GetMetadataKind (module, parameters); + + reader.ReadModule (); + + ReadSymbols (module, parameters); + + reader.ReadSymbols (module); + + if (parameters.ReadingMode == ReadingMode.Immediate) + module.MetadataSystem.Clear (); + + return module; + } + + static void ReadSymbols (ModuleDefinition module, ReaderParameters parameters) + { + var symbol_reader_provider = parameters.SymbolReaderProvider; + + if (symbol_reader_provider == null && parameters.ReadSymbols) + symbol_reader_provider = new DefaultSymbolReaderProvider (); + + if (symbol_reader_provider != null) { + module.SymbolReaderProvider = symbol_reader_provider; + + var reader = parameters.SymbolStream != null + ? symbol_reader_provider.GetSymbolReader (module, parameters.SymbolStream) + : symbol_reader_provider.GetSymbolReader (module, module.FileName); + + if (reader != null) + module.ReadSymbols (reader, parameters.ThrowIfSymbolsAreNotMatching); + } + + if (module.Image.HasDebugTables ()) + module.ReadSymbols (new PortablePdbReader (module.Image, module)); + } + + static void GetMetadataKind (ModuleDefinition module, ReaderParameters parameters) + { + if (!parameters.ApplyWindowsRuntimeProjections) { + module.MetadataKind = MetadataKind.Ecma335; + return; + } + + var runtime_version = module.RuntimeVersion; + + if (!runtime_version.Contains ("WindowsRuntime")) + module.MetadataKind = MetadataKind.Ecma335; + else if (runtime_version.Contains ("CLR")) + module.MetadataKind = MetadataKind.ManagedWindowsMetadata; + else + module.MetadataKind = MetadataKind.WindowsMetadata; + } + + static ModuleReader CreateModuleReader (Image image, ReadingMode mode) + { + switch (mode) { + case ReadingMode.Immediate: + return new ImmediateModuleReader (image); + case ReadingMode.Deferred: + return new DeferredModuleReader (image); + default: + throw new ArgumentException (); + } + } + } + + sealed class ImmediateModuleReader : ModuleReader { + + bool resolve_attributes; + + public ImmediateModuleReader (Image image) + : base (image, ReadingMode.Immediate) + { + } + + protected override void ReadModule () + { + this.module.Read (this.module, (module, reader) => { + ReadModuleManifest (reader); + ReadModule (module, resolve_attributes: true); + }); + } + + public void ReadModule (ModuleDefinition module, bool resolve_attributes) + { + this.resolve_attributes = resolve_attributes; + + if (module.HasAssemblyReferences) + Mixin.Read (module.AssemblyReferences); + if (module.HasResources) + Mixin.Read (module.Resources); + if (module.HasModuleReferences) + Mixin.Read (module.ModuleReferences); + if (module.HasTypes) + ReadTypes (module.Types); + if (module.HasExportedTypes) + Mixin.Read (module.ExportedTypes); + + ReadCustomAttributes (module); + + var assembly = module.Assembly; + if (assembly == null) + return; + + ReadCustomAttributes (assembly); + ReadSecurityDeclarations (assembly); + } + + void ReadTypes (Collection types) + { + for (int i = 0; i < types.Count; i++) + ReadType (types [i]); + } + + void ReadType (TypeDefinition type) + { + ReadGenericParameters (type); + + if (type.HasInterfaces) + ReadInterfaces (type); + + if (type.HasNestedTypes) + ReadTypes (type.NestedTypes); + + if (type.HasLayoutInfo) + Mixin.Read (type.ClassSize); + + if (type.HasFields) + ReadFields (type); + + if (type.HasMethods) + ReadMethods (type); + + if (type.HasProperties) + ReadProperties (type); + + if (type.HasEvents) + ReadEvents (type); + + ReadSecurityDeclarations (type); + ReadCustomAttributes (type); + } + + void ReadInterfaces (TypeDefinition type) + { + var interfaces = type.Interfaces; + + for (int i = 0; i < interfaces.Count; i++) + ReadCustomAttributes (interfaces [i]); + } + + void ReadGenericParameters (IGenericParameterProvider provider) + { + if (!provider.HasGenericParameters) + return; + + var parameters = provider.GenericParameters; + + for (int i = 0; i < parameters.Count; i++) { + var parameter = parameters [i]; + + if (parameter.HasConstraints) + Mixin.Read (parameter.Constraints); + + ReadCustomAttributes (parameter); + } + } + + void ReadSecurityDeclarations (ISecurityDeclarationProvider provider) + { + if (!provider.HasSecurityDeclarations) + return; + + var security_declarations = provider.SecurityDeclarations; + + if (!resolve_attributes) + return; + + for (int i = 0; i < security_declarations.Count; i++) { + var security_declaration = security_declarations [i]; + + Mixin.Read (security_declaration.SecurityAttributes); + } + } + + void ReadCustomAttributes (ICustomAttributeProvider provider) + { + if (!provider.HasCustomAttributes) + return; + + var custom_attributes = provider.CustomAttributes; + + if (!resolve_attributes) + return; + + for (int i = 0; i < custom_attributes.Count; i++) { + var custom_attribute = custom_attributes [i]; + + Mixin.Read (custom_attribute.ConstructorArguments); + } + } + + void ReadFields (TypeDefinition type) + { + var fields = type.Fields; + + for (int i = 0; i < fields.Count; i++) { + var field = fields [i]; + + if (field.HasConstant) + Mixin.Read (field.Constant); + + if (field.HasLayoutInfo) + Mixin.Read (field.Offset); + + if (field.RVA > 0) + Mixin.Read (field.InitialValue); + + if (field.HasMarshalInfo) + Mixin.Read (field.MarshalInfo); + + ReadCustomAttributes (field); + } + } + + void ReadMethods (TypeDefinition type) + { + var methods = type.Methods; + + for (int i = 0; i < methods.Count; i++) { + var method = methods [i]; + + ReadGenericParameters (method); + + if (method.HasParameters) + ReadParameters (method); + + if (method.HasOverrides) + Mixin.Read (method.Overrides); + + if (method.IsPInvokeImpl) + Mixin.Read (method.PInvokeInfo); + + ReadSecurityDeclarations (method); + ReadCustomAttributes (method); + + var return_type = method.MethodReturnType; + if (return_type.HasConstant) + Mixin.Read (return_type.Constant); + + if (return_type.HasMarshalInfo) + Mixin.Read (return_type.MarshalInfo); + + ReadCustomAttributes (return_type); + } + } + + void ReadParameters (MethodDefinition method) + { + var parameters = method.Parameters; + + for (int i = 0; i < parameters.Count; i++) { + var parameter = parameters [i]; + + if (parameter.HasConstant) + Mixin.Read (parameter.Constant); + + if (parameter.HasMarshalInfo) + Mixin.Read (parameter.MarshalInfo); + + ReadCustomAttributes (parameter); + } + } + + void ReadProperties (TypeDefinition type) + { + var properties = type.Properties; + + for (int i = 0; i < properties.Count; i++) { + var property = properties [i]; + + Mixin.Read (property.GetMethod); + + if (property.HasConstant) + Mixin.Read (property.Constant); + + ReadCustomAttributes (property); + } + } + + void ReadEvents (TypeDefinition type) + { + var events = type.Events; + + for (int i = 0; i < events.Count; i++) { + var @event = events [i]; + + Mixin.Read (@event.AddMethod); + + ReadCustomAttributes (@event); + } + } + + public override void ReadSymbols (ModuleDefinition module) + { + if (module.symbol_reader == null) + return; + + ReadTypesSymbols (module.Types, module.symbol_reader); + } + + void ReadTypesSymbols (Collection types, ISymbolReader symbol_reader) + { + for (int i = 0; i < types.Count; i++) { + var type = types [i]; + + if (type.HasNestedTypes) + ReadTypesSymbols (type.NestedTypes, symbol_reader); + + if (type.HasMethods) + ReadMethodsSymbols (type, symbol_reader); + } + } + + void ReadMethodsSymbols (TypeDefinition type, ISymbolReader symbol_reader) + { + var methods = type.Methods; + for (int i = 0; i < methods.Count; i++) { + var method = methods [i]; + + if (method.HasBody && method.token.RID != 0 && method.debug_info == null) + method.debug_info = symbol_reader.Read (method); + } + } + } + + sealed class DeferredModuleReader : ModuleReader { + + public DeferredModuleReader (Image image) + : base (image, ReadingMode.Deferred) + { + } + + protected override void ReadModule () + { + this.module.Read (this.module, (_, reader) => ReadModuleManifest (reader)); + } + + public override void ReadSymbols (ModuleDefinition module) + { + } + } + + sealed class MetadataReader : ByteBuffer { + + readonly internal Image image; + readonly internal ModuleDefinition module; + readonly internal MetadataSystem metadata; + + internal CodeReader code; + internal IGenericContext context; + + readonly MetadataReader metadata_reader; + + public MetadataReader (ModuleDefinition module) + : base (module.Image.TableHeap.data) + { + this.image = module.Image; + this.module = module; + this.metadata = module.MetadataSystem; + this.code = new CodeReader (this); + } + + public MetadataReader (Image image, ModuleDefinition module, MetadataReader metadata_reader) + : base (image.TableHeap.data) + { + this.image = image; + this.module = module; + this.metadata = module.MetadataSystem; + this.metadata_reader = metadata_reader; + } + + int GetCodedIndexSize (CodedIndex index) + { + return image.GetCodedIndexSize (index); + } + + uint ReadByIndexSize (int size) + { + if (size == 4) + return ReadUInt32 (); + else + return ReadUInt16 (); + } + + byte [] ReadBlob () + { + var blob_heap = image.BlobHeap; + if (blob_heap == null) { + position += 2; + return Empty.Array; + } + + return blob_heap.Read (ReadBlobIndex ()); + } + + byte [] ReadBlob (uint signature) + { + var blob_heap = image.BlobHeap; + if (blob_heap == null) + return Empty.Array; + + return blob_heap.Read (signature); + } + + uint ReadBlobIndex () + { + var blob_heap = image.BlobHeap; + return ReadByIndexSize (blob_heap != null ? blob_heap.IndexSize : 2); + } + + void GetBlobView (uint signature, out byte [] blob, out int index, out int count) + { + var blob_heap = image.BlobHeap; + if (blob_heap == null) { + blob = null; + index = count = 0; + return; + } + + blob_heap.GetView (signature, out blob, out index, out count); + } + + string ReadString () + { + return image.StringHeap.Read (ReadByIndexSize (image.StringHeap.IndexSize)); + } + + uint ReadStringIndex () + { + return ReadByIndexSize (image.StringHeap.IndexSize); + } + + Guid ReadGuid () + { + return image.GuidHeap.Read (ReadByIndexSize (image.GuidHeap.IndexSize)); + } + + uint ReadTableIndex (Table table) + { + return ReadByIndexSize (image.GetTableIndexSize (table)); + } + + MetadataToken ReadMetadataToken (CodedIndex index) + { + return index.GetMetadataToken (ReadByIndexSize (GetCodedIndexSize (index))); + } + + int MoveTo (Table table) + { + var info = image.TableHeap [table]; + if (info.Length != 0) + this.position = (int) info.Offset; + + return (int) info.Length; + } + + bool MoveTo (Table table, uint row) + { + var info = image.TableHeap [table]; + var length = info.Length; + if (length == 0 || row > length) + return false; + + this.position = (int) (info.Offset + (info.RowSize * (row - 1))); + return true; + } + + public AssemblyNameDefinition ReadAssemblyNameDefinition () + { + if (MoveTo (Table.Assembly) == 0) + return null; + + var name = new AssemblyNameDefinition (); + + name.HashAlgorithm = (AssemblyHashAlgorithm) ReadUInt32 (); + + PopulateVersionAndFlags (name); + + name.PublicKey = ReadBlob (); + + PopulateNameAndCulture (name); + + return name; + } + + public ModuleDefinition Populate (ModuleDefinition module) + { + if (MoveTo (Table.Module) == 0) + return module; + + Advance (2); // Generation + + module.Name = ReadString (); + module.Mvid = ReadGuid (); + + return module; + } + + void InitializeAssemblyReferences () + { + if (metadata.AssemblyReferences != null) + return; + + int length = MoveTo (Table.AssemblyRef); + var references = metadata.AssemblyReferences = new AssemblyNameReference [length]; + + for (uint i = 0; i < length; i++) { + var reference = new AssemblyNameReference (); + reference.token = new MetadataToken (TokenType.AssemblyRef, i + 1); + + PopulateVersionAndFlags (reference); + + var key_or_token = ReadBlob (); + + if (reference.HasPublicKey) + reference.PublicKey = key_or_token; + else + reference.PublicKeyToken = key_or_token; + + PopulateNameAndCulture (reference); + + reference.Hash = ReadBlob (); + + references [i] = reference; + } + } + + public Collection ReadAssemblyReferences () + { + InitializeAssemblyReferences (); + + var references = new Collection (metadata.AssemblyReferences); + if (module.IsWindowsMetadata ()) + module.Projections.AddVirtualReferences (references); + + return references; + } + + public MethodDefinition ReadEntryPoint () + { + if (module.Image.EntryPointToken == 0) + return null; + + var token = new MetadataToken (module.Image.EntryPointToken); + return GetMethodDefinition (token.RID); + } + + public Collection ReadModules () + { + var modules = new Collection (1); + modules.Add (this.module); + + int length = MoveTo (Table.File); + for (uint i = 1; i <= length; i++) { + var attributes = (FileAttributes) ReadUInt32 (); + var name = ReadString (); + ReadBlobIndex (); + + if (attributes != FileAttributes.ContainsMetaData) + continue; + + var parameters = new ReaderParameters { + ReadingMode = module.ReadingMode, + SymbolReaderProvider = module.SymbolReaderProvider, + AssemblyResolver = module.AssemblyResolver + }; + + modules.Add (ModuleDefinition.ReadModule ( + GetModuleFileName (name), parameters)); + } + + return modules; + } + + string GetModuleFileName (string name) + { + if (module.FileName == null) + throw new NotSupportedException (); + + var path = Path.GetDirectoryName (module.FileName); + return Path.Combine (path, name); + } + + void InitializeModuleReferences () + { + if (metadata.ModuleReferences != null) + return; + + int length = MoveTo (Table.ModuleRef); + var references = metadata.ModuleReferences = new ModuleReference [length]; + + for (uint i = 0; i < length; i++) { + var reference = new ModuleReference (ReadString ()); + reference.token = new MetadataToken (TokenType.ModuleRef, i + 1); + + references [i] = reference; + } + } + + public Collection ReadModuleReferences () + { + InitializeModuleReferences (); + + return new Collection (metadata.ModuleReferences); + } + + public bool HasFileResource () + { + int length = MoveTo (Table.File); + if (length == 0) + return false; + + for (uint i = 1; i <= length; i++) + if (ReadFileRecord (i).Col1 == FileAttributes.ContainsNoMetaData) + return true; + + return false; + } + + public Collection ReadResources () + { + int length = MoveTo (Table.ManifestResource); + var resources = new Collection (length); + + for (int i = 1; i <= length; i++) { + var offset = ReadUInt32 (); + var flags = (ManifestResourceAttributes) ReadUInt32 (); + var name = ReadString (); + var implementation = ReadMetadataToken (CodedIndex.Implementation); + + Resource resource; + + if (implementation.RID == 0) { + resource = new EmbeddedResource (name, flags, offset, this); + } else if (implementation.TokenType == TokenType.AssemblyRef) { + resource = new AssemblyLinkedResource (name, flags) { + Assembly = (AssemblyNameReference) GetTypeReferenceScope (implementation), + }; + } else if (implementation.TokenType == TokenType.File) { + var file_record = ReadFileRecord (implementation.RID); + + resource = new LinkedResource (name, flags) { + File = file_record.Col2, + hash = ReadBlob (file_record.Col3) + }; + } else + continue; + + resources.Add (resource); + } + + return resources; + } + + Row ReadFileRecord (uint rid) + { + var position = this.position; + + if (!MoveTo (Table.File, rid)) + throw new ArgumentException (); + + var record = new Row ( + (FileAttributes) ReadUInt32 (), + ReadString (), + ReadBlobIndex ()); + + this.position = position; + + return record; + } + + public byte [] GetManagedResource (uint offset) + { + return image.GetReaderAt (image.Resources.VirtualAddress, offset, (o, reader) => { + reader.Advance ((int) o); + return reader.ReadBytes (reader.ReadInt32 ()); + }) ?? Empty.Array; + } + + void PopulateVersionAndFlags (AssemblyNameReference name) + { + name.Version = new Version ( + ReadUInt16 (), + ReadUInt16 (), + ReadUInt16 (), + ReadUInt16 ()); + + name.Attributes = (AssemblyAttributes) ReadUInt32 (); + } + + void PopulateNameAndCulture (AssemblyNameReference name) + { + name.Name = ReadString (); + name.Culture = ReadString (); + } + + public TypeDefinitionCollection ReadTypes () + { + InitializeTypeDefinitions (); + var mtypes = metadata.Types; + var type_count = mtypes.Length - metadata.NestedTypes.Count; + var types = new TypeDefinitionCollection (module, type_count); + + for (int i = 0; i < mtypes.Length; i++) { + var type = mtypes [i]; + if (IsNested (type.Attributes)) + continue; + + types.Add (type); + } + + if (image.HasTable (Table.MethodPtr) || image.HasTable (Table.FieldPtr)) + CompleteTypes (); + + return types; + } + + void CompleteTypes () + { + var types = metadata.Types; + + for (int i = 0; i < types.Length; i++) { + var type = types [i]; + + Mixin.Read (type.Fields); + Mixin.Read (type.Methods); + } + } + + void InitializeTypeDefinitions () + { + if (metadata.Types != null) + return; + + InitializeNestedTypes (); + InitializeFields (); + InitializeMethods (); + + int length = MoveTo (Table.TypeDef); + var types = metadata.Types = new TypeDefinition [length]; + + for (uint i = 0; i < length; i++) { + if (types [i] != null) + continue; + + types [i] = ReadType (i + 1); + } + + if (module.IsWindowsMetadata ()) { + for (uint i = 0; i < length; i++) { + WindowsRuntimeProjections.Project (types [i]); + } + } + } + + static bool IsNested (TypeAttributes attributes) + { + switch (attributes & TypeAttributes.VisibilityMask) { + case TypeAttributes.NestedAssembly: + case TypeAttributes.NestedFamANDAssem: + case TypeAttributes.NestedFamily: + case TypeAttributes.NestedFamORAssem: + case TypeAttributes.NestedPrivate: + case TypeAttributes.NestedPublic: + return true; + default: + return false; + } + } + + public bool HasNestedTypes (TypeDefinition type) + { + Collection mapping; + InitializeNestedTypes (); + + if (!metadata.TryGetNestedTypeMapping (type, out mapping)) + return false; + + return mapping.Count > 0; + } + + public Collection ReadNestedTypes (TypeDefinition type) + { + InitializeNestedTypes (); + Collection mapping; + if (!metadata.TryGetNestedTypeMapping (type, out mapping)) + return new MemberDefinitionCollection (type); + + var nested_types = new MemberDefinitionCollection (type, mapping.Count); + + for (int i = 0; i < mapping.Count; i++) { + var nested_type = GetTypeDefinition (mapping [i]); + + if (nested_type != null) + nested_types.Add (nested_type); + } + + metadata.RemoveNestedTypeMapping (type); + + return nested_types; + } + + void InitializeNestedTypes () + { + if (metadata.NestedTypes != null) + return; + + var length = MoveTo (Table.NestedClass); + + metadata.NestedTypes = new Dictionary> (length); + metadata.ReverseNestedTypes = new Dictionary (length); + + if (length == 0) + return; + + for (int i = 1; i <= length; i++) { + var nested = ReadTableIndex (Table.TypeDef); + var declaring = ReadTableIndex (Table.TypeDef); + + AddNestedMapping (declaring, nested); + } + } + + void AddNestedMapping (uint declaring, uint nested) + { + metadata.SetNestedTypeMapping (declaring, AddMapping (metadata.NestedTypes, declaring, nested)); + metadata.SetReverseNestedTypeMapping (nested, declaring); + } + + static Collection AddMapping (Dictionary> cache, TKey key, TValue value) + { + Collection mapped; + if (!cache.TryGetValue (key, out mapped)) { + mapped = new Collection (); + } + mapped.Add (value); + return mapped; + } + + TypeDefinition ReadType (uint rid) + { + if (!MoveTo (Table.TypeDef, rid)) + return null; + + var attributes = (TypeAttributes) ReadUInt32 (); + var name = ReadString (); + var @namespace = ReadString (); + var type = new TypeDefinition (@namespace, name, attributes); + type.token = new MetadataToken (TokenType.TypeDef, rid); + type.scope = module; + type.module = module; + + metadata.AddTypeDefinition (type); + + this.context = type; + + type.BaseType = GetTypeDefOrRef (ReadMetadataToken (CodedIndex.TypeDefOrRef)); + + type.fields_range = ReadListRange (rid, Table.TypeDef, Table.Field); + type.methods_range = ReadListRange (rid, Table.TypeDef, Table.Method); + + if (IsNested (attributes)) + type.DeclaringType = GetNestedTypeDeclaringType (type); + + return type; + } + + TypeDefinition GetNestedTypeDeclaringType (TypeDefinition type) + { + uint declaring_rid; + if (!metadata.TryGetReverseNestedTypeMapping (type, out declaring_rid)) + return null; + + metadata.RemoveReverseNestedTypeMapping (type); + return GetTypeDefinition (declaring_rid); + } + + Range ReadListRange (uint current_index, Table current, Table target) + { + var list = new Range (); + + var start = ReadTableIndex (target); + if (start == 0) + return list; + + uint next_index; + var current_table = image.TableHeap [current]; + + if (current_index == current_table.Length) + next_index = image.TableHeap [target].Length + 1; + else { + var position = this.position; + this.position += (int) (current_table.RowSize - image.GetTableIndexSize (target)); + next_index = ReadTableIndex (target); + this.position = position; + } + + list.Start = start; + list.Length = next_index - start; + + return list; + } + + public Row ReadTypeLayout (TypeDefinition type) + { + InitializeTypeLayouts (); + Row class_layout; + var rid = type.token.RID; + if (!metadata.ClassLayouts.TryGetValue (rid, out class_layout)) + return new Row (Mixin.NoDataMarker, Mixin.NoDataMarker); + + type.PackingSize = (short) class_layout.Col1; + type.ClassSize = (int) class_layout.Col2; + + metadata.ClassLayouts.Remove (rid); + + return new Row ((short) class_layout.Col1, (int) class_layout.Col2); + } + + void InitializeTypeLayouts () + { + if (metadata.ClassLayouts != null) + return; + + int length = MoveTo (Table.ClassLayout); + + var class_layouts = metadata.ClassLayouts = new Dictionary> (length); + + for (uint i = 0; i < length; i++) { + var packing_size = ReadUInt16 (); + var class_size = ReadUInt32 (); + + var parent = ReadTableIndex (Table.TypeDef); + + class_layouts.Add (parent, new Row (packing_size, class_size)); + } + } + + public TypeReference GetTypeDefOrRef (MetadataToken token) + { + return (TypeReference) LookupToken (token); + } + + public TypeDefinition GetTypeDefinition (uint rid) + { + InitializeTypeDefinitions (); + + var type = metadata.GetTypeDefinition (rid); + if (type != null) + return type; + + type = ReadTypeDefinition (rid); + + if (module.IsWindowsMetadata ()) + WindowsRuntimeProjections.Project (type); + + return type; + } + + TypeDefinition ReadTypeDefinition (uint rid) + { + if (!MoveTo (Table.TypeDef, rid)) + return null; + + return ReadType (rid); + } + + void InitializeTypeReferences () + { + if (metadata.TypeReferences != null) + return; + + metadata.TypeReferences = new TypeReference [image.GetTableLength (Table.TypeRef)]; + } + + public TypeReference GetTypeReference (string scope, string full_name) + { + InitializeTypeReferences (); + + var length = metadata.TypeReferences.Length; + + for (uint i = 1; i <= length; i++) { + var type = GetTypeReference (i); + + if (type.FullName != full_name) + continue; + + if (string.IsNullOrEmpty (scope)) + return type; + + if (type.Scope.Name == scope) + return type; + } + + return null; + } + + TypeReference GetTypeReference (uint rid) + { + InitializeTypeReferences (); + + var type = metadata.GetTypeReference (rid); + if (type != null) + return type; + + return ReadTypeReference (rid); + } + + TypeReference ReadTypeReference (uint rid) + { + if (!MoveTo (Table.TypeRef, rid)) + return null; + + TypeReference declaring_type = null; + IMetadataScope scope; + + var scope_token = ReadMetadataToken (CodedIndex.ResolutionScope); + + var name = ReadString (); + var @namespace = ReadString (); + + var type = new TypeReference ( + @namespace, + name, + module, + null); + + type.token = new MetadataToken (TokenType.TypeRef, rid); + + metadata.AddTypeReference (type); + + if (scope_token.TokenType == TokenType.TypeRef) { + if (scope_token.RID != rid) { + declaring_type = GetTypeDefOrRef (scope_token); + + scope = declaring_type != null + ? declaring_type.Scope + : module; + } else // obfuscated typeref row pointing to self + scope = module; + } else + scope = GetTypeReferenceScope (scope_token); + + type.scope = scope; + type.DeclaringType = declaring_type; + + MetadataSystem.TryProcessPrimitiveTypeReference (type); + + if (type.Module.IsWindowsMetadata ()) + WindowsRuntimeProjections.Project (type); + + return type; + } + + IMetadataScope GetTypeReferenceScope (MetadataToken scope) + { + if (scope.TokenType == TokenType.Module) + return module; + + IMetadataScope[] scopes; + + switch (scope.TokenType) { + case TokenType.AssemblyRef: + InitializeAssemblyReferences (); + scopes = metadata.AssemblyReferences; + break; + case TokenType.ModuleRef: + InitializeModuleReferences (); + scopes = metadata.ModuleReferences; + break; + default: + throw new NotSupportedException (); + } + + var index = scope.RID - 1; + if (index < 0 || index >= scopes.Length) + return null; + + return scopes [index]; + } + + public IEnumerable GetTypeReferences () + { + InitializeTypeReferences (); + + var length = image.GetTableLength (Table.TypeRef); + + var type_references = new TypeReference [length]; + + for (uint i = 1; i <= length; i++) + type_references [i - 1] = GetTypeReference (i); + + return type_references; + } + + TypeReference GetTypeSpecification (uint rid) + { + if (!MoveTo (Table.TypeSpec, rid)) + return null; + + var reader = ReadSignature (ReadBlobIndex ()); + var type = reader.ReadTypeSignature (); + if (type.token.RID == 0) + type.token = new MetadataToken (TokenType.TypeSpec, rid); + + return type; + } + + SignatureReader ReadSignature (uint signature) + { + return new SignatureReader (signature, this); + } + + public bool HasInterfaces (TypeDefinition type) + { + InitializeInterfaces (); + Collection> mapping; + + return metadata.TryGetInterfaceMapping (type, out mapping); + } + + public InterfaceImplementationCollection ReadInterfaces (TypeDefinition type) + { + InitializeInterfaces (); + Collection> mapping; + + if (!metadata.TryGetInterfaceMapping (type, out mapping)) + return new InterfaceImplementationCollection (type); + + var interfaces = new InterfaceImplementationCollection (type, mapping.Count); + + this.context = type; + + for (int i = 0; i < mapping.Count; i++) { + interfaces.Add ( + new InterfaceImplementation ( + GetTypeDefOrRef (mapping [i].Col2), + new MetadataToken(TokenType.InterfaceImpl, mapping [i].Col1))); + } + + metadata.RemoveInterfaceMapping (type); + + return interfaces; + } + + void InitializeInterfaces () + { + if (metadata.Interfaces != null) + return; + + int length = MoveTo (Table.InterfaceImpl); + + metadata.Interfaces = new Dictionary>> (length); + + for (uint i = 1; i <= length; i++) { + var type = ReadTableIndex (Table.TypeDef); + var @interface = ReadMetadataToken (CodedIndex.TypeDefOrRef); + + AddInterfaceMapping (type, new Row (i, @interface)); + } + } + + void AddInterfaceMapping (uint type, Row @interface) + { + metadata.SetInterfaceMapping (type, AddMapping (metadata.Interfaces, type, @interface)); + } + + public Collection ReadFields (TypeDefinition type) + { + var fields_range = type.fields_range; + if (fields_range.Length == 0) + return new MemberDefinitionCollection (type); + + var fields = new MemberDefinitionCollection (type, (int) fields_range.Length); + this.context = type; + + if (!MoveTo (Table.FieldPtr, fields_range.Start)) { + if (!MoveTo (Table.Field, fields_range.Start)) + return fields; + + for (uint i = 0; i < fields_range.Length; i++) + ReadField (fields_range.Start + i, fields); + } else + ReadPointers (Table.FieldPtr, Table.Field, fields_range, fields, ReadField); + + return fields; + } + + void ReadField (uint field_rid, Collection fields) + { + var attributes = (FieldAttributes) ReadUInt16 (); + var name = ReadString (); + var signature = ReadBlobIndex (); + + var field = new FieldDefinition (name, attributes, ReadFieldType (signature)); + field.token = new MetadataToken (TokenType.Field, field_rid); + metadata.AddFieldDefinition (field); + + if (IsDeleted (field)) + return; + + fields.Add (field); + + if (module.IsWindowsMetadata ()) + WindowsRuntimeProjections.Project (field); + } + + void InitializeFields () + { + if (metadata.Fields != null) + return; + + metadata.Fields = new FieldDefinition [image.GetTableLength (Table.Field)]; + } + + TypeReference ReadFieldType (uint signature) + { + var reader = ReadSignature (signature); + + const byte field_sig = 0x6; + + if (reader.ReadByte () != field_sig) + throw new NotSupportedException (); + + return reader.ReadTypeSignature (); + } + + public int ReadFieldRVA (FieldDefinition field) + { + InitializeFieldRVAs (); + var rid = field.token.RID; + + RVA rva; + if (!metadata.FieldRVAs.TryGetValue (rid, out rva)) + return 0; + + var size = GetFieldTypeSize (field.FieldType); + + if (size == 0 || rva == 0) + return 0; + + metadata.FieldRVAs.Remove (rid); + + field.InitialValue = GetFieldInitializeValue (size, rva); + + return (int) rva; + } + + byte [] GetFieldInitializeValue (int size, RVA rva) + { + return image.GetReaderAt (rva, size, (s, reader) => reader.ReadBytes (s)) ?? Empty.Array; + } + + static int GetFieldTypeSize (TypeReference type) + { + int size = 0; + + switch (type.etype) { + case ElementType.Boolean: + case ElementType.U1: + case ElementType.I1: + size = 1; + break; + case ElementType.U2: + case ElementType.I2: + case ElementType.Char: + size = 2; + break; + case ElementType.U4: + case ElementType.I4: + case ElementType.R4: + size = 4; + break; + case ElementType.U8: + case ElementType.I8: + case ElementType.R8: + size = 8; + break; + case ElementType.Ptr: + case ElementType.FnPtr: + size = IntPtr.Size; + break; + case ElementType.CModOpt: + case ElementType.CModReqD: + return GetFieldTypeSize (((IModifierType) type).ElementType); + default: + var field_type = type.Resolve (); + if (field_type != null && field_type.HasLayoutInfo) + size = field_type.ClassSize; + + break; + } + + return size; + } + + void InitializeFieldRVAs () + { + if (metadata.FieldRVAs != null) + return; + + int length = MoveTo (Table.FieldRVA); + + var field_rvas = metadata.FieldRVAs = new Dictionary (length); + + for (int i = 0; i < length; i++) { + var rva = ReadUInt32 (); + var field = ReadTableIndex (Table.Field); + + field_rvas.Add (field, rva); + } + } + + public int ReadFieldLayout (FieldDefinition field) + { + InitializeFieldLayouts (); + var rid = field.token.RID; + uint offset; + if (!metadata.FieldLayouts.TryGetValue (rid, out offset)) + return Mixin.NoDataMarker; + + metadata.FieldLayouts.Remove (rid); + + return (int) offset; + } + + void InitializeFieldLayouts () + { + if (metadata.FieldLayouts != null) + return; + + int length = MoveTo (Table.FieldLayout); + + var field_layouts = metadata.FieldLayouts = new Dictionary (length); + + for (int i = 0; i < length; i++) { + var offset = ReadUInt32 (); + var field = ReadTableIndex (Table.Field); + + field_layouts.Add (field, offset); + } + } + + public bool HasEvents (TypeDefinition type) + { + InitializeEvents (); + + Range range; + if (!metadata.TryGetEventsRange (type, out range)) + return false; + + return range.Length > 0; + } + + public Collection ReadEvents (TypeDefinition type) + { + InitializeEvents (); + Range range; + + if (!metadata.TryGetEventsRange (type, out range)) + return new MemberDefinitionCollection (type); + + var events = new MemberDefinitionCollection (type, (int) range.Length); + + metadata.RemoveEventsRange (type); + + if (range.Length == 0) + return events; + + this.context = type; + + if (!MoveTo (Table.EventPtr, range.Start)) { + if (!MoveTo (Table.Event, range.Start)) + return events; + + for (uint i = 0; i < range.Length; i++) + ReadEvent (range.Start + i, events); + } else + ReadPointers (Table.EventPtr, Table.Event, range, events, ReadEvent); + + return events; + } + + void ReadEvent (uint event_rid, Collection events) + { + var attributes = (EventAttributes) ReadUInt16 (); + var name = ReadString (); + var event_type = GetTypeDefOrRef (ReadMetadataToken (CodedIndex.TypeDefOrRef)); + + var @event = new EventDefinition (name, attributes, event_type); + @event.token = new MetadataToken (TokenType.Event, event_rid); + + if (IsDeleted (@event)) + return; + + events.Add (@event); + } + + void InitializeEvents () + { + if (metadata.Events != null) + return; + + int length = MoveTo (Table.EventMap); + + metadata.Events = new Dictionary (length); + + for (uint i = 1; i <= length; i++) { + var type_rid = ReadTableIndex (Table.TypeDef); + Range events_range = ReadListRange (i, Table.EventMap, Table.Event); + metadata.AddEventsRange (type_rid, events_range); + } + } + + public bool HasProperties (TypeDefinition type) + { + InitializeProperties (); + + Range range; + if (!metadata.TryGetPropertiesRange (type, out range)) + return false; + + return range.Length > 0; + } + + public Collection ReadProperties (TypeDefinition type) + { + InitializeProperties (); + + Range range; + + if (!metadata.TryGetPropertiesRange (type, out range)) + return new MemberDefinitionCollection (type); + + metadata.RemovePropertiesRange (type); + + var properties = new MemberDefinitionCollection (type, (int) range.Length); + + if (range.Length == 0) + return properties; + + this.context = type; + + if (!MoveTo (Table.PropertyPtr, range.Start)) { + if (!MoveTo (Table.Property, range.Start)) + return properties; + for (uint i = 0; i < range.Length; i++) + ReadProperty (range.Start + i, properties); + } else + ReadPointers (Table.PropertyPtr, Table.Property, range, properties, ReadProperty); + + return properties; + } + + void ReadProperty (uint property_rid, Collection properties) + { + var attributes = (PropertyAttributes) ReadUInt16 (); + var name = ReadString (); + var signature = ReadBlobIndex (); + + var reader = ReadSignature (signature); + const byte property_signature = 0x8; + + var calling_convention = reader.ReadByte (); + + if ((calling_convention & property_signature) == 0) + throw new NotSupportedException (); + + var has_this = (calling_convention & 0x20) != 0; + + reader.ReadCompressedUInt32 (); // count + + var property = new PropertyDefinition (name, attributes, reader.ReadTypeSignature ()); + property.HasThis = has_this; + property.token = new MetadataToken (TokenType.Property, property_rid); + + if (IsDeleted (property)) + return; + + properties.Add (property); + } + + void InitializeProperties () + { + if (metadata.Properties != null) + return; + + int length = MoveTo (Table.PropertyMap); + + metadata.Properties = new Dictionary (length); + + for (uint i = 1; i <= length; i++) { + var type_rid = ReadTableIndex (Table.TypeDef); + var properties_range = ReadListRange (i, Table.PropertyMap, Table.Property); + metadata.AddPropertiesRange (type_rid, properties_range); + } + } + + MethodSemanticsAttributes ReadMethodSemantics (MethodDefinition method) + { + InitializeMethodSemantics (); + Row row; + if (!metadata.Semantics.TryGetValue (method.token.RID, out row)) + return MethodSemanticsAttributes.None; + + var type = method.DeclaringType; + + switch (row.Col1) { + case MethodSemanticsAttributes.AddOn: + GetEvent (type, row.Col2).add_method = method; + break; + case MethodSemanticsAttributes.Fire: + GetEvent (type, row.Col2).invoke_method = method; + break; + case MethodSemanticsAttributes.RemoveOn: + GetEvent (type, row.Col2).remove_method = method; + break; + case MethodSemanticsAttributes.Getter: + GetProperty (type, row.Col2).get_method = method; + break; + case MethodSemanticsAttributes.Setter: + GetProperty (type, row.Col2).set_method = method; + break; + case MethodSemanticsAttributes.Other: + switch (row.Col2.TokenType) { + case TokenType.Event: { + var @event = GetEvent (type, row.Col2); + if (@event.other_methods == null) + @event.other_methods = new Collection (); + + @event.other_methods.Add (method); + break; + } + case TokenType.Property: { + var property = GetProperty (type, row.Col2); + if (property.other_methods == null) + property.other_methods = new Collection (); + + property.other_methods.Add (method); + + break; + } + default: + throw new NotSupportedException (); + } + break; + default: + throw new NotSupportedException (); + } + + metadata.Semantics.Remove (method.token.RID); + + return row.Col1; + } + + static EventDefinition GetEvent (TypeDefinition type, MetadataToken token) + { + if (token.TokenType != TokenType.Event) + throw new ArgumentException (); + + return GetMember (type.Events, token); + } + + static PropertyDefinition GetProperty (TypeDefinition type, MetadataToken token) + { + if (token.TokenType != TokenType.Property) + throw new ArgumentException (); + + return GetMember (type.Properties, token); + } + + static TMember GetMember (Collection members, MetadataToken token) where TMember : IMemberDefinition + { + for (int i = 0; i < members.Count; i++) { + var member = members [i]; + if (member.MetadataToken == token) + return member; + } + + throw new ArgumentException (); + } + + void InitializeMethodSemantics () + { + if (metadata.Semantics != null) + return; + + int length = MoveTo (Table.MethodSemantics); + + var semantics = metadata.Semantics = new Dictionary> (0); + + for (uint i = 0; i < length; i++) { + var attributes = (MethodSemanticsAttributes) ReadUInt16 (); + var method_rid = ReadTableIndex (Table.Method); + var association = ReadMetadataToken (CodedIndex.HasSemantics); + + semantics [method_rid] = new Row (attributes, association); + } + } + + public void ReadMethods (PropertyDefinition property) + { + ReadAllSemantics (property.DeclaringType); + } + + public void ReadMethods (EventDefinition @event) + { + ReadAllSemantics (@event.DeclaringType); + } + + public void ReadAllSemantics (MethodDefinition method) + { + ReadAllSemantics (method.DeclaringType); + } + + void ReadAllSemantics (TypeDefinition type) + { + var methods = type.Methods; + for (int i = 0; i < methods.Count; i++) { + var method = methods [i]; + if (method.sem_attrs_ready) + continue; + + method.sem_attrs = ReadMethodSemantics (method); + method.sem_attrs_ready = true; + } + } + + public Collection ReadMethods (TypeDefinition type) + { + var methods_range = type.methods_range; + if (methods_range.Length == 0) + return new MemberDefinitionCollection (type); + + var methods = new MemberDefinitionCollection (type, (int) methods_range.Length); + if (!MoveTo (Table.MethodPtr, methods_range.Start)) { + if (!MoveTo (Table.Method, methods_range.Start)) + return methods; + + for (uint i = 0; i < methods_range.Length; i++) + ReadMethod (methods_range.Start + i, methods); + } else + ReadPointers (Table.MethodPtr, Table.Method, methods_range, methods, ReadMethod); + + return methods; + } + + void ReadPointers (Table ptr, Table table, Range range, Collection members, Action> reader) + where TMember : IMemberDefinition + { + for (uint i = 0; i < range.Length; i++) { + MoveTo (ptr, range.Start + i); + + var rid = ReadTableIndex (table); + MoveTo (table, rid); + + reader (rid, members); + } + } + + static bool IsDeleted (IMemberDefinition member) + { + return member.IsSpecialName && member.Name == "_Deleted"; + } + + void InitializeMethods () + { + if (metadata.Methods != null) + return; + + metadata.Methods = new MethodDefinition [image.GetTableLength (Table.Method)]; + } + + void ReadMethod (uint method_rid, Collection methods) + { + var method = new MethodDefinition (); + method.rva = ReadUInt32 (); + method.ImplAttributes = (MethodImplAttributes) ReadUInt16 (); + method.Attributes = (MethodAttributes) ReadUInt16 (); + method.Name = ReadString (); + method.token = new MetadataToken (TokenType.Method, method_rid); + + if (IsDeleted (method)) + return; + + methods.Add (method); // attach method + + var signature = ReadBlobIndex (); + var param_range = ReadListRange (method_rid, Table.Method, Table.Param); + + this.context = method; + + ReadMethodSignature (signature, method); + metadata.AddMethodDefinition (method); + + if (param_range.Length != 0) { + var position = base.position; + ReadParameters (method, param_range); + base.position = position; + } + + if (module.IsWindowsMetadata ()) + WindowsRuntimeProjections.Project (method); + } + + void ReadParameters (MethodDefinition method, Range param_range) + { + if (!MoveTo (Table.ParamPtr, param_range.Start)) { + if (!MoveTo (Table.Param, param_range.Start)) + return; + + for (uint i = 0; i < param_range.Length; i++) + ReadParameter (param_range.Start + i, method); + } else + ReadParameterPointers (method, param_range); + } + + void ReadParameterPointers (MethodDefinition method, Range range) + { + for (uint i = 0; i < range.Length; i++) { + MoveTo (Table.ParamPtr, range.Start + i); + + var rid = ReadTableIndex (Table.Param); + + MoveTo (Table.Param, rid); + + ReadParameter (rid, method); + } + } + + void ReadParameter (uint param_rid, MethodDefinition method) + { + var attributes = (ParameterAttributes) ReadUInt16 (); + var sequence = ReadUInt16 (); + var name = ReadString (); + + var parameter = sequence == 0 + ? method.MethodReturnType.Parameter + : method.Parameters [sequence - 1]; + + parameter.token = new MetadataToken (TokenType.Param, param_rid); + parameter.Name = name; + parameter.Attributes = attributes; + } + + void ReadMethodSignature (uint signature, IMethodSignature method) + { + var reader = ReadSignature (signature); + reader.ReadMethodSignature (method); + } + + public PInvokeInfo ReadPInvokeInfo (MethodDefinition method) + { + InitializePInvokes (); + Row row; + + var rid = method.token.RID; + + if (!metadata.PInvokes.TryGetValue (rid, out row)) + return null; + + metadata.PInvokes.Remove (rid); + + return new PInvokeInfo ( + row.Col1, + image.StringHeap.Read (row.Col2), + module.ModuleReferences [(int) row.Col3 - 1]); + } + + void InitializePInvokes () + { + if (metadata.PInvokes != null) + return; + + int length = MoveTo (Table.ImplMap); + + var pinvokes = metadata.PInvokes = new Dictionary> (length); + + for (int i = 1; i <= length; i++) { + var attributes = (PInvokeAttributes) ReadUInt16 (); + var method = ReadMetadataToken (CodedIndex.MemberForwarded); + var name = ReadStringIndex (); + var scope = ReadTableIndex (Table.File); + + if (method.TokenType != TokenType.Method) + continue; + + pinvokes.Add (method.RID, new Row (attributes, name, scope)); + } + } + + public bool HasGenericParameters (IGenericParameterProvider provider) + { + InitializeGenericParameters (); + + Range [] ranges; + if (!metadata.TryGetGenericParameterRanges (provider, out ranges)) + return false; + + return RangesSize (ranges) > 0; + } + + public Collection ReadGenericParameters (IGenericParameterProvider provider) + { + InitializeGenericParameters (); + + Range [] ranges; + if (!metadata.TryGetGenericParameterRanges (provider, out ranges)) + return new GenericParameterCollection (provider); + + metadata.RemoveGenericParameterRange (provider); + + var generic_parameters = new GenericParameterCollection (provider, RangesSize (ranges)); + + for (int i = 0; i < ranges.Length; i++) + ReadGenericParametersRange (ranges [i], provider, generic_parameters); + + return generic_parameters; + } + + void ReadGenericParametersRange (Range range, IGenericParameterProvider provider, GenericParameterCollection generic_parameters) + { + if (!MoveTo (Table.GenericParam, range.Start)) + return; + + for (uint i = 0; i < range.Length; i++) { + ReadUInt16 (); // index + var flags = (GenericParameterAttributes) ReadUInt16 (); + ReadMetadataToken (CodedIndex.TypeOrMethodDef); + var name = ReadString (); + + var parameter = new GenericParameter (name, provider); + parameter.token = new MetadataToken (TokenType.GenericParam, range.Start + i); + parameter.Attributes = flags; + + generic_parameters.Add (parameter); + } + } + + void InitializeGenericParameters () + { + if (metadata.GenericParameters != null) + return; + + metadata.GenericParameters = InitializeRanges ( + Table.GenericParam, () => { + Advance (4); + var next = ReadMetadataToken (CodedIndex.TypeOrMethodDef); + ReadStringIndex (); + return next; + }); + } + + Dictionary InitializeRanges (Table table, Func get_next) + { + int length = MoveTo (table); + var ranges = new Dictionary (length); + + if (length == 0) + return ranges; + + MetadataToken owner = MetadataToken.Zero; + Range range = new Range (1, 0); + + for (uint i = 1; i <= length; i++) { + var next = get_next (); + + if (i == 1) { + owner = next; + range.Length++; + } else if (next != owner) { + AddRange (ranges, owner, range); + range = new Range (i, 1); + owner = next; + } else + range.Length++; + } + + AddRange (ranges, owner, range); + + return ranges; + } + + static void AddRange (Dictionary ranges, MetadataToken owner, Range range) + { + if (owner.RID == 0) + return; + + Range [] slots; + if (!ranges.TryGetValue (owner, out slots)) { + ranges.Add (owner, new [] { range }); + return; + } + + ranges [owner] = slots.Add(range); + } + + public bool HasGenericConstraints (GenericParameter generic_parameter) + { + InitializeGenericConstraints (); + + Collection mapping; + if (!metadata.TryGetGenericConstraintMapping (generic_parameter, out mapping)) + return false; + + return mapping.Count > 0; + } + + public Collection ReadGenericConstraints (GenericParameter generic_parameter) + { + InitializeGenericConstraints (); + + Collection mapping; + if (!metadata.TryGetGenericConstraintMapping (generic_parameter, out mapping)) + return new Collection (); + + var constraints = new Collection (mapping.Count); + + this.context = (IGenericContext) generic_parameter.Owner; + + for (int i = 0; i < mapping.Count; i++) + constraints.Add (GetTypeDefOrRef (mapping [i])); + + metadata.RemoveGenericConstraintMapping (generic_parameter); + + return constraints; + } + + void InitializeGenericConstraints () + { + if (metadata.GenericConstraints != null) + return; + + var length = MoveTo (Table.GenericParamConstraint); + + metadata.GenericConstraints = new Dictionary> (length); + + for (int i = 1; i <= length; i++) + AddGenericConstraintMapping ( + ReadTableIndex (Table.GenericParam), + ReadMetadataToken (CodedIndex.TypeDefOrRef)); + } + + void AddGenericConstraintMapping (uint generic_parameter, MetadataToken constraint) + { + metadata.SetGenericConstraintMapping ( + generic_parameter, + AddMapping (metadata.GenericConstraints, generic_parameter, constraint)); + } + + public bool HasOverrides (MethodDefinition method) + { + InitializeOverrides (); + Collection mapping; + + if (!metadata.TryGetOverrideMapping (method, out mapping)) + return false; + + return mapping.Count > 0; + } + + public Collection ReadOverrides (MethodDefinition method) + { + InitializeOverrides (); + + Collection mapping; + if (!metadata.TryGetOverrideMapping (method, out mapping)) + return new Collection (); + + var overrides = new Collection (mapping.Count); + + this.context = method; + + for (int i = 0; i < mapping.Count; i++) + overrides.Add ((MethodReference) LookupToken (mapping [i])); + + metadata.RemoveOverrideMapping (method); + + return overrides; + } + + void InitializeOverrides () + { + if (metadata.Overrides != null) + return; + + var length = MoveTo (Table.MethodImpl); + + metadata.Overrides = new Dictionary> (length); + + for (int i = 1; i <= length; i++) { + ReadTableIndex (Table.TypeDef); + + var method = ReadMetadataToken (CodedIndex.MethodDefOrRef); + if (method.TokenType != TokenType.Method) + throw new NotSupportedException (); + + var @override = ReadMetadataToken (CodedIndex.MethodDefOrRef); + + AddOverrideMapping (method.RID, @override); + } + } + + void AddOverrideMapping (uint method_rid, MetadataToken @override) + { + metadata.SetOverrideMapping ( + method_rid, + AddMapping (metadata.Overrides, method_rid, @override)); + } + + public MethodBody ReadMethodBody (MethodDefinition method) + { + return code.ReadMethodBody (method); + } + + public int ReadCodeSize (MethodDefinition method) + { + return code.ReadCodeSize (method); + } + + public CallSite ReadCallSite (MetadataToken token) + { + if (!MoveTo (Table.StandAloneSig, token.RID)) + return null; + + var signature = ReadBlobIndex (); + + var call_site = new CallSite (); + + ReadMethodSignature (signature, call_site); + + call_site.MetadataToken = token; + + return call_site; + } + + public VariableDefinitionCollection ReadVariables (MetadataToken local_var_token) + { + if (!MoveTo (Table.StandAloneSig, local_var_token.RID)) + return null; + + var reader = ReadSignature (ReadBlobIndex ()); + const byte local_sig = 0x7; + + if (reader.ReadByte () != local_sig) + throw new NotSupportedException (); + + var count = reader.ReadCompressedUInt32 (); + if (count == 0) + return null; + + var variables = new VariableDefinitionCollection ((int) count); + + for (int i = 0; i < count; i++) + variables.Add (new VariableDefinition (reader.ReadTypeSignature ())); + + return variables; + } + + public IMetadataTokenProvider LookupToken (MetadataToken token) + { + var rid = token.RID; + + if (rid == 0) + return null; + + if (metadata_reader != null) + return metadata_reader.LookupToken (token); + + IMetadataTokenProvider element; + var position = this.position; + var context = this.context; + + switch (token.TokenType) { + case TokenType.TypeDef: + element = GetTypeDefinition (rid); + break; + case TokenType.TypeRef: + element = GetTypeReference (rid); + break; + case TokenType.TypeSpec: + element = GetTypeSpecification (rid); + break; + case TokenType.Field: + element = GetFieldDefinition (rid); + break; + case TokenType.Method: + element = GetMethodDefinition (rid); + break; + case TokenType.MemberRef: + element = GetMemberReference (rid); + break; + case TokenType.MethodSpec: + element = GetMethodSpecification (rid); + break; + default: + return null; + } + + this.position = position; + this.context = context; + + return element; + } + + public FieldDefinition GetFieldDefinition (uint rid) + { + InitializeTypeDefinitions (); + + var field = metadata.GetFieldDefinition (rid); + if (field != null) + return field; + + return LookupField (rid); + } + + FieldDefinition LookupField (uint rid) + { + var type = metadata.GetFieldDeclaringType (rid); + if (type == null) + return null; + + Mixin.Read (type.Fields); + + return metadata.GetFieldDefinition (rid); + } + + public MethodDefinition GetMethodDefinition (uint rid) + { + InitializeTypeDefinitions (); + + var method = metadata.GetMethodDefinition (rid); + if (method != null) + return method; + + return LookupMethod (rid); + } + + MethodDefinition LookupMethod (uint rid) + { + var type = metadata.GetMethodDeclaringType (rid); + if (type == null) + return null; + + Mixin.Read (type.Methods); + + return metadata.GetMethodDefinition (rid); + } + + MethodSpecification GetMethodSpecification (uint rid) + { + if (!MoveTo (Table.MethodSpec, rid)) + return null; + + var element_method = (MethodReference) LookupToken ( + ReadMetadataToken (CodedIndex.MethodDefOrRef)); + var signature = ReadBlobIndex (); + + var method_spec = ReadMethodSpecSignature (signature, element_method); + method_spec.token = new MetadataToken (TokenType.MethodSpec, rid); + return method_spec; + } + + MethodSpecification ReadMethodSpecSignature (uint signature, MethodReference method) + { + var reader = ReadSignature (signature); + const byte methodspec_sig = 0x0a; + + var call_conv = reader.ReadByte (); + + if (call_conv != methodspec_sig) + throw new NotSupportedException (); + + var instance = new GenericInstanceMethod (method); + + reader.ReadGenericInstanceSignature (method, instance); + + return instance; + } + + MemberReference GetMemberReference (uint rid) + { + InitializeMemberReferences (); + + var member = metadata.GetMemberReference (rid); + if (member != null) + return member; + + member = ReadMemberReference (rid); + if (member != null && !member.ContainsGenericParameter) + metadata.AddMemberReference (member); + return member; + } + + MemberReference ReadMemberReference (uint rid) + { + if (!MoveTo (Table.MemberRef, rid)) + return null; + + var token = ReadMetadataToken (CodedIndex.MemberRefParent); + var name = ReadString (); + var signature = ReadBlobIndex (); + + MemberReference member; + + switch (token.TokenType) { + case TokenType.TypeDef: + case TokenType.TypeRef: + case TokenType.TypeSpec: + member = ReadTypeMemberReference (token, name, signature); + break; + case TokenType.Method: + member = ReadMethodMemberReference (token, name, signature); + break; + default: + throw new NotSupportedException (); + } + + member.token = new MetadataToken (TokenType.MemberRef, rid); + + if (module.IsWindowsMetadata ()) + WindowsRuntimeProjections.Project (member); + + return member; + } + + MemberReference ReadTypeMemberReference (MetadataToken type, string name, uint signature) + { + var declaring_type = GetTypeDefOrRef (type); + + if (!declaring_type.IsArray) + this.context = declaring_type; + + var member = ReadMemberReferenceSignature (signature, declaring_type); + member.Name = name; + + return member; + } + + MemberReference ReadMemberReferenceSignature (uint signature, TypeReference declaring_type) + { + var reader = ReadSignature (signature); + const byte field_sig = 0x6; + + if (reader.buffer [reader.position] == field_sig) { + reader.position++; + var field = new FieldReference (); + field.DeclaringType = declaring_type; + field.FieldType = reader.ReadTypeSignature (); + return field; + } else { + var method = new MethodReference (); + method.DeclaringType = declaring_type; + reader.ReadMethodSignature (method); + return method; + } + } + + MemberReference ReadMethodMemberReference (MetadataToken token, string name, uint signature) + { + var method = GetMethodDefinition (token.RID); + + this.context = method; + + var member = ReadMemberReferenceSignature (signature, method.DeclaringType); + member.Name = name; + + return member; + } + + void InitializeMemberReferences () + { + if (metadata.MemberReferences != null) + return; + + metadata.MemberReferences = new MemberReference [image.GetTableLength (Table.MemberRef)]; + } + + public IEnumerable GetMemberReferences () + { + InitializeMemberReferences (); + + var length = image.GetTableLength (Table.MemberRef); + + var type_system = module.TypeSystem; + + var context = new MethodDefinition (string.Empty, MethodAttributes.Static, type_system.Void); + context.DeclaringType = new TypeDefinition (string.Empty, string.Empty, TypeAttributes.Public); + + var member_references = new MemberReference [length]; + + for (uint i = 1; i <= length; i++) { + this.context = context; + member_references [i - 1] = GetMemberReference (i); + } + + return member_references; + } + + void InitializeConstants () + { + if (metadata.Constants != null) + return; + + var length = MoveTo (Table.Constant); + + var constants = metadata.Constants = new Dictionary> (length); + + for (uint i = 1; i <= length; i++) { + var type = (ElementType) ReadUInt16 (); + var owner = ReadMetadataToken (CodedIndex.HasConstant); + var signature = ReadBlobIndex (); + + constants.Add (owner, new Row (type, signature)); + } + } + + public TypeReference ReadConstantSignature (MetadataToken token) + { + if (token.TokenType != TokenType.Signature) + throw new NotSupportedException (); + + if (token.RID == 0) + return null; + + if (!MoveTo (Table.StandAloneSig, token.RID)) + return null; + + return ReadFieldType (ReadBlobIndex ()); + } + + public object ReadConstant (IConstantProvider owner) + { + InitializeConstants (); + + Row row; + if (!metadata.Constants.TryGetValue (owner.MetadataToken, out row)) + return Mixin.NoValue; + + metadata.Constants.Remove (owner.MetadataToken); + + return ReadConstantValue (row.Col1, row.Col2); + } + + object ReadConstantValue (ElementType etype, uint signature) + { + switch (etype) { + case ElementType.Class: + case ElementType.Object: + return null; + case ElementType.String: + return ReadConstantString (signature); + default: + return ReadConstantPrimitive (etype, signature); + } + } + + string ReadConstantString (uint signature) + { + byte [] blob; + int index, count; + + GetBlobView (signature, out blob, out index, out count); + if (count == 0) + return string.Empty; + + if ((count & 1) == 1) + count--; + + return Encoding.Unicode.GetString (blob, index, count); + } + + object ReadConstantPrimitive (ElementType type, uint signature) + { + var reader = ReadSignature (signature); + return reader.ReadConstantSignature (type); + } + + internal void InitializeCustomAttributes () + { + if (metadata.CustomAttributes != null) + return; + + metadata.CustomAttributes = InitializeRanges ( + Table.CustomAttribute, () => { + var next = ReadMetadataToken (CodedIndex.HasCustomAttribute); + ReadMetadataToken (CodedIndex.CustomAttributeType); + ReadBlobIndex (); + return next; + }); + } + + public bool HasCustomAttributes (ICustomAttributeProvider owner) + { + InitializeCustomAttributes (); + + Range [] ranges; + if (!metadata.TryGetCustomAttributeRanges (owner, out ranges)) + return false; + + return RangesSize (ranges) > 0; + } + + public Collection ReadCustomAttributes (ICustomAttributeProvider owner) + { + InitializeCustomAttributes (); + + Range [] ranges; + if (!metadata.TryGetCustomAttributeRanges (owner, out ranges)) + return new Collection (); + + var custom_attributes = new Collection (RangesSize (ranges)); + + for (int i = 0; i < ranges.Length; i++) + ReadCustomAttributeRange (ranges [i], custom_attributes); + + metadata.RemoveCustomAttributeRange (owner); + + if (module.IsWindowsMetadata ()) + foreach (var custom_attribute in custom_attributes) + WindowsRuntimeProjections.Project (owner, custom_attribute); + + return custom_attributes; + } + + void ReadCustomAttributeRange (Range range, Collection custom_attributes) + { + if (!MoveTo (Table.CustomAttribute, range.Start)) + return; + + for (var i = 0; i < range.Length; i++) { + ReadMetadataToken (CodedIndex.HasCustomAttribute); + + var constructor = (MethodReference) LookupToken ( + ReadMetadataToken (CodedIndex.CustomAttributeType)); + + var signature = ReadBlobIndex (); + + custom_attributes.Add (new CustomAttribute (signature, constructor)); + } + } + + static int RangesSize (Range [] ranges) + { + uint size = 0; + for (int i = 0; i < ranges.Length; i++) + size += ranges [i].Length; + + return (int) size; + } + + public IEnumerable GetCustomAttributes () + { + InitializeTypeDefinitions (); + + var length = image.TableHeap [Table.CustomAttribute].Length; + var custom_attributes = new Collection ((int) length); + ReadCustomAttributeRange (new Range (1, length), custom_attributes); + + return custom_attributes; + } + + public byte [] ReadCustomAttributeBlob (uint signature) + { + return ReadBlob (signature); + } + + public void ReadCustomAttributeSignature (CustomAttribute attribute) + { + var reader = ReadSignature (attribute.signature); + + if (!reader.CanReadMore ()) + return; + + if (reader.ReadUInt16 () != 0x0001) + throw new InvalidOperationException (); + + var constructor = attribute.Constructor; + if (constructor.HasParameters) + reader.ReadCustomAttributeConstructorArguments (attribute, constructor.Parameters); + + if (!reader.CanReadMore ()) + return; + + var named = reader.ReadUInt16 (); + + if (named == 0) + return; + + reader.ReadCustomAttributeNamedArguments (named, ref attribute.fields, ref attribute.properties); + } + + void InitializeMarshalInfos () + { + if (metadata.FieldMarshals != null) + return; + + var length = MoveTo (Table.FieldMarshal); + + var marshals = metadata.FieldMarshals = new Dictionary (length); + + for (int i = 0; i < length; i++) { + var token = ReadMetadataToken (CodedIndex.HasFieldMarshal); + var signature = ReadBlobIndex (); + if (token.RID == 0) + continue; + + marshals.Add (token, signature); + } + } + + public bool HasMarshalInfo (IMarshalInfoProvider owner) + { + InitializeMarshalInfos (); + + return metadata.FieldMarshals.ContainsKey (owner.MetadataToken); + } + + public MarshalInfo ReadMarshalInfo (IMarshalInfoProvider owner) + { + InitializeMarshalInfos (); + + uint signature; + if (!metadata.FieldMarshals.TryGetValue (owner.MetadataToken, out signature)) + return null; + + var reader = ReadSignature (signature); + + metadata.FieldMarshals.Remove (owner.MetadataToken); + + return reader.ReadMarshalInfo (); + } + + void InitializeSecurityDeclarations () + { + if (metadata.SecurityDeclarations != null) + return; + + metadata.SecurityDeclarations = InitializeRanges ( + Table.DeclSecurity, () => { + ReadUInt16 (); + var next = ReadMetadataToken (CodedIndex.HasDeclSecurity); + ReadBlobIndex (); + return next; + }); + } + + public bool HasSecurityDeclarations (ISecurityDeclarationProvider owner) + { + InitializeSecurityDeclarations (); + + Range [] ranges; + if (!metadata.TryGetSecurityDeclarationRanges (owner, out ranges)) + return false; + + return RangesSize (ranges) > 0; + } + + public Collection ReadSecurityDeclarations (ISecurityDeclarationProvider owner) + { + InitializeSecurityDeclarations (); + + Range [] ranges; + if (!metadata.TryGetSecurityDeclarationRanges (owner, out ranges)) + return new Collection (); + + var security_declarations = new Collection (RangesSize (ranges)); + + for (int i = 0; i < ranges.Length; i++) + ReadSecurityDeclarationRange (ranges [i], security_declarations); + + metadata.RemoveSecurityDeclarationRange (owner); + + return security_declarations; + } + + void ReadSecurityDeclarationRange (Range range, Collection security_declarations) + { + if (!MoveTo (Table.DeclSecurity, range.Start)) + return; + + for (int i = 0; i < range.Length; i++) { + var action = (SecurityAction) ReadUInt16 (); + ReadMetadataToken (CodedIndex.HasDeclSecurity); + var signature = ReadBlobIndex (); + + security_declarations.Add (new SecurityDeclaration (action, signature, module)); + } + } + + public byte [] ReadSecurityDeclarationBlob (uint signature) + { + return ReadBlob (signature); + } + + public void ReadSecurityDeclarationSignature (SecurityDeclaration declaration) + { + var signature = declaration.signature; + var reader = ReadSignature (signature); + + if (reader.buffer [reader.position] != '.') { + ReadXmlSecurityDeclaration (signature, declaration); + return; + } + + reader.position++; + var count = reader.ReadCompressedUInt32 (); + var attributes = new Collection ((int) count); + + for (int i = 0; i < count; i++) + attributes.Add (reader.ReadSecurityAttribute ()); + + declaration.security_attributes = attributes; + } + + void ReadXmlSecurityDeclaration (uint signature, SecurityDeclaration declaration) + { + var attributes = new Collection (1); + + var attribute = new SecurityAttribute ( + module.TypeSystem.LookupType ("System.Security.Permissions", "PermissionSetAttribute")); + + attribute.properties = new Collection (1); + attribute.properties.Add ( + new CustomAttributeNamedArgument ( + "XML", + new CustomAttributeArgument ( + module.TypeSystem.String, + ReadUnicodeStringBlob (signature)))); + + attributes.Add (attribute); + + declaration.security_attributes = attributes; + } + + public Collection ReadExportedTypes () + { + var length = MoveTo (Table.ExportedType); + if (length == 0) + return new Collection (); + + var exported_types = new Collection (length); + + for (int i = 1; i <= length; i++) { + var attributes = (TypeAttributes) ReadUInt32 (); + var identifier = ReadUInt32 (); + var name = ReadString (); + var @namespace = ReadString (); + var implementation = ReadMetadataToken (CodedIndex.Implementation); + + ExportedType declaring_type = null; + IMetadataScope scope = null; + + switch (implementation.TokenType) { + case TokenType.AssemblyRef: + case TokenType.File: + scope = GetExportedTypeScope (implementation); + break; + case TokenType.ExportedType: + // FIXME: if the table is not properly sorted + declaring_type = exported_types [(int) implementation.RID - 1]; + break; + } + + var exported_type = new ExportedType (@namespace, name, module, scope) { + Attributes = attributes, + Identifier = (int) identifier, + DeclaringType = declaring_type, + }; + exported_type.token = new MetadataToken (TokenType.ExportedType, i); + + exported_types.Add (exported_type); + } + + return exported_types; + } + + IMetadataScope GetExportedTypeScope (MetadataToken token) + { + var position = this.position; + IMetadataScope scope; + + switch (token.TokenType) { + case TokenType.AssemblyRef: + InitializeAssemblyReferences (); + scope = metadata.GetAssemblyNameReference (token.RID); + break; + case TokenType.File: + InitializeModuleReferences (); + scope = GetModuleReferenceFromFile (token); + break; + default: + throw new NotSupportedException (); + } + + this.position = position; + return scope; + } + + ModuleReference GetModuleReferenceFromFile (MetadataToken token) + { + if (!MoveTo (Table.File, token.RID)) + return null; + + ReadUInt32 (); + var file_name = ReadString (); + var modules = module.ModuleReferences; + + ModuleReference reference; + for (int i = 0; i < modules.Count; i++) { + reference = modules [i]; + if (reference.Name == file_name) + return reference; + } + + reference = new ModuleReference (file_name); + modules.Add (reference); + return reference; + } + + void InitializeDocuments () + { + if (metadata.Documents != null) + return; + + int length = MoveTo (Table.Document); + + var documents = metadata.Documents = new Document [length]; + + for (uint i = 1; i <= length; i++) { + var name_index = ReadBlobIndex (); + var hash_algorithm = ReadGuid (); + var hash = ReadBlob (); + var language = ReadGuid (); + + var signature = ReadSignature (name_index); + var name = signature.ReadDocumentName (); + + documents [i - 1] = new Document (name) { + HashAlgorithmGuid = hash_algorithm, + Hash = hash, + LanguageGuid = language, + token = new MetadataToken (TokenType.Document, i), + }; + } + } + + public Collection ReadSequencePoints (MethodDefinition method) + { + InitializeDocuments (); + + if (!MoveTo (Table.MethodDebugInformation, method.MetadataToken.RID)) + return new Collection (0); + + var document_index = ReadTableIndex (Table.Document); + var signature = ReadBlobIndex (); + if (signature == 0) + return new Collection (0); + + var document = GetDocument (document_index); + var reader = ReadSignature (signature); + + return reader.ReadSequencePoints (document); + } + + public Document GetDocument (uint rid) + { + var document = metadata.GetDocument (rid); + if (document == null) + return null; + + document.custom_infos = GetCustomDebugInformation (document); + return document; + } + + void InitializeLocalScopes () + { + if (metadata.LocalScopes != null) + return; + + InitializeMethods (); + + int length = MoveTo (Table.LocalScope); + + metadata.LocalScopes = new Dictionary>> (); + + for (uint i = 1; i <= length; i++) { + var method = ReadTableIndex (Table.Method); + var import = ReadTableIndex (Table.ImportScope); + var variables = ReadListRange (i, Table.LocalScope, Table.LocalVariable); + var constants = ReadListRange (i, Table.LocalScope, Table.LocalConstant); + var scope_start = ReadUInt32 (); + var scope_length = ReadUInt32 (); + + metadata.SetLocalScopes (method, AddMapping (metadata.LocalScopes, method, new Row (import, variables, constants, scope_start, scope_length, i))); + } + } + + public ScopeDebugInformation ReadScope (MethodDefinition method) + { + InitializeLocalScopes (); + InitializeImportScopes (); + + Collection> records; + if (!metadata.TryGetLocalScopes (method, out records)) + return null; + + var method_scope = null as ScopeDebugInformation; + + for (int i = 0; i < records.Count; i++) { + var scope = ReadLocalScope (records [i]); + + if (i == 0) { + method_scope = scope; + continue; + } + + if (!AddScope (method_scope.scopes, scope)) + method_scope.Scopes.Add (scope); + } + + return method_scope; + } + + static bool AddScope (Collection scopes, ScopeDebugInformation scope) + { + if (scopes.IsNullOrEmpty ()) + return false; + + foreach (var sub_scope in scopes) { + if (sub_scope.HasScopes && AddScope (sub_scope.Scopes, scope)) + return true; + + if (scope.Start.Offset >= sub_scope.Start.Offset && scope.End.Offset <= sub_scope.End.Offset) { + sub_scope.Scopes.Add (scope); + return true; + } + } + + return false; + } + + ScopeDebugInformation ReadLocalScope (Row record) + { + var scope = new ScopeDebugInformation + { + start = new InstructionOffset ((int) record.Col4), + end = new InstructionOffset ((int) (record.Col4 + record.Col5)), + token = new MetadataToken (TokenType.LocalScope, record.Col6), + }; + + if (record.Col1 > 0) + scope.import = metadata.GetImportScope (record.Col1); + + if (record.Col2.Length > 0) { + scope.variables = new Collection ((int) record.Col2.Length); + for (uint i = 0; i < record.Col2.Length; i++) { + var variable = ReadLocalVariable (record.Col2.Start + i); + if (variable != null) + scope.variables.Add (variable); + } + } + + if (record.Col3.Length > 0) { + scope.constants = new Collection ((int) record.Col3.Length); + for (uint i = 0; i < record.Col3.Length; i++) { + var constant = ReadLocalConstant (record.Col3.Start + i); + if (constant != null) + scope.constants.Add (constant); + } + } + + return scope; + } + + VariableDebugInformation ReadLocalVariable (uint rid) + { + if (!MoveTo (Table.LocalVariable, rid)) + return null; + + var attributes = (VariableAttributes) ReadUInt16 (); + var index = ReadUInt16 (); + var name = ReadString (); + + var variable = new VariableDebugInformation (index, name) { Attributes = attributes, token = new MetadataToken (TokenType.LocalVariable, rid) }; + variable.custom_infos = GetCustomDebugInformation (variable); + return variable; + } + + ConstantDebugInformation ReadLocalConstant (uint rid) + { + if (!MoveTo (Table.LocalConstant, rid)) + return null; + + var name = ReadString (); + var signature = ReadSignature (ReadBlobIndex ()); + var type = signature.ReadTypeSignature (); + + object value; + if (type.etype == ElementType.String) { + if (signature.buffer [signature.position] != 0xff) { + var bytes = signature.ReadBytes ((int) (signature.sig_length - (signature.position - signature.start))); + value = Encoding.Unicode.GetString (bytes, 0, bytes.Length); + } else + value = null; + } else if (type.IsTypeOf ("System", "Decimal")) { + var b = signature.ReadByte (); + value = new decimal (signature.ReadInt32 (), signature.ReadInt32 (), signature.ReadInt32 (), (b & 0x80) != 0, (byte) (b & 0x7f)); + } else if (type.IsTypeOf ("System", "DateTime")) { + value = new DateTime (signature.ReadInt64()); + } else if (type.etype == ElementType.Object || type.etype == ElementType.None || type.etype == ElementType.Class) { + value = null; + } else + value = signature.ReadConstantSignature (type.etype); + + var constant = new ConstantDebugInformation (name, type, value) { token = new MetadataToken (TokenType.LocalConstant, rid) }; + constant.custom_infos = GetCustomDebugInformation (constant); + return constant; + } + + void InitializeImportScopes () + { + if (metadata.ImportScopes != null) + return; + + var length = MoveTo (Table.ImportScope); + + metadata.ImportScopes = new ImportDebugInformation [length]; + + for (int i = 1; i <= length; i++) { + ReadTableIndex (Table.ImportScope); + + var import = new ImportDebugInformation (); + import.token = new MetadataToken (TokenType.ImportScope, i); + + var signature = ReadSignature (ReadBlobIndex ()); + while (signature.CanReadMore ()) + import.Targets.Add (ReadImportTarget (signature)); + + metadata.ImportScopes [i - 1] = import; + } + + MoveTo (Table.ImportScope); + + for (int i = 0; i < length; i++) { + var parent = ReadTableIndex (Table.ImportScope); + + ReadBlobIndex (); + + if (parent != 0) + metadata.ImportScopes [i].Parent = metadata.GetImportScope (parent); + } + } + + public string ReadUTF8StringBlob (uint signature) + { + return ReadStringBlob (signature, Encoding.UTF8); + } + + string ReadUnicodeStringBlob (uint signature) + { + return ReadStringBlob (signature, Encoding.Unicode); + } + + string ReadStringBlob (uint signature, Encoding encoding) + { + byte [] blob; + int index, count; + + GetBlobView (signature, out blob, out index, out count); + if (count == 0) + return string.Empty; + + return encoding.GetString (blob, index, count); + } + + ImportTarget ReadImportTarget (SignatureReader signature) + { + AssemblyNameReference reference = null; + string @namespace = null; + string alias = null; + TypeReference type = null; + + var kind = (ImportTargetKind) signature.ReadCompressedUInt32 (); + switch (kind) { + case ImportTargetKind.ImportNamespace: + @namespace = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.ImportNamespaceInAssembly: + reference = metadata.GetAssemblyNameReference (signature.ReadCompressedUInt32 ()); + @namespace = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.ImportType: + type = signature.ReadTypeToken (); + break; + case ImportTargetKind.ImportXmlNamespaceWithAlias: + alias = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + @namespace = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.ImportAlias: + alias = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.DefineAssemblyAlias: + alias = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + reference = metadata.GetAssemblyNameReference (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.DefineNamespaceAlias: + alias = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + @namespace = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.DefineNamespaceInAssemblyAlias: + alias = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + reference = metadata.GetAssemblyNameReference (signature.ReadCompressedUInt32 ()); + @namespace = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + break; + case ImportTargetKind.DefineTypeAlias: + alias = ReadUTF8StringBlob (signature.ReadCompressedUInt32 ()); + type = signature.ReadTypeToken (); + break; + } + + return new ImportTarget (kind) { + alias = alias, + type = type, + @namespace = @namespace, + reference = reference, + }; + } + + void InitializeStateMachineMethods () + { + if (metadata.StateMachineMethods != null) + return; + + var length = MoveTo (Table.StateMachineMethod); + + metadata.StateMachineMethods = new Dictionary (length); + + for (int i = 0; i < length; i++) + metadata.StateMachineMethods.Add (ReadTableIndex (Table.Method), ReadTableIndex (Table.Method)); + } + + public MethodDefinition ReadStateMachineKickoffMethod (MethodDefinition method) + { + InitializeStateMachineMethods (); + + uint rid; + if (!metadata.TryGetStateMachineKickOffMethod (method, out rid)) + return null; + + return GetMethodDefinition (rid); + } + + void InitializeCustomDebugInformations () + { + if (metadata.CustomDebugInformations != null) + return; + + var length = MoveTo (Table.CustomDebugInformation); + + metadata.CustomDebugInformations = new Dictionary []> (); + + for (uint i = 1; i <= length; i++) { + var token = ReadMetadataToken (CodedIndex.HasCustomDebugInformation); + var info = new Row (ReadGuid (), ReadBlobIndex (), i); + + Row [] infos; + metadata.CustomDebugInformations.TryGetValue (token, out infos); + metadata.CustomDebugInformations [token] = infos.Add (info); + } + } + + public Collection GetCustomDebugInformation (ICustomDebugInformationProvider provider) + { + InitializeCustomDebugInformations (); + + Row [] rows; + if (!metadata.CustomDebugInformations.TryGetValue (provider.MetadataToken, out rows)) + return null; + + var infos = new Collection (rows.Length); + + for (int i = 0; i < rows.Length; i++) { + if (rows [i].Col1 == StateMachineScopeDebugInformation.KindIdentifier) { + var signature = ReadSignature (rows [i].Col2); + var scopes = new Collection (); + + while (signature.CanReadMore ()) { + var start = signature.ReadInt32 (); + var end = start + signature.ReadInt32 (); + scopes.Add (new StateMachineScope (start, end)); + } + + var state_machine = new StateMachineScopeDebugInformation (); + state_machine.scopes = scopes; + + infos.Add (state_machine); + } else if (rows [i].Col1 == AsyncMethodBodyDebugInformation.KindIdentifier) { + var signature = ReadSignature (rows [i].Col2); + + var catch_offset = signature.ReadInt32 () - 1; + var yields = new Collection (); + var resumes = new Collection (); + var resume_methods = new Collection (); + + while (signature.CanReadMore ()) { + yields.Add (new InstructionOffset (signature.ReadInt32 ())); + resumes.Add (new InstructionOffset (signature.ReadInt32 ())); + resume_methods.Add (GetMethodDefinition (signature.ReadCompressedUInt32 ())); + } + + var async_body = new AsyncMethodBodyDebugInformation (catch_offset); + async_body.yields = yields; + async_body.resumes = resumes; + async_body.resume_methods = resume_methods; + + infos.Add (async_body); + } else if (rows [i].Col1 == EmbeddedSourceDebugInformation.KindIdentifier) { + var signature = ReadSignature (rows [i].Col2); + var format = signature.ReadInt32 (); + var length = signature.sig_length - 4; + + var info = null as CustomDebugInformation; + + if (format == 0) { + info = new EmbeddedSourceDebugInformation (signature.ReadBytes ((int) length), compress: false); + } else if (format > 0) { + var compressed_stream = new MemoryStream (signature.ReadBytes ((int) length)); + var decompressed_document = new byte [format]; // if positive, format is the decompressed length of the document + var decompressed_stream = new MemoryStream (decompressed_document); + + using (var deflate_stream = new DeflateStream (compressed_stream, CompressionMode.Decompress, leaveOpen: true)) + deflate_stream.CopyTo (decompressed_stream); + + info = new EmbeddedSourceDebugInformation (decompressed_document, compress: true); + } else if (format < 0) { + info = new BinaryCustomDebugInformation (rows [i].Col1, ReadBlob (rows [i].Col2)); + } + + infos.Add (info); + } else if (rows [i].Col1 == SourceLinkDebugInformation.KindIdentifier) { + infos.Add (new SourceLinkDebugInformation (Encoding.UTF8.GetString (ReadBlob (rows [i].Col2)))); + } else { + infos.Add (new BinaryCustomDebugInformation (rows [i].Col1, ReadBlob (rows [i].Col2))); + } + + infos [i].token = new MetadataToken (TokenType.CustomDebugInformation, rows [i].Col3); + } + + return infos; + } + } + + sealed class SignatureReader : ByteBuffer { + + readonly MetadataReader reader; + readonly internal uint start, sig_length; + + TypeSystem TypeSystem { + get { return reader.module.TypeSystem; } + } + + public SignatureReader (uint blob, MetadataReader reader) + : base (reader.image.BlobHeap.data) + { + this.reader = reader; + this.position = (int) blob; + this.sig_length = ReadCompressedUInt32(); + this.start = (uint) this.position; + } + + MetadataToken ReadTypeTokenSignature () + { + return CodedIndex.TypeDefOrRef.GetMetadataToken (ReadCompressedUInt32 ()); + } + + GenericParameter GetGenericParameter (GenericParameterType type, uint var) + { + var context = reader.context; + int index = (int) var; + + if (context == null) + return GetUnboundGenericParameter (type, index); + + IGenericParameterProvider provider; + + switch (type) { + case GenericParameterType.Type: + provider = context.Type; + break; + case GenericParameterType.Method: + provider = context.Method; + break; + default: + throw new NotSupportedException (); + } + + if (!context.IsDefinition) + CheckGenericContext (provider, index); + + if (index >= provider.GenericParameters.Count) + return GetUnboundGenericParameter (type, index); + + return provider.GenericParameters [index]; + } + + GenericParameter GetUnboundGenericParameter (GenericParameterType type, int index) + { + return new GenericParameter (index, type, reader.module); + } + + static void CheckGenericContext (IGenericParameterProvider owner, int index) + { + var owner_parameters = owner.GenericParameters; + + for (int i = owner_parameters.Count; i <= index; i++) + owner_parameters.Add (new GenericParameter (owner)); + } + + public void ReadGenericInstanceSignature (IGenericParameterProvider provider, IGenericInstance instance) + { + var arity = ReadCompressedUInt32 (); + + if (!provider.IsDefinition) + CheckGenericContext (provider, (int) arity - 1); + + var instance_arguments = instance.GenericArguments; + + for (int i = 0; i < arity; i++) + instance_arguments.Add (ReadTypeSignature ()); + } + + ArrayType ReadArrayTypeSignature () + { + var array = new ArrayType (ReadTypeSignature ()); + + var rank = ReadCompressedUInt32 (); + + var sizes = new uint [ReadCompressedUInt32 ()]; + for (int i = 0; i < sizes.Length; i++) + sizes [i] = ReadCompressedUInt32 (); + + var low_bounds = new int [ReadCompressedUInt32 ()]; + for (int i = 0; i < low_bounds.Length; i++) + low_bounds [i] = ReadCompressedInt32 (); + + array.Dimensions.Clear (); + + for (int i = 0; i < rank; i++) { + int? lower = null, upper = null; + + if (i < low_bounds.Length) + lower = low_bounds [i]; + + if (i < sizes.Length) + upper = lower + (int) sizes [i] - 1; + + array.Dimensions.Add (new ArrayDimension (lower, upper)); + } + + return array; + } + + TypeReference GetTypeDefOrRef (MetadataToken token) + { + return reader.GetTypeDefOrRef (token); + } + + public TypeReference ReadTypeSignature () + { + return ReadTypeSignature ((ElementType) ReadByte ()); + } + + public TypeReference ReadTypeToken () + { + return GetTypeDefOrRef (ReadTypeTokenSignature ()); + } + + TypeReference ReadTypeSignature (ElementType etype) + { + switch (etype) { + case ElementType.ValueType: { + var value_type = GetTypeDefOrRef (ReadTypeTokenSignature ()); + value_type.KnownValueType (); + return value_type; + } + case ElementType.Class: + return GetTypeDefOrRef (ReadTypeTokenSignature ()); + case ElementType.Ptr: + return new PointerType (ReadTypeSignature ()); + case ElementType.FnPtr: { + var fptr = new FunctionPointerType (); + ReadMethodSignature (fptr); + return fptr; + } + case ElementType.ByRef: + return new ByReferenceType (ReadTypeSignature ()); + case ElementType.Pinned: + return new PinnedType (ReadTypeSignature ()); + case ElementType.SzArray: + return new ArrayType (ReadTypeSignature ()); + case ElementType.Array: + return ReadArrayTypeSignature (); + case ElementType.CModOpt: + return new OptionalModifierType ( + GetTypeDefOrRef (ReadTypeTokenSignature ()), ReadTypeSignature ()); + case ElementType.CModReqD: + return new RequiredModifierType ( + GetTypeDefOrRef (ReadTypeTokenSignature ()), ReadTypeSignature ()); + case ElementType.Sentinel: + return new SentinelType (ReadTypeSignature ()); + case ElementType.Var: + return GetGenericParameter (GenericParameterType.Type, ReadCompressedUInt32 ()); + case ElementType.MVar: + return GetGenericParameter (GenericParameterType.Method, ReadCompressedUInt32 ()); + case ElementType.GenericInst: { + var is_value_type = ReadByte () == (byte) ElementType.ValueType; + var element_type = GetTypeDefOrRef (ReadTypeTokenSignature ()); + var generic_instance = new GenericInstanceType (element_type); + + ReadGenericInstanceSignature (element_type, generic_instance); + + if (is_value_type) { + generic_instance.KnownValueType (); + element_type.GetElementType ().KnownValueType (); + } + + return generic_instance; + } + case ElementType.Object: return TypeSystem.Object; + case ElementType.Void: return TypeSystem.Void; + case ElementType.TypedByRef: return TypeSystem.TypedReference; + case ElementType.I: return TypeSystem.IntPtr; + case ElementType.U: return TypeSystem.UIntPtr; + default: return GetPrimitiveType (etype); + } + } + + public void ReadMethodSignature (IMethodSignature method) + { + var calling_convention = ReadByte (); + + const byte has_this = 0x20; + const byte explicit_this = 0x40; + + if ((calling_convention & has_this) != 0) { + method.HasThis = true; + calling_convention = (byte) (calling_convention & ~has_this); + } + + if ((calling_convention & explicit_this) != 0) { + method.ExplicitThis = true; + calling_convention = (byte) (calling_convention & ~explicit_this); + } + + method.CallingConvention = (MethodCallingConvention) calling_convention; + + var generic_context = method as MethodReference; + if (generic_context != null && !generic_context.DeclaringType.IsArray) + reader.context = generic_context; + + if ((calling_convention & 0x10) != 0) { + var arity = ReadCompressedUInt32 (); + + if (generic_context != null && !generic_context.IsDefinition) + CheckGenericContext (generic_context, (int) arity -1 ); + } + + var param_count = ReadCompressedUInt32 (); + + method.MethodReturnType.ReturnType = ReadTypeSignature (); + + if (param_count == 0) + return; + + Collection parameters; + + var method_ref = method as MethodReference; + if (method_ref != null) + parameters = method_ref.parameters = new ParameterDefinitionCollection (method, (int) param_count); + else + parameters = method.Parameters; + + for (int i = 0; i < param_count; i++) + parameters.Add (new ParameterDefinition (ReadTypeSignature ())); + } + + public object ReadConstantSignature (ElementType type) + { + return ReadPrimitiveValue (type); + } + + public void ReadCustomAttributeConstructorArguments (CustomAttribute attribute, Collection parameters) + { + var count = parameters.Count; + if (count == 0) + return; + + attribute.arguments = new Collection (count); + + for (int i = 0; i < count; i++) + attribute.arguments.Add ( + ReadCustomAttributeFixedArgument (parameters [i].ParameterType)); + } + + CustomAttributeArgument ReadCustomAttributeFixedArgument (TypeReference type) + { + if (type.IsArray) + return ReadCustomAttributeFixedArrayArgument ((ArrayType) type); + + return ReadCustomAttributeElement (type); + } + + public void ReadCustomAttributeNamedArguments (ushort count, ref Collection fields, ref Collection properties) + { + for (int i = 0; i < count; i++) { + if (!CanReadMore ()) + return; + ReadCustomAttributeNamedArgument (ref fields, ref properties); + } + } + + void ReadCustomAttributeNamedArgument (ref Collection fields, ref Collection properties) + { + var kind = ReadByte (); + var type = ReadCustomAttributeFieldOrPropType (); + var name = ReadUTF8String (); + + Collection container; + switch (kind) { + case 0x53: + container = GetCustomAttributeNamedArgumentCollection (ref fields); + break; + case 0x54: + container = GetCustomAttributeNamedArgumentCollection (ref properties); + break; + default: + throw new NotSupportedException (); + } + + container.Add (new CustomAttributeNamedArgument (name, ReadCustomAttributeFixedArgument (type))); + } + + static Collection GetCustomAttributeNamedArgumentCollection (ref Collection collection) + { + if (collection != null) + return collection; + + return collection = new Collection (); + } + + CustomAttributeArgument ReadCustomAttributeFixedArrayArgument (ArrayType type) + { + var length = ReadUInt32 (); + + if (length == 0xffffffff) + return new CustomAttributeArgument (type, null); + + if (length == 0) + return new CustomAttributeArgument (type, Empty.Array); + + var arguments = new CustomAttributeArgument [length]; + var element_type = type.ElementType; + + for (int i = 0; i < length; i++) + arguments [i] = ReadCustomAttributeElement (element_type); + + return new CustomAttributeArgument (type, arguments); + } + + CustomAttributeArgument ReadCustomAttributeElement (TypeReference type) + { + if (type.IsArray) + return ReadCustomAttributeFixedArrayArgument ((ArrayType) type); + + return new CustomAttributeArgument ( + type, + type.etype == ElementType.Object + ? ReadCustomAttributeElement (ReadCustomAttributeFieldOrPropType ()) + : ReadCustomAttributeElementValue (type)); + } + + object ReadCustomAttributeElementValue (TypeReference type) + { + var etype = type.etype; + + switch (etype) { + case ElementType.String: + return ReadUTF8String (); + case ElementType.None: + if (type.IsTypeOf ("System", "Type")) + return ReadTypeReference (); + + return ReadCustomAttributeEnum (type); + default: + return ReadPrimitiveValue (etype); + } + } + + object ReadPrimitiveValue (ElementType type) + { + switch (type) { + case ElementType.Boolean: + return ReadByte () == 1; + case ElementType.I1: + return (sbyte) ReadByte (); + case ElementType.U1: + return ReadByte (); + case ElementType.Char: + return (char) ReadUInt16 (); + case ElementType.I2: + return ReadInt16 (); + case ElementType.U2: + return ReadUInt16 (); + case ElementType.I4: + return ReadInt32 (); + case ElementType.U4: + return ReadUInt32 (); + case ElementType.I8: + return ReadInt64 (); + case ElementType.U8: + return ReadUInt64 (); + case ElementType.R4: + return ReadSingle (); + case ElementType.R8: + return ReadDouble (); + default: + throw new NotImplementedException (type.ToString ()); + } + } + + TypeReference GetPrimitiveType (ElementType etype) + { + switch (etype) { + case ElementType.Boolean: + return TypeSystem.Boolean; + case ElementType.Char: + return TypeSystem.Char; + case ElementType.I1: + return TypeSystem.SByte; + case ElementType.U1: + return TypeSystem.Byte; + case ElementType.I2: + return TypeSystem.Int16; + case ElementType.U2: + return TypeSystem.UInt16; + case ElementType.I4: + return TypeSystem.Int32; + case ElementType.U4: + return TypeSystem.UInt32; + case ElementType.I8: + return TypeSystem.Int64; + case ElementType.U8: + return TypeSystem.UInt64; + case ElementType.R4: + return TypeSystem.Single; + case ElementType.R8: + return TypeSystem.Double; + case ElementType.String: + return TypeSystem.String; + default: + throw new NotImplementedException (etype.ToString ()); + } + } + + TypeReference ReadCustomAttributeFieldOrPropType () + { + var etype = (ElementType) ReadByte (); + + switch (etype) { + case ElementType.Boxed: + return TypeSystem.Object; + case ElementType.SzArray: + return new ArrayType (ReadCustomAttributeFieldOrPropType ()); + case ElementType.Enum: + return ReadTypeReference (); + case ElementType.Type: + return TypeSystem.LookupType ("System", "Type"); + default: + return GetPrimitiveType (etype); + } + } + + public TypeReference ReadTypeReference () + { + return TypeParser.ParseType (reader.module, ReadUTF8String ()); + } + + object ReadCustomAttributeEnum (TypeReference enum_type) + { + var type = enum_type.CheckedResolve (); + if (!type.IsEnum) + throw new ArgumentException (); + + return ReadCustomAttributeElementValue (type.GetEnumUnderlyingType ()); + } + + public SecurityAttribute ReadSecurityAttribute () + { + var attribute = new SecurityAttribute (ReadTypeReference ()); + + ReadCompressedUInt32 (); + + ReadCustomAttributeNamedArguments ( + (ushort) ReadCompressedUInt32 (), + ref attribute.fields, + ref attribute.properties); + + return attribute; + } + + public MarshalInfo ReadMarshalInfo () + { + var native = ReadNativeType (); + switch (native) { + case NativeType.Array: { + var array = new ArrayMarshalInfo (); + if (CanReadMore ()) + array.element_type = ReadNativeType (); + if (CanReadMore ()) + array.size_parameter_index = (int) ReadCompressedUInt32 (); + if (CanReadMore ()) + array.size = (int) ReadCompressedUInt32 (); + if (CanReadMore ()) + array.size_parameter_multiplier = (int) ReadCompressedUInt32 (); + return array; + } + case NativeType.SafeArray: { + var array = new SafeArrayMarshalInfo (); + if (CanReadMore ()) + array.element_type = ReadVariantType (); + return array; + } + case NativeType.FixedArray: { + var array = new FixedArrayMarshalInfo (); + if (CanReadMore ()) + array.size = (int) ReadCompressedUInt32 (); + if (CanReadMore ()) + array.element_type = ReadNativeType (); + return array; + } + case NativeType.FixedSysString: { + var sys_string = new FixedSysStringMarshalInfo (); + if (CanReadMore ()) + sys_string.size = (int) ReadCompressedUInt32 (); + return sys_string; + } + case NativeType.CustomMarshaler: { + var marshaler = new CustomMarshalInfo (); + var guid_value = ReadUTF8String (); + marshaler.guid = !string.IsNullOrEmpty (guid_value) ? new Guid (guid_value) : Guid.Empty; + marshaler.unmanaged_type = ReadUTF8String (); + marshaler.managed_type = ReadTypeReference (); + marshaler.cookie = ReadUTF8String (); + return marshaler; + } + default: + return new MarshalInfo (native); + } + } + + NativeType ReadNativeType () + { + return (NativeType) ReadByte (); + } + + VariantType ReadVariantType () + { + return (VariantType) ReadByte (); + } + + string ReadUTF8String () + { + if (buffer [position] == 0xff) { + position++; + return null; + } + + var length = (int) ReadCompressedUInt32 (); + if (length == 0) + return string.Empty; + + if (position + length >= buffer.Length) + return string.Empty; + + var @string = Encoding.UTF8.GetString (buffer, position, length); + + position += length; + return @string; + } + + public string ReadDocumentName () + { + var separator = (char) buffer [position]; + position++; + + var builder = new StringBuilder (); + for (int i = 0; CanReadMore (); i++) { + if (i > 0 && separator != 0) + builder.Append (separator); + + uint part = ReadCompressedUInt32 (); + if (part != 0) + builder.Append (reader.ReadUTF8StringBlob (part)); + } + + return builder.ToString (); + } + + public Collection ReadSequencePoints (Document document) + { + var sequence_points = new Collection (); + + ReadCompressedUInt32 (); // local_sig_token + + if (document == null) + document = reader.GetDocument (ReadCompressedUInt32 ()); + + var offset = 0; + var start_line = 0; + var start_column = 0; + var first_non_hidden = true; + + for (var i = 0; CanReadMore (); i++) { + var delta_il = (int) ReadCompressedUInt32 (); + if (i > 0 && delta_il == 0) { + document = reader.GetDocument (ReadCompressedUInt32 ()); + continue; + } + + offset += delta_il; + + var delta_lines = (int) ReadCompressedUInt32 (); + var delta_columns = delta_lines == 0 + ? (int) ReadCompressedUInt32 () + : ReadCompressedInt32 (); + + if (delta_lines == 0 && delta_columns == 0) { + sequence_points.Add (new SequencePoint (offset, document) { + StartLine = 0xfeefee, + EndLine = 0xfeefee, + StartColumn = 0, + EndColumn = 0, + }); + continue; + } + + if (first_non_hidden) { + start_line = (int) ReadCompressedUInt32 (); + start_column = (int) ReadCompressedUInt32 (); + } else { + start_line += ReadCompressedInt32 (); + start_column += ReadCompressedInt32 (); + } + + sequence_points.Add (new SequencePoint (offset, document) { + StartLine = start_line, + StartColumn = start_column, + EndLine = start_line + delta_lines, + EndColumn = start_column + delta_columns, + }); + first_non_hidden = false; + } + + return sequence_points; + } + + public bool CanReadMore () + { + return position - start < sig_length; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs.meta new file mode 100644 index 0000000..75f2a4d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f47b8eb373e346f4f9a66e33223eef1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs new file mode 100644 index 0000000..13137ae --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs @@ -0,0 +1,3310 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; + +using Mono; +using Mono.Collections.Generic; +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; +using Mono.Cecil.PE; + +using RVA = System.UInt32; +using RID = System.UInt32; +using CodedRID = System.UInt32; +using StringIndex = System.UInt32; +using BlobIndex = System.UInt32; +using GuidIndex = System.UInt32; + +namespace Mono.Cecil { + +#if !READ_ONLY + + using ModuleRow = Row; + using TypeRefRow = Row; + using TypeDefRow = Row; + using FieldRow = Row; + using MethodRow = Row; + using ParamRow = Row; + using InterfaceImplRow = Row; + using MemberRefRow = Row; + using ConstantRow = Row; + using CustomAttributeRow = Row; + using FieldMarshalRow = Row; + using DeclSecurityRow = Row; + using ClassLayoutRow = Row; + using FieldLayoutRow = Row; + using EventMapRow = Row; + using EventRow = Row; + using PropertyMapRow = Row; + using PropertyRow = Row; + using MethodSemanticsRow = Row; + using MethodImplRow = Row; + using ImplMapRow = Row; + using FieldRVARow = Row; + using AssemblyRow = Row; + using AssemblyRefRow = Row; + using FileRow = Row; + using ExportedTypeRow = Row; + using ManifestResourceRow = Row; + using NestedClassRow = Row; + using GenericParamRow = Row; + using MethodSpecRow = Row; + using GenericParamConstraintRow = Row; + using DocumentRow = Row; + using MethodDebugInformationRow = Row; + using LocalScopeRow = Row; + using LocalVariableRow = Row; + using LocalConstantRow = Row; + using ImportScopeRow = Row; + using StateMachineMethodRow = Row; + using CustomDebugInformationRow = Row; + + static class ModuleWriter { + + public static void WriteModule (ModuleDefinition module, Disposable stream, WriterParameters parameters) + { + using (stream) + Write (module, stream, parameters); + } + + static void Write (ModuleDefinition module, Disposable stream, WriterParameters parameters) + { + if ((module.Attributes & ModuleAttributes.ILOnly) == 0) + throw new NotSupportedException ("Writing mixed-mode assemblies is not supported"); + + if (module.HasImage && module.ReadingMode == ReadingMode.Deferred) { + var immediate_reader = new ImmediateModuleReader (module.Image); + immediate_reader.ReadModule (module, resolve_attributes: false); + immediate_reader.ReadSymbols (module); + } + + module.MetadataSystem.Clear (); + + if (module.symbol_reader != null) + module.symbol_reader.Dispose (); + + var name = module.assembly != null ? module.assembly.Name : null; + var fq_name = stream.value.GetFileName (); + var timestamp = parameters.Timestamp ?? module.timestamp; + var symbol_writer_provider = parameters.SymbolWriterProvider; + + if (symbol_writer_provider == null && parameters.WriteSymbols) + symbol_writer_provider = new DefaultSymbolWriterProvider (); + +#if !NET_CORE + if (parameters.StrongNameKeyPair != null && name != null) { + name.PublicKey = parameters.StrongNameKeyPair.PublicKey; + module.Attributes |= ModuleAttributes.StrongNameSigned; + } +#endif + + var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider); + try { + module.metadata_builder = metadata; + + using (var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters)) { + metadata.SetSymbolWriter (symbol_writer); + BuildMetadata (module, metadata); + + var writer = ImageWriter.CreateWriter (module, metadata, stream); + stream.value.SetLength (0); + writer.WriteImage (); + +#if !NET_CORE + if (parameters.StrongNameKeyPair != null) + CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair); +#endif + } + } finally { + module.metadata_builder = null; + } + } + + static void BuildMetadata (ModuleDefinition module, MetadataBuilder metadata) + { + if (!module.HasImage) { + metadata.BuildMetadata (); + return; + } + + module.Read (metadata, (builder, _) => { + builder.BuildMetadata (); + return builder; + }); + } + + static ISymbolWriter GetSymbolWriter (ModuleDefinition module, string fq_name, ISymbolWriterProvider symbol_writer_provider, WriterParameters parameters) + { + if (symbol_writer_provider == null) + return null; + + if (parameters.SymbolStream != null) + return symbol_writer_provider.GetSymbolWriter (module, parameters.SymbolStream); + + return symbol_writer_provider.GetSymbolWriter (module, fq_name); + } + } + + abstract class MetadataTable { + + public abstract int Length { get; } + + public bool IsLarge { + get { return Length > ushort.MaxValue; } + } + + public abstract void Write (TableHeapBuffer buffer); + public abstract void Sort (); + } + + abstract class OneRowTable : MetadataTable where TRow : struct { + + internal TRow row; + + public sealed override int Length { + get { return 1; } + } + + public sealed override void Sort () + { + } + } + + abstract class MetadataTable : MetadataTable where TRow : struct { + + internal TRow [] rows = new TRow [2]; + internal int length; + + public sealed override int Length { + get { return length; } + } + + public int AddRow (TRow row) + { + if (rows.Length == length) + Grow (); + + rows [length++] = row; + return length; + } + + void Grow () + { + var rows = new TRow [this.rows.Length * 2]; + Array.Copy (this.rows, rows, this.rows.Length); + this.rows = rows; + } + + public override void Sort () + { + } + } + + abstract class SortedTable : MetadataTable, IComparer where TRow : struct { + + public sealed override void Sort () + { + MergeSort.Sort (rows, 0, this.length, this); + } + + protected static int Compare (uint x, uint y) + { + return x == y ? 0 : x > y ? 1 : -1; + } + + public abstract int Compare (TRow x, TRow y); + } + + sealed class ModuleTable : OneRowTable { + + public override void Write (TableHeapBuffer buffer) + { + buffer.WriteUInt16 (0); // Generation + buffer.WriteString (row.Col1); // Name + buffer.WriteGuid (row.Col2); // Mvid + buffer.WriteUInt16 (0); // EncId + buffer.WriteUInt16 (0); // EncBaseId + } + } + + sealed class TypeRefTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteCodedRID ( + rows [i].Col1, CodedIndex.ResolutionScope); // Scope + buffer.WriteString (rows [i].Col2); // Name + buffer.WriteString (rows [i].Col3); // Namespace + } + } + } + + sealed class TypeDefTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 ((uint) rows [i].Col1); // Attributes + buffer.WriteString (rows [i].Col2); // Name + buffer.WriteString (rows [i].Col3); // Namespace + buffer.WriteCodedRID ( + rows [i].Col4, CodedIndex.TypeDefOrRef); // Extends + buffer.WriteRID (rows [i].Col5, Table.Field); // FieldList + buffer.WriteRID (rows [i].Col6, Table.Method); // MethodList + } + } + } + + sealed class FieldTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Attributes + buffer.WriteString (rows [i].Col2); // Name + buffer.WriteBlob (rows [i].Col3); // Signature + } + } + } + + sealed class MethodTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 (rows [i].Col1); // RVA + buffer.WriteUInt16 ((ushort) rows [i].Col2); // ImplFlags + buffer.WriteUInt16 ((ushort) rows [i].Col3); // Flags + buffer.WriteString (rows [i].Col4); // Name + buffer.WriteBlob (rows [i].Col5); // Signature + buffer.WriteRID (rows [i].Col6, Table.Param); // ParamList + } + } + } + + sealed class ParamTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Attributes + buffer.WriteUInt16 (rows [i].Col2); // Sequence + buffer.WriteString (rows [i].Col3); // Name + } + } + } + + sealed class InterfaceImplTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.TypeDef); // Class + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.TypeDefOrRef); // Interface + } + } + + /*public override int Compare (InterfaceImplRow x, InterfaceImplRow y) + { + return (int) (x.Col1 == y.Col1 ? y.Col2 - x.Col2 : x.Col1 - y.Col1); + }*/ + } + + sealed class MemberRefTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteCodedRID (rows [i].Col1, CodedIndex.MemberRefParent); + buffer.WriteString (rows [i].Col2); + buffer.WriteBlob (rows [i].Col3); + } + } + } + + sealed class ConstantTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.HasConstant); + buffer.WriteBlob (rows [i].Col3); + } + } + + public override int Compare (ConstantRow x, ConstantRow y) + { + return Compare (x.Col2, y.Col2); + } + } + + sealed class CustomAttributeTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteCodedRID (rows [i].Col1, CodedIndex.HasCustomAttribute); // Parent + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.CustomAttributeType); // Type + buffer.WriteBlob (rows [i].Col3); + } + } + + public override int Compare (CustomAttributeRow x, CustomAttributeRow y) + { + return Compare (x.Col1, y.Col1); + } + } + + sealed class FieldMarshalTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteCodedRID (rows [i].Col1, CodedIndex.HasFieldMarshal); + buffer.WriteBlob (rows [i].Col2); + } + } + + public override int Compare (FieldMarshalRow x, FieldMarshalRow y) + { + return Compare (x.Col1, y.Col1); + } + } + + sealed class DeclSecurityTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.HasDeclSecurity); + buffer.WriteBlob (rows [i].Col3); + } + } + + public override int Compare (DeclSecurityRow x, DeclSecurityRow y) + { + return Compare (x.Col2, y.Col2); + } + } + + sealed class ClassLayoutTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 (rows [i].Col1); // PackingSize + buffer.WriteUInt32 (rows [i].Col2); // ClassSize + buffer.WriteRID (rows [i].Col3, Table.TypeDef); // Parent + } + } + + public override int Compare (ClassLayoutRow x, ClassLayoutRow y) + { + return Compare (x.Col3, y.Col3); + } + } + + sealed class FieldLayoutTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 (rows [i].Col1); // Offset + buffer.WriteRID (rows [i].Col2, Table.Field); // Parent + } + } + + public override int Compare (FieldLayoutRow x, FieldLayoutRow y) + { + return Compare (x.Col2, y.Col2); + } + } + + sealed class StandAloneSigTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) + buffer.WriteBlob (rows [i]); + } + } + + sealed class EventMapTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.TypeDef); // Parent + buffer.WriteRID (rows [i].Col2, Table.Event); // EventList + } + } + } + + sealed class EventTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Flags + buffer.WriteString (rows [i].Col2); // Name + buffer.WriteCodedRID (rows [i].Col3, CodedIndex.TypeDefOrRef); // EventType + } + } + } + + sealed class PropertyMapTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.TypeDef); // Parent + buffer.WriteRID (rows [i].Col2, Table.Property); // PropertyList + } + } + } + + sealed class PropertyTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Flags + buffer.WriteString (rows [i].Col2); // Name + buffer.WriteBlob (rows [i].Col3); // Type + } + } + } + + sealed class MethodSemanticsTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Flags + buffer.WriteRID (rows [i].Col2, Table.Method); // Method + buffer.WriteCodedRID (rows [i].Col3, CodedIndex.HasSemantics); // Association + } + } + + public override int Compare (MethodSemanticsRow x, MethodSemanticsRow y) + { + return Compare (x.Col3, y.Col3); + } + } + + sealed class MethodImplTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.TypeDef); // Class + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.MethodDefOrRef); // MethodBody + buffer.WriteCodedRID (rows [i].Col3, CodedIndex.MethodDefOrRef); // MethodDeclaration + } + } + } + + sealed class ModuleRefTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) + buffer.WriteString (rows [i]); // Name + } + } + + sealed class TypeSpecTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) + buffer.WriteBlob (rows [i]); // Signature + } + } + + sealed class ImplMapTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Flags + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.MemberForwarded); // MemberForwarded + buffer.WriteString (rows [i].Col3); // ImportName + buffer.WriteRID (rows [i].Col4, Table.ModuleRef); // ImportScope + } + } + + public override int Compare (ImplMapRow x, ImplMapRow y) + { + return Compare (x.Col2, y.Col2); + } + } + + sealed class FieldRVATable : SortedTable { + + internal int position; + + public override void Write (TableHeapBuffer buffer) + { + position = buffer.position; + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 (rows [i].Col1); // RVA + buffer.WriteRID (rows [i].Col2, Table.Field); // Field + } + } + + public override int Compare (FieldRVARow x, FieldRVARow y) + { + return Compare (x.Col2, y.Col2); + } + } + + sealed class AssemblyTable : OneRowTable { + + public override void Write (TableHeapBuffer buffer) + { + buffer.WriteUInt32 ((uint) row.Col1); // AssemblyHashAlgorithm + buffer.WriteUInt16 (row.Col2); // MajorVersion + buffer.WriteUInt16 (row.Col3); // MinorVersion + buffer.WriteUInt16 (row.Col4); // Build + buffer.WriteUInt16 (row.Col5); // Revision + buffer.WriteUInt32 ((uint) row.Col6); // Flags + buffer.WriteBlob (row.Col7); // PublicKey + buffer.WriteString (row.Col8); // Name + buffer.WriteString (row.Col9); // Culture + } + } + + sealed class AssemblyRefTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 (rows [i].Col1); // MajorVersion + buffer.WriteUInt16 (rows [i].Col2); // MinorVersion + buffer.WriteUInt16 (rows [i].Col3); // Build + buffer.WriteUInt16 (rows [i].Col4); // Revision + buffer.WriteUInt32 ((uint) rows [i].Col5); // Flags + buffer.WriteBlob (rows [i].Col6); // PublicKeyOrToken + buffer.WriteString (rows [i].Col7); // Name + buffer.WriteString (rows [i].Col8); // Culture + buffer.WriteBlob (rows [i].Col9); // Hash + } + } + } + + sealed class FileTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 ((uint) rows [i].Col1); + buffer.WriteString (rows [i].Col2); + buffer.WriteBlob (rows [i].Col3); + } + } + } + + sealed class ExportedTypeTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 ((uint) rows [i].Col1); + buffer.WriteUInt32 (rows [i].Col2); + buffer.WriteString (rows [i].Col3); + buffer.WriteString (rows [i].Col4); + buffer.WriteCodedRID (rows [i].Col5, CodedIndex.Implementation); + } + } + } + + sealed class ManifestResourceTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt32 (rows [i].Col1); + buffer.WriteUInt32 ((uint) rows [i].Col2); + buffer.WriteString (rows [i].Col3); + buffer.WriteCodedRID (rows [i].Col4, CodedIndex.Implementation); + } + } + } + + sealed class NestedClassTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.TypeDef); // NestedClass + buffer.WriteRID (rows [i].Col2, Table.TypeDef); // EnclosingClass + } + } + + public override int Compare (NestedClassRow x, NestedClassRow y) + { + return Compare (x.Col1, y.Col1); + } + } + + sealed class GenericParamTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 (rows [i].Col1); // Number + buffer.WriteUInt16 ((ushort) rows [i].Col2); // Flags + buffer.WriteCodedRID (rows [i].Col3, CodedIndex.TypeOrMethodDef); // Owner + buffer.WriteString (rows [i].Col4); // Name + } + } + } + + sealed class MethodSpecTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteCodedRID (rows [i].Col1, CodedIndex.MethodDefOrRef); // Method + buffer.WriteBlob (rows [i].Col2); // Instantiation + } + } + } + + sealed class GenericParamConstraintTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.GenericParam); // Owner + buffer.WriteCodedRID (rows [i].Col2, CodedIndex.TypeDefOrRef); // Constraint + } + } + } + + sealed class DocumentTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteBlob (rows [i].Col1); // Name + buffer.WriteGuid (rows [i].Col2); // HashAlgorithm + buffer.WriteBlob (rows [i].Col3); // Hash + buffer.WriteGuid (rows [i].Col4); // Language + } + } + } + + sealed class MethodDebugInformationTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.Document); // Document + buffer.WriteBlob (rows [i].Col2); // SequencePoints + } + } + } + + sealed class LocalScopeTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.Method); // Method + buffer.WriteRID (rows [i].Col2, Table.ImportScope); // ImportScope + buffer.WriteRID (rows [i].Col3, Table.LocalVariable); // VariableList + buffer.WriteRID (rows [i].Col4, Table.LocalConstant); // ConstantList + buffer.WriteUInt32 (rows [i].Col5); // StartOffset + buffer.WriteUInt32 (rows [i].Col6); // Length + } + } + } + + sealed class LocalVariableTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteUInt16 ((ushort) rows [i].Col1); // Attributes + buffer.WriteUInt16 (rows [i].Col2); // Index + buffer.WriteString (rows [i].Col3); // Name + } + } + } + + sealed class LocalConstantTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteString (rows [i].Col1); // Name + buffer.WriteBlob (rows [i].Col2); // Signature + } + } + } + + sealed class ImportScopeTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.ImportScope); // Parent + buffer.WriteBlob (rows [i].Col2); // Imports + } + } + } + + sealed class StateMachineMethodTable : MetadataTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteRID (rows [i].Col1, Table.Method); // MoveNextMethod + buffer.WriteRID (rows [i].Col2, Table.Method); // KickoffMethod + } + } + } + + sealed class CustomDebugInformationTable : SortedTable { + + public override void Write (TableHeapBuffer buffer) + { + for (int i = 0; i < length; i++) { + buffer.WriteCodedRID (rows [i].Col1, CodedIndex.HasCustomDebugInformation); // Parent + buffer.WriteGuid (rows [i].Col2); // Kind + buffer.WriteBlob (rows [i].Col3); // Value + } + } + + public override int Compare (CustomDebugInformationRow x, CustomDebugInformationRow y) + { + return Compare(x.Col1, y.Col1); + } + } + + sealed class MetadataBuilder { + + readonly internal ModuleDefinition module; + readonly internal ISymbolWriterProvider symbol_writer_provider; + internal ISymbolWriter symbol_writer; + readonly internal TextMap text_map; + readonly internal string fq_name; + readonly internal uint timestamp; + + readonly Dictionary type_ref_map; + readonly Dictionary type_spec_map; + readonly Dictionary member_ref_map; + readonly Dictionary method_spec_map; + readonly Collection generic_parameters; + + readonly internal CodeWriter code; + readonly internal DataBuffer data; + readonly internal ResourceBuffer resources; + readonly internal StringHeapBuffer string_heap; + readonly internal GuidHeapBuffer guid_heap; + readonly internal UserStringHeapBuffer user_string_heap; + readonly internal BlobHeapBuffer blob_heap; + readonly internal TableHeapBuffer table_heap; + readonly internal PdbHeapBuffer pdb_heap; + + internal MetadataToken entry_point; + + internal RID type_rid = 1; + internal RID field_rid = 1; + internal RID method_rid = 1; + internal RID param_rid = 1; + internal RID property_rid = 1; + internal RID event_rid = 1; + internal RID local_variable_rid = 1; + internal RID local_constant_rid = 1; + + readonly TypeRefTable type_ref_table; + readonly TypeDefTable type_def_table; + readonly FieldTable field_table; + readonly MethodTable method_table; + readonly ParamTable param_table; + readonly InterfaceImplTable iface_impl_table; + readonly MemberRefTable member_ref_table; + readonly ConstantTable constant_table; + readonly CustomAttributeTable custom_attribute_table; + readonly DeclSecurityTable declsec_table; + readonly StandAloneSigTable standalone_sig_table; + readonly EventMapTable event_map_table; + readonly EventTable event_table; + readonly PropertyMapTable property_map_table; + readonly PropertyTable property_table; + readonly TypeSpecTable typespec_table; + readonly MethodSpecTable method_spec_table; + + internal MetadataBuilder metadata_builder; + + readonly DocumentTable document_table; + readonly MethodDebugInformationTable method_debug_information_table; + readonly LocalScopeTable local_scope_table; + readonly LocalVariableTable local_variable_table; + readonly LocalConstantTable local_constant_table; + readonly ImportScopeTable import_scope_table; + readonly StateMachineMethodTable state_machine_method_table; + readonly CustomDebugInformationTable custom_debug_information_table; + + readonly Dictionary import_scope_map; + readonly Dictionary document_map; + + public MetadataBuilder (ModuleDefinition module, string fq_name, uint timestamp, ISymbolWriterProvider symbol_writer_provider) + { + this.module = module; + this.text_map = CreateTextMap (); + this.fq_name = fq_name; + this.timestamp = timestamp; + this.symbol_writer_provider = symbol_writer_provider; + + this.code = new CodeWriter (this); + this.data = new DataBuffer (); + this.resources = new ResourceBuffer (); + this.string_heap = new StringHeapBuffer (); + this.guid_heap = new GuidHeapBuffer (); + this.user_string_heap = new UserStringHeapBuffer (); + this.blob_heap = new BlobHeapBuffer (); + this.table_heap = new TableHeapBuffer (module, this); + + this.type_ref_table = GetTable (Table.TypeRef); + this.type_def_table = GetTable (Table.TypeDef); + this.field_table = GetTable (Table.Field); + this.method_table = GetTable (Table.Method); + this.param_table = GetTable (Table.Param); + this.iface_impl_table = GetTable (Table.InterfaceImpl); + this.member_ref_table = GetTable (Table.MemberRef); + this.constant_table = GetTable (Table.Constant); + this.custom_attribute_table = GetTable (Table.CustomAttribute); + this.declsec_table = GetTable (Table.DeclSecurity); + this.standalone_sig_table = GetTable (Table.StandAloneSig); + this.event_map_table = GetTable (Table.EventMap); + this.event_table = GetTable (Table.Event); + this.property_map_table = GetTable (Table.PropertyMap); + this.property_table = GetTable (Table.Property); + this.typespec_table = GetTable (Table.TypeSpec); + this.method_spec_table = GetTable (Table.MethodSpec); + + var row_equality_comparer = new RowEqualityComparer (); + type_ref_map = new Dictionary (row_equality_comparer); + type_spec_map = new Dictionary (); + member_ref_map = new Dictionary (row_equality_comparer); + method_spec_map = new Dictionary (row_equality_comparer); + generic_parameters = new Collection (); + + this.document_table = GetTable (Table.Document); + this.method_debug_information_table = GetTable (Table.MethodDebugInformation); + this.local_scope_table = GetTable (Table.LocalScope); + this.local_variable_table = GetTable (Table.LocalVariable); + this.local_constant_table = GetTable (Table.LocalConstant); + this.import_scope_table = GetTable (Table.ImportScope); + this.state_machine_method_table = GetTable (Table.StateMachineMethod); + this.custom_debug_information_table = GetTable (Table.CustomDebugInformation); + + this.document_map = new Dictionary (StringComparer.Ordinal); + this.import_scope_map = new Dictionary (row_equality_comparer); + } + + public MetadataBuilder (ModuleDefinition module, PortablePdbWriterProvider writer_provider) + { + this.module = module; + this.text_map = new TextMap (); + this.symbol_writer_provider = writer_provider; + + this.string_heap = new StringHeapBuffer (); + this.guid_heap = new GuidHeapBuffer (); + this.user_string_heap = new UserStringHeapBuffer (); + this.blob_heap = new BlobHeapBuffer (); + this.table_heap = new TableHeapBuffer (module, this); + this.pdb_heap = new PdbHeapBuffer(); + + this.document_table = GetTable (Table.Document); + this.method_debug_information_table = GetTable (Table.MethodDebugInformation); + this.local_scope_table = GetTable (Table.LocalScope); + this.local_variable_table = GetTable (Table.LocalVariable); + this.local_constant_table = GetTable (Table.LocalConstant); + this.import_scope_table = GetTable (Table.ImportScope); + this.state_machine_method_table = GetTable (Table.StateMachineMethod); + this.custom_debug_information_table = GetTable (Table.CustomDebugInformation); + + var row_equality_comparer = new RowEqualityComparer (); + + this.document_map = new Dictionary (); + this.import_scope_map = new Dictionary (row_equality_comparer); + } + + public void SetSymbolWriter (ISymbolWriter writer) + { + symbol_writer = writer; + + if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ()) + symbol_writer = new PortablePdbWriter (this, module); + } + + TextMap CreateTextMap () + { + var map = new TextMap (); + map.AddMap (TextSegment.ImportAddressTable, module.Architecture == TargetArchitecture.I386 ? 8 : 0); + map.AddMap (TextSegment.CLIHeader, 0x48, 8); + return map; + } + + TTable GetTable (Table table) where TTable : MetadataTable, new () + { + return table_heap.GetTable (table); + } + + uint GetStringIndex (string @string) + { + if (string.IsNullOrEmpty (@string)) + return 0; + + return string_heap.GetStringIndex (@string); + } + + uint GetGuidIndex (Guid guid) + { + return guid_heap.GetGuidIndex (guid); + } + + uint GetBlobIndex (ByteBuffer blob) + { + if (blob.length == 0) + return 0; + + return blob_heap.GetBlobIndex (blob); + } + + uint GetBlobIndex (byte [] blob) + { + if (blob.IsNullOrEmpty ()) + return 0; + + return GetBlobIndex (new ByteBuffer (blob)); + } + + public void BuildMetadata () + { + BuildModule (); + + table_heap.string_offsets = string_heap.WriteStrings (); + table_heap.ComputeTableInformations (); + table_heap.WriteTableHeap (); + } + + void BuildModule () + { + var table = GetTable (Table.Module); + table.row.Col1 = GetStringIndex (module.Name); + table.row.Col2 = GetGuidIndex (module.Mvid); + + var assembly = module.Assembly; + + if (assembly != null) + BuildAssembly (); + + if (module.HasAssemblyReferences) + AddAssemblyReferences (); + + if (module.HasModuleReferences) + AddModuleReferences (); + + if (module.HasResources) + AddResources (); + + if (module.HasExportedTypes) + AddExportedTypes (); + + BuildTypes (); + + if (assembly != null) { + if (assembly.HasCustomAttributes) + AddCustomAttributes (assembly); + + if (assembly.HasSecurityDeclarations) + AddSecurityDeclarations (assembly); + } + + if (module.HasCustomAttributes) + AddCustomAttributes (module); + + if (module.EntryPoint != null) + entry_point = LookupToken (module.EntryPoint); + } + + void BuildAssembly () + { + var assembly = module.Assembly; + var name = assembly.Name; + + var table = GetTable (Table.Assembly); + + table.row = new AssemblyRow ( + name.HashAlgorithm, + (ushort) name.Version.Major, + (ushort) name.Version.Minor, + (ushort) name.Version.Build, + (ushort) name.Version.Revision, + name.Attributes, + GetBlobIndex (name.PublicKey), + GetStringIndex (name.Name), + GetStringIndex (name.Culture)); + + if (assembly.Modules.Count > 1) + BuildModules (); + } + + void BuildModules () + { + var modules = this.module.Assembly.Modules; + var table = GetTable (Table.File); + + for (int i = 0; i < modules.Count; i++) { + var module = modules [i]; + if (module.IsMain) + continue; + +#if NET_CORE + throw new NotSupportedException (); +#else + var parameters = new WriterParameters { + SymbolWriterProvider = symbol_writer_provider, + }; + + var file_name = GetModuleFileName (module.Name); + module.Write (file_name, parameters); + + var hash = CryptoService.ComputeHash (file_name); + + table.AddRow (new FileRow ( + FileAttributes.ContainsMetaData, + GetStringIndex (module.Name), + GetBlobIndex (hash))); +#endif + } + } + +#if !NET_CORE + string GetModuleFileName (string name) + { + if (string.IsNullOrEmpty (name)) + throw new NotSupportedException (); + + var path = Path.GetDirectoryName (fq_name); + return Path.Combine (path, name); + } +#endif + + void AddAssemblyReferences () + { + var references = module.AssemblyReferences; + var table = GetTable (Table.AssemblyRef); + + if (module.IsWindowsMetadata ()) + module.Projections.RemoveVirtualReferences (references); + + for (int i = 0; i < references.Count; i++) { + var reference = references [i]; + + var key_or_token = reference.PublicKey.IsNullOrEmpty () + ? reference.PublicKeyToken + : reference.PublicKey; + + var version = reference.Version; + + var rid = table.AddRow (new AssemblyRefRow ( + (ushort) version.Major, + (ushort) version.Minor, + (ushort) version.Build, + (ushort) version.Revision, + reference.Attributes, + GetBlobIndex (key_or_token), + GetStringIndex (reference.Name), + GetStringIndex (reference.Culture), + GetBlobIndex (reference.Hash))); + + reference.token = new MetadataToken (TokenType.AssemblyRef, rid); + } + + if (module.IsWindowsMetadata ()) + module.Projections.AddVirtualReferences (references); + } + + void AddModuleReferences () + { + var references = module.ModuleReferences; + var table = GetTable (Table.ModuleRef); + + for (int i = 0; i < references.Count; i++) { + var reference = references [i]; + + reference.token = new MetadataToken ( + TokenType.ModuleRef, + table.AddRow (GetStringIndex (reference.Name))); + } + } + + void AddResources () + { + var resources = module.Resources; + var table = GetTable (Table.ManifestResource); + + for (int i = 0; i < resources.Count; i++) { + var resource = resources [i]; + + var row = new ManifestResourceRow ( + 0, + resource.Attributes, + GetStringIndex (resource.Name), + 0); + + switch (resource.ResourceType) { + case ResourceType.Embedded: + row.Col1 = AddEmbeddedResource ((EmbeddedResource) resource); + break; + case ResourceType.Linked: + row.Col4 = CodedIndex.Implementation.CompressMetadataToken ( + new MetadataToken ( + TokenType.File, + AddLinkedResource ((LinkedResource) resource))); + break; + case ResourceType.AssemblyLinked: + row.Col4 = CodedIndex.Implementation.CompressMetadataToken ( + ((AssemblyLinkedResource) resource).Assembly.MetadataToken); + break; + default: + throw new NotSupportedException (); + } + + table.AddRow (row); + } + } + + uint AddLinkedResource (LinkedResource resource) + { + var table = GetTable (Table.File); + var hash = resource.Hash; + +#if !NET_CORE + if (hash.IsNullOrEmpty ()) + hash = CryptoService.ComputeHash (resource.File); +#endif + + return (uint) table.AddRow (new FileRow ( + FileAttributes.ContainsNoMetaData, + GetStringIndex (resource.File), + GetBlobIndex (hash))); + } + + uint AddEmbeddedResource (EmbeddedResource resource) + { + return resources.AddResource (resource.GetResourceData ()); + } + + void AddExportedTypes () + { + var exported_types = module.ExportedTypes; + var table = GetTable (Table.ExportedType); + + for (int i = 0; i < exported_types.Count; i++) { + var exported_type = exported_types [i]; + + var rid = table.AddRow (new ExportedTypeRow ( + exported_type.Attributes, + (uint) exported_type.Identifier, + GetStringIndex (exported_type.Name), + GetStringIndex (exported_type.Namespace), + MakeCodedRID (GetExportedTypeScope (exported_type), CodedIndex.Implementation))); + + exported_type.token = new MetadataToken (TokenType.ExportedType, rid); + } + } + + MetadataToken GetExportedTypeScope (ExportedType exported_type) + { + if (exported_type.DeclaringType != null) + return exported_type.DeclaringType.MetadataToken; + + var scope = exported_type.Scope; + switch (scope.MetadataToken.TokenType) { + case TokenType.AssemblyRef: + return scope.MetadataToken; + case TokenType.ModuleRef: + var file_table = GetTable (Table.File); + for (int i = 0; i < file_table.length; i++) + if (file_table.rows [i].Col2 == GetStringIndex (scope.Name)) + return new MetadataToken (TokenType.File, i + 1); + + break; + } + + throw new NotSupportedException (); + } + + void BuildTypes () + { + if (!module.HasTypes) + return; + + AttachTokens (); + AddTypes (); + AddGenericParameters (); + } + + void AttachTokens () + { + var types = module.Types; + + for (int i = 0; i < types.Count; i++) + AttachTypeToken (types [i]); + } + + void AttachTypeToken (TypeDefinition type) + { + type.token = new MetadataToken (TokenType.TypeDef, type_rid++); + type.fields_range.Start = field_rid; + type.methods_range.Start = method_rid; + + if (type.HasFields) + AttachFieldsToken (type); + + if (type.HasMethods) + AttachMethodsToken (type); + + if (type.HasNestedTypes) + AttachNestedTypesToken (type); + } + + void AttachNestedTypesToken (TypeDefinition type) + { + var nested_types = type.NestedTypes; + for (int i = 0; i < nested_types.Count; i++) + AttachTypeToken (nested_types [i]); + } + + void AttachFieldsToken (TypeDefinition type) + { + var fields = type.Fields; + type.fields_range.Length = (uint) fields.Count; + for (int i = 0; i < fields.Count; i++) + fields [i].token = new MetadataToken (TokenType.Field, field_rid++); + } + + void AttachMethodsToken (TypeDefinition type) + { + var methods = type.Methods; + type.methods_range.Length = (uint) methods.Count; + for (int i = 0; i < methods.Count; i++) + methods [i].token = new MetadataToken (TokenType.Method, method_rid++); + } + + MetadataToken GetTypeToken (TypeReference type) + { + if (type == null) + return MetadataToken.Zero; + + if (type.IsDefinition) + return type.token; + + if (type.IsTypeSpecification ()) + return GetTypeSpecToken (type); + + return GetTypeRefToken (type); + } + + MetadataToken GetTypeSpecToken (TypeReference type) + { + var row = GetBlobIndex (GetTypeSpecSignature (type)); + + MetadataToken token; + if (type_spec_map.TryGetValue (row, out token)) + return token; + + return AddTypeSpecification (type, row); + } + + MetadataToken AddTypeSpecification (TypeReference type, uint row) + { + type.token = new MetadataToken (TokenType.TypeSpec, typespec_table.AddRow (row)); + + var token = type.token; + type_spec_map.Add (row, token); + return token; + } + + MetadataToken GetTypeRefToken (TypeReference type) + { + var projection = WindowsRuntimeProjections.RemoveProjection (type); + + var row = CreateTypeRefRow (type); + + MetadataToken token; + if (!type_ref_map.TryGetValue (row, out token)) + token = AddTypeReference (type, row); + + WindowsRuntimeProjections.ApplyProjection (type, projection); + + return token; + } + + TypeRefRow CreateTypeRefRow (TypeReference type) + { + var scope_token = GetScopeToken (type); + + return new TypeRefRow ( + MakeCodedRID (scope_token, CodedIndex.ResolutionScope), + GetStringIndex (type.Name), + GetStringIndex (type.Namespace)); + } + + MetadataToken GetScopeToken (TypeReference type) + { + if (type.IsNested) + return GetTypeRefToken (type.DeclaringType); + + var scope = type.Scope; + + if (scope == null) + return MetadataToken.Zero; + + return scope.MetadataToken; + } + + static CodedRID MakeCodedRID (IMetadataTokenProvider provider, CodedIndex index) + { + return MakeCodedRID (provider.MetadataToken, index); + } + + static CodedRID MakeCodedRID (MetadataToken token, CodedIndex index) + { + return index.CompressMetadataToken (token); + } + + MetadataToken AddTypeReference (TypeReference type, TypeRefRow row) + { + type.token = new MetadataToken (TokenType.TypeRef, type_ref_table.AddRow (row)); + + var token = type.token; + type_ref_map.Add (row, token); + return token; + } + + void AddTypes () + { + var types = module.Types; + + for (int i = 0; i < types.Count; i++) + AddType (types [i]); + } + + void AddType (TypeDefinition type) + { + var treatment = WindowsRuntimeProjections.RemoveProjection (type); + + type_def_table.AddRow (new TypeDefRow ( + type.Attributes, + GetStringIndex (type.Name), + GetStringIndex (type.Namespace), + MakeCodedRID (GetTypeToken (type.BaseType), CodedIndex.TypeDefOrRef), + type.fields_range.Start, + type.methods_range.Start)); + + if (type.HasGenericParameters) + AddGenericParameters (type); + + if (type.HasInterfaces) + AddInterfaces (type); + + AddLayoutInfo (type); + + if (type.HasFields) + AddFields (type); + + if (type.HasMethods) + AddMethods (type); + + if (type.HasProperties) + AddProperties (type); + + if (type.HasEvents) + AddEvents (type); + + if (type.HasCustomAttributes) + AddCustomAttributes (type); + + if (type.HasSecurityDeclarations) + AddSecurityDeclarations (type); + + if (type.HasNestedTypes) + AddNestedTypes (type); + + WindowsRuntimeProjections.ApplyProjection (type, treatment); + } + + void AddGenericParameters (IGenericParameterProvider owner) + { + var parameters = owner.GenericParameters; + + for (int i = 0; i < parameters.Count; i++) + generic_parameters.Add (parameters [i]); + } + + sealed class GenericParameterComparer : IComparer { + + public int Compare (GenericParameter a, GenericParameter b) + { + var a_owner = MakeCodedRID (a.Owner, CodedIndex.TypeOrMethodDef); + var b_owner = MakeCodedRID (b.Owner, CodedIndex.TypeOrMethodDef); + if (a_owner == b_owner) { + var a_pos = a.Position; + var b_pos = b.Position; + return a_pos == b_pos ? 0 : a_pos > b_pos ? 1 : -1; + } + + return a_owner > b_owner ? 1 : -1; + } + } + + void AddGenericParameters () + { + var items = this.generic_parameters.items; + var size = this.generic_parameters.size; + Array.Sort (items, 0, size, new GenericParameterComparer ()); + + var generic_param_table = GetTable (Table.GenericParam); + var generic_param_constraint_table = GetTable (Table.GenericParamConstraint); + + for (int i = 0; i < size; i++) { + var generic_parameter = items [i]; + + var rid = generic_param_table.AddRow (new GenericParamRow ( + (ushort) generic_parameter.Position, + generic_parameter.Attributes, + MakeCodedRID (generic_parameter.Owner, CodedIndex.TypeOrMethodDef), + GetStringIndex (generic_parameter.Name))); + + generic_parameter.token = new MetadataToken (TokenType.GenericParam, rid); + + if (generic_parameter.HasConstraints) + AddConstraints (generic_parameter, generic_param_constraint_table); + + if (generic_parameter.HasCustomAttributes) + AddCustomAttributes (generic_parameter); + } + } + + void AddConstraints (GenericParameter generic_parameter, GenericParamConstraintTable table) + { + var constraints = generic_parameter.Constraints; + + var rid = generic_parameter.token.RID; + + for (int i = 0; i < constraints.Count; i++) + table.AddRow (new GenericParamConstraintRow ( + rid, + MakeCodedRID (GetTypeToken (constraints [i]), CodedIndex.TypeDefOrRef))); + } + + void AddInterfaces (TypeDefinition type) + { + var interfaces = type.Interfaces; + var type_rid = type.token.RID; + + for (int i = 0; i < interfaces.Count; i++) { + var iface_impl = interfaces [i]; + + var rid = iface_impl_table.AddRow (new InterfaceImplRow ( + type_rid, + MakeCodedRID (GetTypeToken (iface_impl.InterfaceType), CodedIndex.TypeDefOrRef))); + + iface_impl.token = new MetadataToken (TokenType.InterfaceImpl, rid); + + if (iface_impl.HasCustomAttributes) + AddCustomAttributes (iface_impl); + } + } + + void AddLayoutInfo (TypeDefinition type) + { + if (type.HasLayoutInfo) { + var table = GetTable (Table.ClassLayout); + + table.AddRow (new ClassLayoutRow ( + (ushort) type.PackingSize, + (uint) type.ClassSize, + type.token.RID)); + + return; + } + + if (type.IsValueType && HasNoInstanceField (type)) { + var table = GetTable (Table.ClassLayout); + + table.AddRow (new ClassLayoutRow (0, 1, type.token.RID)); + } + } + + static bool HasNoInstanceField (TypeDefinition type) + { + if (!type.HasFields) + return true; + + var fields = type.Fields; + + for (int i = 0; i < fields.Count; i++) + if (!fields [i].IsStatic) + return false; + + return true; + } + + void AddNestedTypes (TypeDefinition type) + { + var nested_types = type.NestedTypes; + var nested_table = GetTable (Table.NestedClass); + + for (int i = 0; i < nested_types.Count; i++) { + var nested = nested_types [i]; + AddType (nested); + nested_table.AddRow (new NestedClassRow (nested.token.RID, type.token.RID)); + } + } + + void AddFields (TypeDefinition type) + { + var fields = type.Fields; + + for (int i = 0; i < fields.Count; i++) + AddField (fields [i]); + } + + void AddField (FieldDefinition field) + { + var projection = WindowsRuntimeProjections.RemoveProjection (field); + + field_table.AddRow (new FieldRow ( + field.Attributes, + GetStringIndex (field.Name), + GetBlobIndex (GetFieldSignature (field)))); + + if (!field.InitialValue.IsNullOrEmpty ()) + AddFieldRVA (field); + + if (field.HasLayoutInfo) + AddFieldLayout (field); + + if (field.HasCustomAttributes) + AddCustomAttributes (field); + + if (field.HasConstant) + AddConstant (field, field.FieldType); + + if (field.HasMarshalInfo) + AddMarshalInfo (field); + + WindowsRuntimeProjections.ApplyProjection (field, projection); + } + + void AddFieldRVA (FieldDefinition field) + { + var table = GetTable (Table.FieldRVA); + table.AddRow (new FieldRVARow ( + data.AddData (field.InitialValue), + field.token.RID)); + } + + void AddFieldLayout (FieldDefinition field) + { + var table = GetTable (Table.FieldLayout); + table.AddRow (new FieldLayoutRow ((uint) field.Offset, field.token.RID)); + } + + void AddMethods (TypeDefinition type) + { + var methods = type.Methods; + + for (int i = 0; i < methods.Count; i++) + AddMethod (methods [i]); + } + + void AddMethod (MethodDefinition method) + { + var projection = WindowsRuntimeProjections.RemoveProjection (method); + + method_table.AddRow (new MethodRow ( + method.HasBody ? code.WriteMethodBody (method) : 0, + method.ImplAttributes, + method.Attributes, + GetStringIndex (method.Name), + GetBlobIndex (GetMethodSignature (method)), + param_rid)); + + AddParameters (method); + + if (method.HasGenericParameters) + AddGenericParameters (method); + + if (method.IsPInvokeImpl) + AddPInvokeInfo (method); + + if (method.HasCustomAttributes) + AddCustomAttributes (method); + + if (method.HasSecurityDeclarations) + AddSecurityDeclarations (method); + + if (method.HasOverrides) + AddOverrides (method); + + WindowsRuntimeProjections.ApplyProjection (method, projection); + } + + void AddParameters (MethodDefinition method) + { + var return_parameter = method.MethodReturnType.parameter; + + if (return_parameter != null && RequiresParameterRow (return_parameter)) + AddParameter (0, return_parameter, param_table); + + if (!method.HasParameters) + return; + + var parameters = method.Parameters; + + for (int i = 0; i < parameters.Count; i++) { + var parameter = parameters [i]; + if (!RequiresParameterRow (parameter)) + continue; + + AddParameter ((ushort) (i + 1), parameter, param_table); + } + } + + void AddPInvokeInfo (MethodDefinition method) + { + var pinvoke = method.PInvokeInfo; + if (pinvoke == null) + return; + + var table = GetTable (Table.ImplMap); + table.AddRow (new ImplMapRow ( + pinvoke.Attributes, + MakeCodedRID (method, CodedIndex.MemberForwarded), + GetStringIndex (pinvoke.EntryPoint), + pinvoke.Module.MetadataToken.RID)); + } + + void AddOverrides (MethodDefinition method) + { + var overrides = method.Overrides; + var table = GetTable (Table.MethodImpl); + + for (int i = 0; i < overrides.Count; i++) { + table.AddRow (new MethodImplRow ( + method.DeclaringType.token.RID, + MakeCodedRID (method, CodedIndex.MethodDefOrRef), + MakeCodedRID (LookupToken (overrides [i]), CodedIndex.MethodDefOrRef))); + } + } + + static bool RequiresParameterRow (ParameterDefinition parameter) + { + return !string.IsNullOrEmpty (parameter.Name) + || parameter.Attributes != ParameterAttributes.None + || parameter.HasMarshalInfo + || parameter.HasConstant + || parameter.HasCustomAttributes; + } + + void AddParameter (ushort sequence, ParameterDefinition parameter, ParamTable table) + { + table.AddRow (new ParamRow ( + parameter.Attributes, + sequence, + GetStringIndex (parameter.Name))); + + parameter.token = new MetadataToken (TokenType.Param, param_rid++); + + if (parameter.HasCustomAttributes) + AddCustomAttributes (parameter); + + if (parameter.HasConstant) + AddConstant (parameter, parameter.ParameterType); + + if (parameter.HasMarshalInfo) + AddMarshalInfo (parameter); + } + + void AddMarshalInfo (IMarshalInfoProvider owner) + { + var table = GetTable (Table.FieldMarshal); + + table.AddRow (new FieldMarshalRow ( + MakeCodedRID (owner, CodedIndex.HasFieldMarshal), + GetBlobIndex (GetMarshalInfoSignature (owner)))); + } + + void AddProperties (TypeDefinition type) + { + var properties = type.Properties; + + property_map_table.AddRow (new PropertyMapRow (type.token.RID, property_rid)); + + for (int i = 0; i < properties.Count; i++) + AddProperty (properties [i]); + } + + void AddProperty (PropertyDefinition property) + { + property_table.AddRow (new PropertyRow ( + property.Attributes, + GetStringIndex (property.Name), + GetBlobIndex (GetPropertySignature (property)))); + property.token = new MetadataToken (TokenType.Property, property_rid++); + + var method = property.GetMethod; + if (method != null) + AddSemantic (MethodSemanticsAttributes.Getter, property, method); + + method = property.SetMethod; + if (method != null) + AddSemantic (MethodSemanticsAttributes.Setter, property, method); + + if (property.HasOtherMethods) + AddOtherSemantic (property, property.OtherMethods); + + if (property.HasCustomAttributes) + AddCustomAttributes (property); + + if (property.HasConstant) + AddConstant (property, property.PropertyType); + } + + void AddOtherSemantic (IMetadataTokenProvider owner, Collection others) + { + for (int i = 0; i < others.Count; i++) + AddSemantic (MethodSemanticsAttributes.Other, owner, others [i]); + } + + void AddEvents (TypeDefinition type) + { + var events = type.Events; + + event_map_table.AddRow (new EventMapRow (type.token.RID, event_rid)); + + for (int i = 0; i < events.Count; i++) + AddEvent (events [i]); + } + + void AddEvent (EventDefinition @event) + { + event_table.AddRow (new EventRow ( + @event.Attributes, + GetStringIndex (@event.Name), + MakeCodedRID (GetTypeToken (@event.EventType), CodedIndex.TypeDefOrRef))); + @event.token = new MetadataToken (TokenType.Event, event_rid++); + + var method = @event.AddMethod; + if (method != null) + AddSemantic (MethodSemanticsAttributes.AddOn, @event, method); + + method = @event.InvokeMethod; + if (method != null) + AddSemantic (MethodSemanticsAttributes.Fire, @event, method); + + method = @event.RemoveMethod; + if (method != null) + AddSemantic (MethodSemanticsAttributes.RemoveOn, @event, method); + + if (@event.HasOtherMethods) + AddOtherSemantic (@event, @event.OtherMethods); + + if (@event.HasCustomAttributes) + AddCustomAttributes (@event); + } + + void AddSemantic (MethodSemanticsAttributes semantics, IMetadataTokenProvider provider, MethodDefinition method) + { + method.SemanticsAttributes = semantics; + var table = GetTable (Table.MethodSemantics); + + table.AddRow (new MethodSemanticsRow ( + semantics, + method.token.RID, + MakeCodedRID (provider, CodedIndex.HasSemantics))); + } + + void AddConstant (IConstantProvider owner, TypeReference type) + { + var constant = owner.Constant; + var etype = GetConstantType (type, constant); + + constant_table.AddRow (new ConstantRow ( + etype, + MakeCodedRID (owner.MetadataToken, CodedIndex.HasConstant), + GetBlobIndex (GetConstantSignature (etype, constant)))); + } + + static ElementType GetConstantType (TypeReference constant_type, object constant) + { + if (constant == null) + return ElementType.Class; + + var etype = constant_type.etype; + switch (etype) { + case ElementType.None: + var type = constant_type.CheckedResolve (); + if (type.IsEnum) + return GetConstantType (type.GetEnumUnderlyingType (), constant); + + return ElementType.Class; + case ElementType.String: + return ElementType.String; + case ElementType.Object: + return GetConstantType (constant.GetType ()); + case ElementType.Array: + case ElementType.SzArray: + case ElementType.MVar: + case ElementType.Var: + return ElementType.Class; + case ElementType.GenericInst: + var generic_instance = (GenericInstanceType) constant_type; + if (generic_instance.ElementType.IsTypeOf ("System", "Nullable`1")) + return GetConstantType (generic_instance.GenericArguments [0], constant); + + return GetConstantType (((TypeSpecification) constant_type).ElementType, constant); + case ElementType.CModOpt: + case ElementType.CModReqD: + case ElementType.ByRef: + case ElementType.Sentinel: + return GetConstantType (((TypeSpecification) constant_type).ElementType, constant); + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I: + case ElementType.I1: + case ElementType.I2: + case ElementType.I4: + case ElementType.I8: + case ElementType.U: + case ElementType.U1: + case ElementType.U2: + case ElementType.U4: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + return GetConstantType (constant.GetType ()); + default: + return etype; + } + } + + static ElementType GetConstantType (Type type) + { + switch (type.GetTypeCode ()) { + case TypeCode.Boolean: + return ElementType.Boolean; + case TypeCode.Byte: + return ElementType.U1; + case TypeCode.SByte: + return ElementType.I1; + case TypeCode.Char: + return ElementType.Char; + case TypeCode.Int16: + return ElementType.I2; + case TypeCode.UInt16: + return ElementType.U2; + case TypeCode.Int32: + return ElementType.I4; + case TypeCode.UInt32: + return ElementType.U4; + case TypeCode.Int64: + return ElementType.I8; + case TypeCode.UInt64: + return ElementType.U8; + case TypeCode.Single: + return ElementType.R4; + case TypeCode.Double: + return ElementType.R8; + case TypeCode.String: + return ElementType.String; + default: + throw new NotSupportedException (type.FullName); + } + } + + void AddCustomAttributes (ICustomAttributeProvider owner) + { + var custom_attributes = owner.CustomAttributes; + + for (int i = 0; i < custom_attributes.Count; i++) { + var attribute = custom_attributes [i]; + + var projection = WindowsRuntimeProjections.RemoveProjection (attribute); + + custom_attribute_table.AddRow (new CustomAttributeRow ( + MakeCodedRID (owner, CodedIndex.HasCustomAttribute), + MakeCodedRID (LookupToken (attribute.Constructor), CodedIndex.CustomAttributeType), + GetBlobIndex (GetCustomAttributeSignature (attribute)))); + + WindowsRuntimeProjections.ApplyProjection (attribute, projection); + } + } + + void AddSecurityDeclarations (ISecurityDeclarationProvider owner) + { + var declarations = owner.SecurityDeclarations; + + for (int i = 0; i < declarations.Count; i++) { + var declaration = declarations [i]; + + declsec_table.AddRow (new DeclSecurityRow ( + declaration.Action, + MakeCodedRID (owner, CodedIndex.HasDeclSecurity), + GetBlobIndex (GetSecurityDeclarationSignature (declaration)))); + } + } + + MetadataToken GetMemberRefToken (MemberReference member) + { + var projection = WindowsRuntimeProjections.RemoveProjection (member); + + var row = CreateMemberRefRow (member); + + MetadataToken token; + if (!member_ref_map.TryGetValue (row, out token)) + token = AddMemberReference (member, row); + + WindowsRuntimeProjections.ApplyProjection (member, projection); + + return token; + } + + MemberRefRow CreateMemberRefRow (MemberReference member) + { + return new MemberRefRow ( + MakeCodedRID (GetTypeToken (member.DeclaringType), CodedIndex.MemberRefParent), + GetStringIndex (member.Name), + GetBlobIndex (GetMemberRefSignature (member))); + } + + MetadataToken AddMemberReference (MemberReference member, MemberRefRow row) + { + member.token = new MetadataToken (TokenType.MemberRef, member_ref_table.AddRow (row)); + + var token = member.token; + member_ref_map.Add (row, token); + return token; + } + + MetadataToken GetMethodSpecToken (MethodSpecification method_spec) + { + var row = CreateMethodSpecRow (method_spec); + + MetadataToken token; + if (method_spec_map.TryGetValue (row, out token)) + return token; + + AddMethodSpecification (method_spec, row); + + return method_spec.token; + } + + void AddMethodSpecification (MethodSpecification method_spec, MethodSpecRow row) + { + method_spec.token = new MetadataToken (TokenType.MethodSpec, method_spec_table.AddRow (row)); + method_spec_map.Add (row, method_spec.token); + } + + MethodSpecRow CreateMethodSpecRow (MethodSpecification method_spec) + { + return new MethodSpecRow ( + MakeCodedRID (LookupToken (method_spec.ElementMethod), CodedIndex.MethodDefOrRef), + GetBlobIndex (GetMethodSpecSignature (method_spec))); + } + + SignatureWriter CreateSignatureWriter () + { + return new SignatureWriter (this); + } + + SignatureWriter GetMethodSpecSignature (MethodSpecification method_spec) + { + if (!method_spec.IsGenericInstance) + throw new NotSupportedException (); + + var generic_instance = (GenericInstanceMethod) method_spec; + + var signature = CreateSignatureWriter (); + signature.WriteByte (0x0a); + + signature.WriteGenericInstanceSignature (generic_instance); + + return signature; + } + + public uint AddStandAloneSignature (uint signature) + { + return (uint) standalone_sig_table.AddRow (signature); + } + + public uint GetLocalVariableBlobIndex (Collection variables) + { + return GetBlobIndex (GetVariablesSignature (variables)); + } + + public uint GetCallSiteBlobIndex (CallSite call_site) + { + return GetBlobIndex (GetMethodSignature (call_site)); + } + + public uint GetConstantTypeBlobIndex (TypeReference constant_type) + { + return GetBlobIndex (GetConstantTypeSignature (constant_type)); + } + + SignatureWriter GetVariablesSignature (Collection variables) + { + var signature = CreateSignatureWriter (); + signature.WriteByte (0x7); + signature.WriteCompressedUInt32 ((uint) variables.Count); + for (int i = 0; i < variables.Count; i++) + signature.WriteTypeSignature (variables [i].VariableType); + return signature; + } + + SignatureWriter GetConstantTypeSignature (TypeReference constant_type) + { + var signature = CreateSignatureWriter (); + signature.WriteByte (0x6); + signature.WriteTypeSignature (constant_type); + return signature; + } + + SignatureWriter GetFieldSignature (FieldReference field) + { + var signature = CreateSignatureWriter (); + signature.WriteByte (0x6); + signature.WriteTypeSignature (field.FieldType); + return signature; + } + + SignatureWriter GetMethodSignature (IMethodSignature method) + { + var signature = CreateSignatureWriter (); + signature.WriteMethodSignature (method); + return signature; + } + + SignatureWriter GetMemberRefSignature (MemberReference member) + { + var field = member as FieldReference; + if (field != null) + return GetFieldSignature (field); + + var method = member as MethodReference; + if (method != null) + return GetMethodSignature (method); + + throw new NotSupportedException (); + } + + SignatureWriter GetPropertySignature (PropertyDefinition property) + { + var signature = CreateSignatureWriter (); + byte calling_convention = 0x8; + if (property.HasThis) + calling_convention |= 0x20; + + uint param_count = 0; + Collection parameters = null; + + if (property.HasParameters) { + parameters = property.Parameters; + param_count = (uint) parameters.Count; + } + + signature.WriteByte (calling_convention); + signature.WriteCompressedUInt32 (param_count); + signature.WriteTypeSignature (property.PropertyType); + + if (param_count == 0) + return signature; + + for (int i = 0; i < param_count; i++) + signature.WriteTypeSignature (parameters [i].ParameterType); + + return signature; + } + + SignatureWriter GetTypeSpecSignature (TypeReference type) + { + var signature = CreateSignatureWriter (); + signature.WriteTypeSignature (type); + return signature; + } + + SignatureWriter GetConstantSignature (ElementType type, object value) + { + var signature = CreateSignatureWriter (); + + switch (type) { + case ElementType.Array: + case ElementType.SzArray: + case ElementType.Class: + case ElementType.Object: + case ElementType.None: + case ElementType.Var: + case ElementType.MVar: + signature.WriteInt32 (0); + break; + case ElementType.String: + signature.WriteConstantString ((string) value); + break; + default: + signature.WriteConstantPrimitive (value); + break; + } + + return signature; + } + + SignatureWriter GetCustomAttributeSignature (CustomAttribute attribute) + { + var signature = CreateSignatureWriter (); + if (!attribute.resolved) { + signature.WriteBytes (attribute.GetBlob ()); + return signature; + } + + signature.WriteUInt16 (0x0001); + + signature.WriteCustomAttributeConstructorArguments (attribute); + + signature.WriteCustomAttributeNamedArguments (attribute); + + return signature; + } + + SignatureWriter GetSecurityDeclarationSignature (SecurityDeclaration declaration) + { + var signature = CreateSignatureWriter (); + + if (!declaration.resolved) + signature.WriteBytes (declaration.GetBlob ()); + else if (module.Runtime < TargetRuntime.Net_2_0) + signature.WriteXmlSecurityDeclaration (declaration); + else + signature.WriteSecurityDeclaration (declaration); + + return signature; + } + + SignatureWriter GetMarshalInfoSignature (IMarshalInfoProvider owner) + { + var signature = CreateSignatureWriter (); + + signature.WriteMarshalInfo (owner.MarshalInfo); + + return signature; + } + + static Exception CreateForeignMemberException (MemberReference member) + { + return new ArgumentException (string.Format ("Member '{0}' is declared in another module and needs to be imported", member)); + } + + public MetadataToken LookupToken (IMetadataTokenProvider provider) + { + if (provider == null) + throw new ArgumentNullException (); + + if (metadata_builder != null) + return metadata_builder.LookupToken (provider); + + var member = provider as MemberReference; + if (member == null || member.Module != module) + throw CreateForeignMemberException (member); + + var token = provider.MetadataToken; + + switch (token.TokenType) { + case TokenType.TypeDef: + case TokenType.Method: + case TokenType.Field: + case TokenType.Event: + case TokenType.Property: + return token; + case TokenType.TypeRef: + case TokenType.TypeSpec: + case TokenType.GenericParam: + return GetTypeToken ((TypeReference) provider); + case TokenType.MethodSpec: + return GetMethodSpecToken ((MethodSpecification) provider); + case TokenType.MemberRef: + return GetMemberRefToken (member); + default: + throw new NotSupportedException (); + } + } + + public void AddMethodDebugInformation (MethodDebugInformation method_info) + { + if (method_info.HasSequencePoints) + AddSequencePoints (method_info); + + if (method_info.Scope != null) + AddLocalScope (method_info, method_info.Scope); + + if (method_info.StateMachineKickOffMethod != null) + AddStateMachineMethod (method_info); + + AddCustomDebugInformations (method_info.Method); + } + + void AddStateMachineMethod (MethodDebugInformation method_info) + { + state_machine_method_table.AddRow (new StateMachineMethodRow (method_info.Method.MetadataToken.RID, method_info.StateMachineKickOffMethod.MetadataToken.RID)); + } + + void AddLocalScope (MethodDebugInformation method_info, ScopeDebugInformation scope) + { + var rid = local_scope_table.AddRow (new LocalScopeRow ( + method_info.Method.MetadataToken.RID, + scope.import != null ? AddImportScope (scope.import) : 0, + local_variable_rid, + local_constant_rid, + (uint) scope.Start.Offset, + (uint) ((scope.End.IsEndOfMethod ? method_info.code_size : scope.End.Offset) - scope.Start.Offset))); + + scope.token = new MetadataToken (TokenType.LocalScope, rid); + + AddCustomDebugInformations (scope); + + if (scope.HasVariables) + AddLocalVariables (scope); + + if (scope.HasConstants) + AddLocalConstants (scope); + + for (int i = 0; i < scope.Scopes.Count; i++) + AddLocalScope (method_info, scope.Scopes [i]); + } + + void AddLocalVariables (ScopeDebugInformation scope) + { + for (int i = 0; i < scope.Variables.Count; i++) { + var variable = scope.Variables [i]; + local_variable_table.AddRow (new LocalVariableRow (variable.Attributes, (ushort) variable.Index, GetStringIndex (variable.Name))); + variable.token = new MetadataToken (TokenType.LocalVariable, local_variable_rid); + local_variable_rid++; + + AddCustomDebugInformations (variable); + } + } + + void AddLocalConstants (ScopeDebugInformation scope) + { + for (int i = 0; i < scope.Constants.Count; i++) { + var constant = scope.Constants [i]; + local_constant_table.AddRow (new LocalConstantRow (GetStringIndex (constant.Name), GetBlobIndex (GetConstantSignature(constant)))); + constant.token = new MetadataToken (TokenType.LocalConstant, local_constant_rid); + local_constant_rid++; + } + } + + SignatureWriter GetConstantSignature (ConstantDebugInformation constant) + { + var type = constant.ConstantType; + + var signature = CreateSignatureWriter (); + signature.WriteTypeSignature (type); + + if (type.IsTypeOf ("System", "Decimal")) { + var bits = decimal.GetBits ((decimal) constant.Value); + + var low = (uint) bits [0]; + var mid = (uint) bits [1]; + var high = (uint) bits [2]; + + var scale = (byte) (bits [3] >> 16); + var negative = (bits [3] & 0x80000000) != 0; + + signature.WriteByte ((byte) (scale | (negative ? 0x80 : 0x00))); + signature.WriteUInt32 (low); + signature.WriteUInt32 (mid); + signature.WriteUInt32 (high); + + return signature; + } + + if (type.IsTypeOf ("System", "DateTime")) { + var date = (DateTime) constant.Value; + signature.WriteInt64 (date.Ticks); + return signature; + } + + signature.WriteBytes (GetConstantSignature (type.etype, constant.Value)); + + return signature; + } + + public void AddCustomDebugInformations (ICustomDebugInformationProvider provider) + { + if (!provider.HasCustomDebugInformations) + return; + + var custom_infos = provider.CustomDebugInformations; + + for (int i = 0; i < custom_infos.Count; i++) { + var custom_info = custom_infos [i]; + switch (custom_info.Kind) { + case CustomDebugInformationKind.Binary: + var binary_info = (BinaryCustomDebugInformation) custom_info; + AddCustomDebugInformation (provider, binary_info, GetBlobIndex (binary_info.Data)); + break; + case CustomDebugInformationKind.AsyncMethodBody: + AddAsyncMethodBodyDebugInformation (provider, (AsyncMethodBodyDebugInformation) custom_info); + break; + case CustomDebugInformationKind.StateMachineScope: + AddStateMachineScopeDebugInformation (provider, (StateMachineScopeDebugInformation) custom_info); + break; + case CustomDebugInformationKind.EmbeddedSource: + AddEmbeddedSourceDebugInformation (provider, (EmbeddedSourceDebugInformation) custom_info); + break; + case CustomDebugInformationKind.SourceLink: + AddSourceLinkDebugInformation (provider, (SourceLinkDebugInformation) custom_info); + break; + default: + throw new NotImplementedException (); + } + } + } + + void AddStateMachineScopeDebugInformation (ICustomDebugInformationProvider provider, StateMachineScopeDebugInformation state_machine_scope) + { + var method_info = ((MethodDefinition) provider).DebugInformation; + + var signature = CreateSignatureWriter (); + + var scopes = state_machine_scope.Scopes; + + for (int i = 0; i < scopes.Count; i++) { + var scope = scopes [i]; + signature.WriteUInt32 ((uint) scope.Start.Offset); + + var end_offset = scope.End.IsEndOfMethod + ? method_info.code_size + : scope.End.Offset; + + signature.WriteUInt32 ((uint) (end_offset - scope.Start.Offset)); + } + + AddCustomDebugInformation (provider, state_machine_scope, signature); + } + + void AddAsyncMethodBodyDebugInformation (ICustomDebugInformationProvider provider, AsyncMethodBodyDebugInformation async_method) + { + var signature = CreateSignatureWriter (); + signature.WriteUInt32 ((uint) async_method.catch_handler.Offset + 1); + + if (!async_method.yields.IsNullOrEmpty ()) { + for (int i = 0; i < async_method.yields.Count; i++) { + signature.WriteUInt32 ((uint) async_method.yields [i].Offset); + signature.WriteUInt32 ((uint) async_method.resumes [i].Offset); + signature.WriteCompressedUInt32 (async_method.resume_methods [i].MetadataToken.RID); + } + } + + AddCustomDebugInformation (provider, async_method, signature); + } + + void AddEmbeddedSourceDebugInformation (ICustomDebugInformationProvider provider, EmbeddedSourceDebugInformation embedded_source) + { + var signature = CreateSignatureWriter (); + var content = embedded_source.content ?? Empty.Array; + if (embedded_source.compress) { + signature.WriteInt32 (content.Length); + + var decompressed_stream = new MemoryStream (content); + var content_stream = new MemoryStream (); + + using (var compress_stream = new DeflateStream (content_stream, CompressionMode.Compress, leaveOpen: true)) + decompressed_stream.CopyTo (compress_stream); + + signature.WriteBytes (content_stream.ToArray ()); + } else { + signature.WriteInt32 (0); + signature.WriteBytes (content); + } + + AddCustomDebugInformation (provider, embedded_source, signature); + } + + void AddSourceLinkDebugInformation (ICustomDebugInformationProvider provider, SourceLinkDebugInformation source_link) + { + var signature = CreateSignatureWriter (); + signature.WriteBytes (Encoding.UTF8.GetBytes (source_link.content)); + + AddCustomDebugInformation (provider, source_link, signature); + } + + void AddCustomDebugInformation (ICustomDebugInformationProvider provider, CustomDebugInformation custom_info, SignatureWriter signature) + { + AddCustomDebugInformation (provider, custom_info, GetBlobIndex (signature)); + } + + void AddCustomDebugInformation (ICustomDebugInformationProvider provider, CustomDebugInformation custom_info, uint blob_index) + { + var rid = custom_debug_information_table.AddRow (new CustomDebugInformationRow ( + MakeCodedRID (provider.MetadataToken, CodedIndex.HasCustomDebugInformation), + GetGuidIndex (custom_info.Identifier), + blob_index)); + + custom_info.token = new MetadataToken (TokenType.CustomDebugInformation, rid); + } + + uint AddImportScope (ImportDebugInformation import) + { + uint parent = 0; + if (import.Parent != null) + parent = AddImportScope (import.Parent); + + uint targets_index = 0; + if (import.HasTargets) { + var signature = CreateSignatureWriter (); + + for (int i = 0; i < import.Targets.Count; i++) + AddImportTarget (import.Targets [i], signature); + + targets_index = GetBlobIndex (signature); + } + + var row = new ImportScopeRow (parent, targets_index); + + MetadataToken import_token; + if (import_scope_map.TryGetValue (row, out import_token)) + return import_token.RID; + + import_token = new MetadataToken (TokenType.ImportScope, import_scope_table.AddRow (row)); + import_scope_map.Add (row, import_token); + + return import_token.RID; + } + + void AddImportTarget (ImportTarget target, SignatureWriter signature) + { + signature.WriteCompressedUInt32 ((uint)target.kind); + + switch (target.kind) { + case ImportTargetKind.ImportNamespace: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.@namespace)); + break; + case ImportTargetKind.ImportNamespaceInAssembly: + signature.WriteCompressedUInt32 (target.reference.MetadataToken.RID); + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.@namespace)); + break; + case ImportTargetKind.ImportType: + signature.WriteTypeToken (target.type); + break; + case ImportTargetKind.ImportXmlNamespaceWithAlias: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.alias)); + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.@namespace)); + break; + case ImportTargetKind.ImportAlias: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.alias)); + break; + case ImportTargetKind.DefineAssemblyAlias: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.alias)); + signature.WriteCompressedUInt32 (target.reference.MetadataToken.RID); + break; + case ImportTargetKind.DefineNamespaceAlias: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.alias)); + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.@namespace)); + break; + case ImportTargetKind.DefineNamespaceInAssemblyAlias: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.alias)); + signature.WriteCompressedUInt32 (target.reference.MetadataToken.RID); + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.@namespace)); + break; + case ImportTargetKind.DefineTypeAlias: + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (target.alias)); + signature.WriteTypeToken (target.type); + break; + } + } + + uint GetUTF8StringBlobIndex (string s) + { + return GetBlobIndex (Encoding.UTF8.GetBytes (s)); + } + + public MetadataToken GetDocumentToken (Document document) + { + MetadataToken token; + if (document_map.TryGetValue (document.Url, out token)) + return token; + + token = new MetadataToken (TokenType.Document, document_table.AddRow ( + new DocumentRow (GetBlobIndex (GetDocumentNameSignature (document)), + GetGuidIndex (document.HashAlgorithm.ToGuid ()), + GetBlobIndex (document.Hash), + GetGuidIndex (document.Language.ToGuid ())))); + + document.token = token; + + AddCustomDebugInformations (document); + + document_map.Add (document.Url, token); + + return token; + } + + SignatureWriter GetDocumentNameSignature (Document document) + { + var name = document.Url; + var signature = CreateSignatureWriter (); + + char separator; + if (!TryGetDocumentNameSeparator (name, out separator)) { + signature.WriteByte (0); + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (name)); + return signature; + } + + signature.WriteByte ((byte) separator); + var parts = name.Split (new [] { separator }); + for (int i = 0; i < parts.Length; i++) { + if (parts [i] == String.Empty) + signature.WriteCompressedUInt32 (0); + else + signature.WriteCompressedUInt32 (GetUTF8StringBlobIndex (parts [i])); + } + + return signature; + } + + static bool TryGetDocumentNameSeparator (string path, out char separator) + { + const char unix = '/'; + const char win = '\\'; + const char zero = (char) 0; + + separator = zero; + if (string.IsNullOrEmpty (path)) + return false; + + int unix_count = 0; + int win_count = 0; + + for (int i = 0; i < path.Length; i++) { + if (path [i] == unix) + unix_count++; + else if (path [i] == win) + win_count++; + } + + if (unix_count == 0 && win_count == 0) + return false; + + if (unix_count >= win_count) { + separator = unix; + return true; + } + + separator = win; + return true; + } + + void AddSequencePoints (MethodDebugInformation info) + { + var rid = info.Method.MetadataToken.RID; + + Document document; + if (info.TryGetUniqueDocument (out document)) + method_debug_information_table.rows [rid - 1].Col1 = GetDocumentToken (document).RID; + + var signature = CreateSignatureWriter (); + signature.WriteSequencePoints (info); + + method_debug_information_table.rows [rid - 1].Col2 = GetBlobIndex (signature); + } + } + + sealed class SignatureWriter : ByteBuffer { + + readonly MetadataBuilder metadata; + + public SignatureWriter (MetadataBuilder metadata) + : base (6) + { + this.metadata = metadata; + } + + public void WriteElementType (ElementType element_type) + { + WriteByte ((byte) element_type); + } + + public void WriteUTF8String (string @string) + { + if (@string == null) { + WriteByte (0xff); + return; + } + + var bytes = Encoding.UTF8.GetBytes (@string); + WriteCompressedUInt32 ((uint) bytes.Length); + WriteBytes (bytes); + } + + public void WriteMethodSignature (IMethodSignature method) + { + byte calling_convention = (byte) method.CallingConvention; + if (method.HasThis) + calling_convention |= 0x20; + if (method.ExplicitThis) + calling_convention |= 0x40; + + var generic_provider = method as IGenericParameterProvider; + var generic_arity = generic_provider != null && generic_provider.HasGenericParameters + ? generic_provider.GenericParameters.Count + : 0; + + if (generic_arity > 0) + calling_convention |= 0x10; + + var param_count = method.HasParameters ? method.Parameters.Count : 0; + + WriteByte (calling_convention); + + if (generic_arity > 0) + WriteCompressedUInt32 ((uint) generic_arity); + + WriteCompressedUInt32 ((uint) param_count); + WriteTypeSignature (method.ReturnType); + + if (param_count == 0) + return; + + var parameters = method.Parameters; + + for (int i = 0; i < param_count; i++) + WriteTypeSignature (parameters [i].ParameterType); + } + + uint MakeTypeDefOrRefCodedRID (TypeReference type) + { + return CodedIndex.TypeDefOrRef.CompressMetadataToken (metadata.LookupToken (type)); + } + + public void WriteTypeToken (TypeReference type) + { + WriteCompressedUInt32 (MakeTypeDefOrRefCodedRID (type)); + } + + public void WriteTypeSignature (TypeReference type) + { + if (type == null) + throw new ArgumentNullException (); + + var etype = type.etype; + + switch (etype) { + case ElementType.MVar: + case ElementType.Var: { + var generic_parameter = (GenericParameter) type; + + WriteElementType (etype); + var position = generic_parameter.Position; + if (position == -1) + throw new NotSupportedException (); + + WriteCompressedUInt32 ((uint) position); + break; + } + + case ElementType.GenericInst: { + var generic_instance = (GenericInstanceType) type; + WriteElementType (ElementType.GenericInst); + WriteElementType (generic_instance.IsValueType ? ElementType.ValueType : ElementType.Class); + WriteCompressedUInt32 (MakeTypeDefOrRefCodedRID (generic_instance.ElementType)); + + WriteGenericInstanceSignature (generic_instance); + break; + } + + case ElementType.Ptr: + case ElementType.ByRef: + case ElementType.Pinned: + case ElementType.Sentinel: { + var type_spec = (TypeSpecification) type; + WriteElementType (etype); + WriteTypeSignature (type_spec.ElementType); + break; + } + + case ElementType.FnPtr: { + var fptr = (FunctionPointerType) type; + WriteElementType (ElementType.FnPtr); + WriteMethodSignature (fptr); + break; + } + + case ElementType.CModOpt: + case ElementType.CModReqD: { + var modifier = (IModifierType) type; + WriteModifierSignature (etype, modifier); + break; + } + + case ElementType.Array: { + var array = (ArrayType) type; + if (!array.IsVector) { + WriteArrayTypeSignature (array); + break; + } + + WriteElementType (ElementType.SzArray); + WriteTypeSignature (array.ElementType); + break; + } + + case ElementType.None: { + WriteElementType (type.IsValueType ? ElementType.ValueType : ElementType.Class); + WriteCompressedUInt32 (MakeTypeDefOrRefCodedRID (type)); + break; + } + + default: + if (!TryWriteElementType (type)) + throw new NotSupportedException (); + + break; + + } + } + + void WriteArrayTypeSignature (ArrayType array) + { + WriteElementType (ElementType.Array); + WriteTypeSignature (array.ElementType); + + var dimensions = array.Dimensions; + var rank = dimensions.Count; + + WriteCompressedUInt32 ((uint) rank); + + var sized = 0; + var lbounds = 0; + + for (int i = 0; i < rank; i++) { + var dimension = dimensions [i]; + + if (dimension.UpperBound.HasValue) { + sized++; + lbounds++; + } else if (dimension.LowerBound.HasValue) + lbounds++; + } + + var sizes = new int [sized]; + var low_bounds = new int [lbounds]; + + for (int i = 0; i < lbounds; i++) { + var dimension = dimensions [i]; + low_bounds [i] = dimension.LowerBound.GetValueOrDefault (); + if (dimension.UpperBound.HasValue) + sizes [i] = dimension.UpperBound.Value - low_bounds [i] + 1; + } + + WriteCompressedUInt32 ((uint) sized); + for (int i = 0; i < sized; i++) + WriteCompressedUInt32 ((uint) sizes [i]); + + WriteCompressedUInt32 ((uint) lbounds); + for (int i = 0; i < lbounds; i++) + WriteCompressedInt32 (low_bounds [i]); + } + + public void WriteGenericInstanceSignature (IGenericInstance instance) + { + var generic_arguments = instance.GenericArguments; + var arity = generic_arguments.Count; + + WriteCompressedUInt32 ((uint) arity); + for (int i = 0; i < arity; i++) + WriteTypeSignature (generic_arguments [i]); + } + + void WriteModifierSignature (ElementType element_type, IModifierType type) + { + WriteElementType (element_type); + WriteCompressedUInt32 (MakeTypeDefOrRefCodedRID (type.ModifierType)); + WriteTypeSignature (type.ElementType); + } + + bool TryWriteElementType (TypeReference type) + { + var element = type.etype; + + if (element == ElementType.None) + return false; + + WriteElementType (element); + return true; + } + + public void WriteConstantString (string value) + { + if (value != null) + WriteBytes (Encoding.Unicode.GetBytes (value)); + else + WriteByte (0xff); + } + + public void WriteConstantPrimitive (object value) + { + WritePrimitiveValue (value); + } + + public void WriteCustomAttributeConstructorArguments (CustomAttribute attribute) + { + if (!attribute.HasConstructorArguments) + return; + + var arguments = attribute.ConstructorArguments; + var parameters = attribute.Constructor.Parameters; + + if (parameters.Count != arguments.Count) + throw new InvalidOperationException (); + + for (int i = 0; i < arguments.Count; i++) + WriteCustomAttributeFixedArgument (parameters [i].ParameterType, arguments [i]); + } + + void WriteCustomAttributeFixedArgument (TypeReference type, CustomAttributeArgument argument) + { + if (type.IsArray) { + WriteCustomAttributeFixedArrayArgument ((ArrayType) type, argument); + return; + } + + WriteCustomAttributeElement (type, argument); + } + + void WriteCustomAttributeFixedArrayArgument (ArrayType type, CustomAttributeArgument argument) + { + var values = argument.Value as CustomAttributeArgument []; + + if (values == null) { + WriteUInt32 (0xffffffff); + return; + } + + WriteInt32 (values.Length); + + if (values.Length == 0) + return; + + var element_type = type.ElementType; + + for (int i = 0; i < values.Length; i++) + WriteCustomAttributeElement (element_type, values [i]); + } + + void WriteCustomAttributeElement (TypeReference type, CustomAttributeArgument argument) + { + if (type.IsArray) { + WriteCustomAttributeFixedArrayArgument ((ArrayType) type, argument); + return; + } + + if (type.etype == ElementType.Object) { + argument = (CustomAttributeArgument) argument.Value; + type = argument.Type; + + WriteCustomAttributeFieldOrPropType (type); + WriteCustomAttributeElement (type, argument); + return; + } + + WriteCustomAttributeValue (type, argument.Value); + } + + void WriteCustomAttributeValue (TypeReference type, object value) + { + var etype = type.etype; + + switch (etype) { + case ElementType.String: + var @string = (string) value; + if (@string == null) + WriteByte (0xff); + else + WriteUTF8String (@string); + break; + case ElementType.None: + if (type.IsTypeOf ("System", "Type")) + WriteTypeReference ((TypeReference) value); + else + WriteCustomAttributeEnumValue (type, value); + break; + default: + WritePrimitiveValue (value); + break; + } + } + + void WritePrimitiveValue (object value) + { + if (value == null) + throw new ArgumentNullException (); + + switch (value.GetType ().GetTypeCode ()) { + case TypeCode.Boolean: + WriteByte ((byte) (((bool) value) ? 1 : 0)); + break; + case TypeCode.Byte: + WriteByte ((byte) value); + break; + case TypeCode.SByte: + WriteSByte ((sbyte) value); + break; + case TypeCode.Int16: + WriteInt16 ((short) value); + break; + case TypeCode.UInt16: + WriteUInt16 ((ushort) value); + break; + case TypeCode.Char: + WriteInt16 ((short) (char) value); + break; + case TypeCode.Int32: + WriteInt32 ((int) value); + break; + case TypeCode.UInt32: + WriteUInt32 ((uint) value); + break; + case TypeCode.Single: + WriteSingle ((float) value); + break; + case TypeCode.Int64: + WriteInt64 ((long) value); + break; + case TypeCode.UInt64: + WriteUInt64 ((ulong) value); + break; + case TypeCode.Double: + WriteDouble ((double) value); + break; + default: + throw new NotSupportedException (value.GetType ().FullName); + } + } + + void WriteCustomAttributeEnumValue (TypeReference enum_type, object value) + { + var type = enum_type.CheckedResolve (); + if (!type.IsEnum) + throw new ArgumentException (); + + WriteCustomAttributeValue (type.GetEnumUnderlyingType (), value); + } + + void WriteCustomAttributeFieldOrPropType (TypeReference type) + { + if (type.IsArray) { + var array = (ArrayType) type; + WriteElementType (ElementType.SzArray); + WriteCustomAttributeFieldOrPropType (array.ElementType); + return; + } + + var etype = type.etype; + + switch (etype) { + case ElementType.Object: + WriteElementType (ElementType.Boxed); + return; + case ElementType.None: + if (type.IsTypeOf ("System", "Type")) + WriteElementType (ElementType.Type); + else { + WriteElementType (ElementType.Enum); + WriteTypeReference (type); + } + return; + default: + WriteElementType (etype); + return; + } + } + + public void WriteCustomAttributeNamedArguments (CustomAttribute attribute) + { + var count = GetNamedArgumentCount (attribute); + + WriteUInt16 ((ushort) count); + + if (count == 0) + return; + + WriteICustomAttributeNamedArguments (attribute); + } + + static int GetNamedArgumentCount (ICustomAttribute attribute) + { + int count = 0; + + if (attribute.HasFields) + count += attribute.Fields.Count; + + if (attribute.HasProperties) + count += attribute.Properties.Count; + + return count; + } + + void WriteICustomAttributeNamedArguments (ICustomAttribute attribute) + { + if (attribute.HasFields) + WriteCustomAttributeNamedArguments (0x53, attribute.Fields); + + if (attribute.HasProperties) + WriteCustomAttributeNamedArguments (0x54, attribute.Properties); + } + + void WriteCustomAttributeNamedArguments (byte kind, Collection named_arguments) + { + for (int i = 0; i < named_arguments.Count; i++) + WriteCustomAttributeNamedArgument (kind, named_arguments [i]); + } + + void WriteCustomAttributeNamedArgument (byte kind, CustomAttributeNamedArgument named_argument) + { + var argument = named_argument.Argument; + + WriteByte (kind); + WriteCustomAttributeFieldOrPropType (argument.Type); + WriteUTF8String (named_argument.Name); + WriteCustomAttributeFixedArgument (argument.Type, argument); + } + + void WriteSecurityAttribute (SecurityAttribute attribute) + { + WriteTypeReference (attribute.AttributeType); + + var count = GetNamedArgumentCount (attribute); + + if (count == 0) { + WriteCompressedUInt32 (1); // length + WriteCompressedUInt32 (0); // count + return; + } + + var buffer = new SignatureWriter (metadata); + buffer.WriteCompressedUInt32 ((uint) count); + buffer.WriteICustomAttributeNamedArguments (attribute); + + WriteCompressedUInt32 ((uint) buffer.length); + WriteBytes (buffer); + } + + public void WriteSecurityDeclaration (SecurityDeclaration declaration) + { + WriteByte ((byte) '.'); + + var attributes = declaration.security_attributes; + if (attributes == null) + throw new NotSupportedException (); + + WriteCompressedUInt32 ((uint) attributes.Count); + + for (int i = 0; i < attributes.Count; i++) + WriteSecurityAttribute (attributes [i]); + } + + public void WriteXmlSecurityDeclaration (SecurityDeclaration declaration) + { + var xml = GetXmlSecurityDeclaration (declaration); + if (xml == null) + throw new NotSupportedException (); + + WriteBytes (Encoding.Unicode.GetBytes (xml)); + } + + static string GetXmlSecurityDeclaration (SecurityDeclaration declaration) + { + if (declaration.security_attributes == null || declaration.security_attributes.Count != 1) + return null; + + var attribute = declaration.security_attributes [0]; + + if (!attribute.AttributeType.IsTypeOf ("System.Security.Permissions", "PermissionSetAttribute")) + return null; + + if (attribute.properties == null || attribute.properties.Count != 1) + return null; + + var property = attribute.properties [0]; + if (property.Name != "XML") + return null; + + return (string) property.Argument.Value; + } + + void WriteTypeReference (TypeReference type) + { + WriteUTF8String (TypeParser.ToParseable (type, top_level: false)); + } + + public void WriteMarshalInfo (MarshalInfo marshal_info) + { + WriteNativeType (marshal_info.native); + + switch (marshal_info.native) { + case NativeType.Array: { + var array = (ArrayMarshalInfo) marshal_info; + if (array.element_type != NativeType.None) + WriteNativeType (array.element_type); + if (array.size_parameter_index > -1) + WriteCompressedUInt32 ((uint) array.size_parameter_index); + if (array.size > -1) + WriteCompressedUInt32 ((uint) array.size); + if (array.size_parameter_multiplier > -1) + WriteCompressedUInt32 ((uint) array.size_parameter_multiplier); + return; + } + case NativeType.SafeArray: { + var array = (SafeArrayMarshalInfo) marshal_info; + if (array.element_type != VariantType.None) + WriteVariantType (array.element_type); + return; + } + case NativeType.FixedArray: { + var array = (FixedArrayMarshalInfo) marshal_info; + if (array.size > -1) + WriteCompressedUInt32 ((uint) array.size); + if (array.element_type != NativeType.None) + WriteNativeType (array.element_type); + return; + } + case NativeType.FixedSysString: + var sys_string = (FixedSysStringMarshalInfo) marshal_info; + if (sys_string.size > -1) + WriteCompressedUInt32 ((uint) sys_string.size); + return; + case NativeType.CustomMarshaler: + var marshaler = (CustomMarshalInfo) marshal_info; + WriteUTF8String (marshaler.guid != Guid.Empty ? marshaler.guid.ToString () : string.Empty); + WriteUTF8String (marshaler.unmanaged_type); + WriteTypeReference (marshaler.managed_type); + WriteUTF8String (marshaler.cookie); + return; + } + } + + void WriteNativeType (NativeType native) + { + WriteByte ((byte) native); + } + + void WriteVariantType (VariantType variant) + { + WriteByte ((byte) variant); + } + + public void WriteSequencePoints (MethodDebugInformation info) + { + var start_line = -1; + var start_column = -1; + + WriteCompressedUInt32 (info.local_var_token.RID); + + Document previous_document; + if (!info.TryGetUniqueDocument (out previous_document)) + previous_document = null; + + for (int i = 0; i < info.SequencePoints.Count; i++) { + var sequence_point = info.SequencePoints [i]; + + var document = sequence_point.Document; + if (previous_document != document) { + var document_token = metadata.GetDocumentToken (document); + + if (previous_document != null) + WriteCompressedUInt32 (0); + + WriteCompressedUInt32 (document_token.RID); + previous_document = document; + } + + if (i > 0) + WriteCompressedUInt32 ((uint) (sequence_point.Offset - info.SequencePoints [i - 1].Offset)); + else + WriteCompressedUInt32 ((uint) sequence_point.Offset); + + if (sequence_point.IsHidden) { + WriteInt16 (0); + continue; + } + + var delta_lines = sequence_point.EndLine - sequence_point.StartLine; + var delta_columns = sequence_point.EndColumn - sequence_point.StartColumn; + + WriteCompressedUInt32 ((uint) delta_lines); + + if (delta_lines == 0) + WriteCompressedUInt32((uint) delta_columns); + else + WriteCompressedInt32 (delta_columns); + + if (start_line < 0) { + WriteCompressedUInt32 ((uint) sequence_point.StartLine); + WriteCompressedUInt32 ((uint) sequence_point.StartColumn); + } else { + WriteCompressedInt32 (sequence_point.StartLine - start_line); + WriteCompressedInt32 (sequence_point.StartColumn - start_column); + } + + start_line = sequence_point.StartLine; + start_column = sequence_point.StartColumn; + } + } + } + +#endif + + static partial class Mixin { + + public static bool TryGetUniqueDocument (this MethodDebugInformation info, out Document document) + { + document = info.SequencePoints [0].Document; + + for (int i = 1; i < info.SequencePoints.Count; i++) { + var sequence_point = info.SequencePoints [i]; + if (sequence_point.Document != document) + return false; + } + + return true; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs.meta new file mode 100644 index 0000000..5a55701 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/AssemblyWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8151404cfcbec6f45a63b0d221dd63e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs new file mode 100644 index 0000000..c10a826 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs @@ -0,0 +1,410 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public delegate AssemblyDefinition AssemblyResolveEventHandler (object sender, AssemblyNameReference reference); + + public sealed class AssemblyResolveEventArgs : EventArgs { + + readonly AssemblyNameReference reference; + + public AssemblyNameReference AssemblyReference { + get { return reference; } + } + + public AssemblyResolveEventArgs (AssemblyNameReference reference) + { + this.reference = reference; + } + } + +#if !NET_CORE + [Serializable] +#endif + public sealed class AssemblyResolutionException : FileNotFoundException { + + readonly AssemblyNameReference reference; + + public AssemblyNameReference AssemblyReference { + get { return reference; } + } + + public AssemblyResolutionException (AssemblyNameReference reference) + : this (reference, null) + { + } + + public AssemblyResolutionException (AssemblyNameReference reference, Exception innerException) + : base (string.Format ("Failed to resolve assembly: '{0}'", reference), innerException) + { + this.reference = reference; + } + +#if !NET_CORE + AssemblyResolutionException ( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base (info, context) + { + } +#endif + } + + public abstract class BaseAssemblyResolver : IAssemblyResolver { + + static readonly bool on_mono = Type.GetType ("Mono.Runtime") != null; + + readonly Collection directories; + +#if NET_CORE + // Maps file names of available trusted platform assemblies to their full paths. + // Internal for testing. + internal static readonly Lazy> TrustedPlatformAssemblies = new Lazy> (CreateTrustedPlatformAssemblyMap); +#else + Collection gac_paths; +#endif + + public void AddSearchDirectory (string directory) + { + directories.Add (directory); + } + + public void RemoveSearchDirectory (string directory) + { + directories.Remove (directory); + } + + public string [] GetSearchDirectories () + { + var directories = new string [this.directories.size]; + Array.Copy (this.directories.items, directories, directories.Length); + return directories; + } + + public event AssemblyResolveEventHandler ResolveFailure; + + protected BaseAssemblyResolver () + { + directories = new Collection (2) { ".", "bin" }; + } + + AssemblyDefinition GetAssembly (string file, ReaderParameters parameters) + { + if (parameters.AssemblyResolver == null) + parameters.AssemblyResolver = this; + + return ModuleDefinition.ReadModule (file, parameters).Assembly; + } + + public virtual AssemblyDefinition Resolve (AssemblyNameReference name) + { + return Resolve (name, new ReaderParameters ()); + } + + public virtual AssemblyDefinition Resolve (AssemblyNameReference name, ReaderParameters parameters) + { + Mixin.CheckName (name); + Mixin.CheckParameters (parameters); + + var assembly = SearchDirectory (name, directories, parameters); + if (assembly != null) + return assembly; + + if (name.IsRetargetable) { + // if the reference is retargetable, zero it + name = new AssemblyNameReference (name.Name, Mixin.ZeroVersion) { + PublicKeyToken = Empty.Array, + }; + } + +#if NET_CORE + assembly = SearchTrustedPlatformAssemblies (name, parameters); + if (assembly != null) + return assembly; +#else + var framework_dir = Path.GetDirectoryName (typeof (object).Module.FullyQualifiedName); + var framework_dirs = on_mono + ? new [] { framework_dir, Path.Combine (framework_dir, "Facades") } + : new [] { framework_dir }; + + if (IsZero (name.Version)) { + assembly = SearchDirectory (name, framework_dirs, parameters); + if (assembly != null) + return assembly; + } + + if (name.Name == "mscorlib") { + assembly = GetCorlib (name, parameters); + if (assembly != null) + return assembly; + } + + assembly = GetAssemblyInGac (name, parameters); + if (assembly != null) + return assembly; + + assembly = SearchDirectory (name, framework_dirs, parameters); + if (assembly != null) + return assembly; +#endif + if (ResolveFailure != null) { + assembly = ResolveFailure (this, name); + if (assembly != null) + return assembly; + } + + throw new AssemblyResolutionException (name); + } + +#if NET_CORE + AssemblyDefinition SearchTrustedPlatformAssemblies (AssemblyNameReference name, ReaderParameters parameters) + { + if (name.IsWindowsRuntime) + return null; + + if (TrustedPlatformAssemblies.Value.TryGetValue (name.Name, out string path)) + return GetAssembly (path, parameters); + + return null; + } + + static Dictionary CreateTrustedPlatformAssemblyMap () + { + var result = new Dictionary (StringComparer.OrdinalIgnoreCase); + + string paths; + + try { + // AppContext is only available on platforms that implement .NET Standard 1.6 + var appContextType = Type.GetType ("System.AppContext, System.AppContext, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", throwOnError: false); + var getData = appContextType?.GetTypeInfo ().GetDeclaredMethod ("GetData"); + paths = (string) getData?.Invoke (null, new [] { "TRUSTED_PLATFORM_ASSEMBLIES" }); + } catch { + paths = null; + } + + if (paths == null) + return result; + + foreach (var path in paths.Split (Path.PathSeparator)) + if (string.Equals (Path.GetExtension (path), ".dll", StringComparison.OrdinalIgnoreCase)) + result [Path.GetFileNameWithoutExtension (path)] = path; + + return result; + } +#endif + + protected virtual AssemblyDefinition SearchDirectory (AssemblyNameReference name, IEnumerable directories, ReaderParameters parameters) + { + var extensions = name.IsWindowsRuntime ? new [] { ".winmd", ".dll" } : new [] { ".exe", ".dll" }; + foreach (var directory in directories) { + foreach (var extension in extensions) { + string file = Path.Combine (directory, name.Name + extension); + if (!File.Exists (file)) + continue; + try { + return GetAssembly (file, parameters); + } catch (System.BadImageFormatException) { + continue; + } + } + } + + return null; + } + + static bool IsZero (Version version) + { + return version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0; + } + +#if !NET_CORE + AssemblyDefinition GetCorlib (AssemblyNameReference reference, ReaderParameters parameters) + { + var version = reference.Version; + var corlib = typeof (object).Assembly.GetName (); + if (corlib.Version == version || IsZero (version)) + return GetAssembly (typeof (object).Module.FullyQualifiedName, parameters); + + var path = Directory.GetParent ( + Directory.GetParent ( + typeof (object).Module.FullyQualifiedName).FullName + ).FullName; + + if (on_mono) { + if (version.Major == 1) + path = Path.Combine (path, "1.0"); + else if (version.Major == 2) { + if (version.MajorRevision == 5) + path = Path.Combine (path, "2.1"); + else + path = Path.Combine (path, "2.0"); + } else if (version.Major == 4) + path = Path.Combine (path, "4.0"); + else + throw new NotSupportedException ("Version not supported: " + version); + } else { + switch (version.Major) { + case 1: + if (version.MajorRevision == 3300) + path = Path.Combine (path, "v1.0.3705"); + else + path = Path.Combine (path, "v1.1.4322"); + break; + case 2: + path = Path.Combine (path, "v2.0.50727"); + break; + case 4: + path = Path.Combine (path, "v4.0.30319"); + break; + default: + throw new NotSupportedException ("Version not supported: " + version); + } + } + + var file = Path.Combine (path, "mscorlib.dll"); + if (File.Exists (file)) + return GetAssembly (file, parameters); + + if (on_mono && Directory.Exists (path + "-api")) { + file = Path.Combine (path + "-api", "mscorlib.dll"); + if (File.Exists (file)) + return GetAssembly (file, parameters); + } + + return null; + } + + static Collection GetGacPaths () + { + if (on_mono) + return GetDefaultMonoGacPaths (); + + var paths = new Collection (2); + var windir = Environment.GetEnvironmentVariable ("WINDIR"); + if (windir == null) + return paths; + + paths.Add (Path.Combine (windir, "assembly")); + paths.Add (Path.Combine (windir, Path.Combine ("Microsoft.NET", "assembly"))); + return paths; + } + + static Collection GetDefaultMonoGacPaths () + { + var paths = new Collection (1); + var gac = GetCurrentMonoGac (); + if (gac != null) + paths.Add (gac); + + var gac_paths_env = Environment.GetEnvironmentVariable ("MONO_GAC_PREFIX"); + if (string.IsNullOrEmpty (gac_paths_env)) + return paths; + + var prefixes = gac_paths_env.Split (Path.PathSeparator); + foreach (var prefix in prefixes) { + if (string.IsNullOrEmpty (prefix)) + continue; + + var gac_path = Path.Combine (Path.Combine (Path.Combine (prefix, "lib"), "mono"), "gac"); + if (Directory.Exists (gac_path) && !paths.Contains (gac)) + paths.Add (gac_path); + } + + return paths; + } + + static string GetCurrentMonoGac () + { + return Path.Combine ( + Directory.GetParent ( + Path.GetDirectoryName (typeof (object).Module.FullyQualifiedName)).FullName, + "gac"); + } + + AssemblyDefinition GetAssemblyInGac (AssemblyNameReference reference, ReaderParameters parameters) + { + if (reference.PublicKeyToken == null || reference.PublicKeyToken.Length == 0) + return null; + + if (gac_paths == null) + gac_paths = GetGacPaths (); + + if (on_mono) + return GetAssemblyInMonoGac (reference, parameters); + + return GetAssemblyInNetGac (reference, parameters); + } + + AssemblyDefinition GetAssemblyInMonoGac (AssemblyNameReference reference, ReaderParameters parameters) + { + for (int i = 0; i < gac_paths.Count; i++) { + var gac_path = gac_paths [i]; + var file = GetAssemblyFile (reference, string.Empty, gac_path); + if (File.Exists (file)) + return GetAssembly (file, parameters); + } + + return null; + } + + AssemblyDefinition GetAssemblyInNetGac (AssemblyNameReference reference, ReaderParameters parameters) + { + var gacs = new [] { "GAC_MSIL", "GAC_32", "GAC_64", "GAC" }; + var prefixes = new [] { string.Empty, "v4.0_" }; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < gacs.Length; j++) { + var gac = Path.Combine (gac_paths [i], gacs [j]); + var file = GetAssemblyFile (reference, prefixes [i], gac); + if (Directory.Exists (gac) && File.Exists (file)) + return GetAssembly (file, parameters); + } + } + + return null; + } +#endif + static string GetAssemblyFile (AssemblyNameReference reference, string prefix, string gac) + { + var gac_folder = new StringBuilder () + .Append (prefix) + .Append (reference.Version) + .Append ("__"); + + for (int i = 0; i < reference.PublicKeyToken.Length; i++) + gac_folder.Append (reference.PublicKeyToken [i].ToString ("x2")); + + return Path.Combine ( + Path.Combine ( + Path.Combine (gac, reference.Name), gac_folder.ToString ()), + reference.Name + ".dll"); + } + + public void Dispose () + { + Dispose (true); + GC.SuppressFinalize (this); + } + + protected virtual void Dispose (bool disposing) + { + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs.meta new file mode 100644 index 0000000..70b01f8 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/BaseAssemblyResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c03608b614642e4081d674d40a1028c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs new file mode 100644 index 0000000..ebb108f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs @@ -0,0 +1,106 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class CallSite : IMethodSignature { + + readonly MethodReference signature; + + public bool HasThis { + get { return signature.HasThis; } + set { signature.HasThis = value; } + } + + public bool ExplicitThis { + get { return signature.ExplicitThis; } + set { signature.ExplicitThis = value; } + } + + public MethodCallingConvention CallingConvention { + get { return signature.CallingConvention; } + set { signature.CallingConvention = value; } + } + + public bool HasParameters { + get { return signature.HasParameters; } + } + + public Collection Parameters { + get { return signature.Parameters; } + } + + public TypeReference ReturnType { + get { return signature.MethodReturnType.ReturnType; } + set { signature.MethodReturnType.ReturnType = value; } + } + + public MethodReturnType MethodReturnType { + get { return signature.MethodReturnType; } + } + + public string Name { + get { return string.Empty; } + set { throw new InvalidOperationException (); } + } + + public string Namespace { + get { return string.Empty; } + set { throw new InvalidOperationException (); } + } + + public ModuleDefinition Module { + get { return ReturnType.Module; } + } + + public IMetadataScope Scope { + get { return signature.ReturnType.Scope; } + } + + public MetadataToken MetadataToken { + get { return signature.token; } + set { signature.token = value; } + } + + public string FullName { + get { + var signature = new StringBuilder (); + signature.Append (ReturnType.FullName); + this.MethodSignatureFullName (signature); + return signature.ToString (); + } + } + + internal CallSite () + { + this.signature = new MethodReference (); + this.signature.token = new MetadataToken (TokenType.Signature, 0); + } + + public CallSite (TypeReference returnType) + : this () + { + if (returnType == null) + throw new ArgumentNullException ("returnType"); + + this.signature.ReturnType = returnType; + } + + public override string ToString () + { + return FullName; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs.meta new file mode 100644 index 0000000..9e99abf --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CallSite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cc886c40e1d3ba46b828e78aa927732 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs new file mode 100644 index 0000000..3b80461 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs @@ -0,0 +1,5 @@ +static class Consts +{ + public const string AssemblyName = "Mono.Cecil"; + public const string PublicKey = "00240000048000009400000006020000002400005253413100040000010001002b5c9f7f04346c324a3176f8d3ee823bbf2d60efdbc35f86fd9e65ea3e6cd11bcdcba3a353e55133c8ac5c4caaba581b2c6dfff2cc2d0edc43959ddb86b973300a479a82419ef489c3225f1fe429a708507bd515835160e10bc743d20ca33ab9570cfd68d479fcf0bc797a763bec5d1000f0159ef619e709d915975e87beebaf"; +} \ No newline at end of file diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs.meta new file mode 100644 index 0000000..37e1379 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Consts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac633e80921079941a7be72ca487b5d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs new file mode 100644 index 0000000..d64411f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs @@ -0,0 +1,205 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Diagnostics; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public struct CustomAttributeArgument { + + readonly TypeReference type; + readonly object value; + + public TypeReference Type { + get { return type; } + } + + public object Value { + get { return value; } + } + + public CustomAttributeArgument (TypeReference type, object value) + { + Mixin.CheckType (type); + this.type = type; + this.value = value; + } + } + + public struct CustomAttributeNamedArgument { + + readonly string name; + readonly CustomAttributeArgument argument; + + public string Name { + get { return name; } + } + + public CustomAttributeArgument Argument { + get { return argument; } + } + + public CustomAttributeNamedArgument (string name, CustomAttributeArgument argument) + { + Mixin.CheckName (name); + this.name = name; + this.argument = argument; + } + } + + public interface ICustomAttribute { + + TypeReference AttributeType { get; } + + bool HasFields { get; } + bool HasProperties { get; } + bool HasConstructorArguments { get; } + Collection Fields { get; } + Collection Properties { get; } + Collection ConstructorArguments { get; } + } + + [DebuggerDisplay ("{AttributeType}")] + public sealed class CustomAttribute : ICustomAttribute { + + internal CustomAttributeValueProjection projection; + readonly internal uint signature; + internal bool resolved; + MethodReference constructor; + byte [] blob; + internal Collection arguments; + internal Collection fields; + internal Collection properties; + + public MethodReference Constructor { + get { return constructor; } + set { constructor = value; } + } + + public TypeReference AttributeType { + get { return constructor.DeclaringType; } + } + + public bool IsResolved { + get { return resolved; } + } + + public bool HasConstructorArguments { + get { + Resolve (); + + return !arguments.IsNullOrEmpty (); + } + } + + public Collection ConstructorArguments { + get { + Resolve (); + + return arguments ?? (arguments = new Collection ()); + } + } + + public bool HasFields { + get { + Resolve (); + + return !fields.IsNullOrEmpty (); + } + } + + public Collection Fields { + get { + Resolve (); + + return fields ?? (fields = new Collection ()); + } + } + + public bool HasProperties { + get { + Resolve (); + + return !properties.IsNullOrEmpty (); + } + } + + public Collection Properties { + get { + Resolve (); + + return properties ?? (properties = new Collection ()); + } + } + + internal bool HasImage { + get { return constructor != null && constructor.HasImage; } + } + + internal ModuleDefinition Module { + get { return constructor.Module; } + } + + internal CustomAttribute (uint signature, MethodReference constructor) + { + this.signature = signature; + this.constructor = constructor; + this.resolved = false; + } + + public CustomAttribute (MethodReference constructor) + { + this.constructor = constructor; + this.resolved = true; + } + + public CustomAttribute (MethodReference constructor, byte [] blob) + { + this.constructor = constructor; + this.resolved = false; + this.blob = blob; + } + + public byte [] GetBlob () + { + if (blob != null) + return blob; + + if (!HasImage) + throw new NotSupportedException (); + + return Module.Read (ref blob, this, (attribute, reader) => reader.ReadCustomAttributeBlob (attribute.signature)); + } + + void Resolve () + { + if (resolved || !HasImage) + return; + + Module.Read (this, (attribute, reader) => { + try { + reader.ReadCustomAttributeSignature (attribute); + resolved = true; + } catch (ResolutionException) { + if (arguments != null) + arguments.Clear (); + if (fields != null) + fields.Clear (); + if (properties != null) + properties.Clear (); + + resolved = false; + } + }); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs.meta new file mode 100644 index 0000000..1250eaa --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/CustomAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9285cdc9295371f4996f68a76fbae707 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs new file mode 100644 index 0000000..755071e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs @@ -0,0 +1,61 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +namespace Mono.Cecil { + + public class DefaultAssemblyResolver : BaseAssemblyResolver { + + readonly IDictionary cache; + + public DefaultAssemblyResolver () + { + cache = new Dictionary (StringComparer.Ordinal); + } + + public override AssemblyDefinition Resolve (AssemblyNameReference name) + { + Mixin.CheckName (name); + + AssemblyDefinition assembly; + if (cache.TryGetValue (name.FullName, out assembly)) + return assembly; + + assembly = base.Resolve (name); + cache [name.FullName] = assembly; + + return assembly; + } + + protected void RegisterAssembly (AssemblyDefinition assembly) + { + if (assembly == null) + throw new ArgumentNullException ("assembly"); + + var name = assembly.Name.FullName; + if (cache.ContainsKey (name)) + return; + + cache [name] = assembly; + } + + protected override void Dispose (bool disposing) + { + foreach (var assembly in cache.Values) + assembly.Dispose (); + + cache.Clear (); + + base.Dispose (disposing); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs.meta new file mode 100644 index 0000000..289bdff --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/DefaultAssemblyResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14deb232684f9114f95628c6d3d47fd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs new file mode 100644 index 0000000..6b5f86a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs @@ -0,0 +1,98 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.IO; + +namespace Mono.Cecil { + + public sealed class EmbeddedResource : Resource { + + readonly MetadataReader reader; + + uint? offset; + byte [] data; + Stream stream; + + public override ResourceType ResourceType { + get { return ResourceType.Embedded; } + } + + public EmbeddedResource (string name, ManifestResourceAttributes attributes, byte [] data) : + base (name, attributes) + { + this.data = data; + } + + public EmbeddedResource (string name, ManifestResourceAttributes attributes, Stream stream) : + base (name, attributes) + { + this.stream = stream; + } + + internal EmbeddedResource (string name, ManifestResourceAttributes attributes, uint offset, MetadataReader reader) + : base (name, attributes) + { + this.offset = offset; + this.reader = reader; + } + + public Stream GetResourceStream () + { + if (stream != null) + return stream; + + if (data != null) + return new MemoryStream (data); + + if (offset.HasValue) + return new MemoryStream (reader.GetManagedResource (offset.Value)); + + throw new InvalidOperationException (); + } + + public byte [] GetResourceData () + { + if (stream != null) + return ReadStream (stream); + + if (data != null) + return data; + + if (offset.HasValue) + return reader.GetManagedResource (offset.Value); + + throw new InvalidOperationException (); + } + + static byte [] ReadStream (Stream stream) + { + int read; + + if (stream.CanSeek) { + var length = (int) stream.Length; + var data = new byte [length]; + int offset = 0; + + while ((read = stream.Read (data, offset, length - offset)) > 0) + offset += read; + + return data; + } + + var buffer = new byte [1024 * 8]; + var memory = new MemoryStream (); + while ((read = stream.Read (buffer, 0, buffer.Length)) > 0) + memory.Write (buffer, 0, read); + + return memory.ToArray (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs.meta new file mode 100644 index 0000000..5dbcaee --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EmbeddedResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8295a595b0d83a94488a7afb9689d023 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs new file mode 100644 index 0000000..9f823fd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs @@ -0,0 +1,21 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum EventAttributes : ushort { + None = 0x0000, + SpecialName = 0x0200, // Event is special + RTSpecialName = 0x0400 // CLI provides 'special' behavior, depending upon the name of the event + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs.meta new file mode 100644 index 0000000..aae4bb1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9bbc8cbcdf730a4fbe48ebdb0892455 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs new file mode 100644 index 0000000..33bc341 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs @@ -0,0 +1,155 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class EventDefinition : EventReference, IMemberDefinition { + + ushort attributes; + + Collection custom_attributes; + + internal MethodDefinition add_method; + internal MethodDefinition invoke_method; + internal MethodDefinition remove_method; + internal Collection other_methods; + + public EventAttributes Attributes { + get { return (EventAttributes) attributes; } + set { attributes = (ushort) value; } + } + + public MethodDefinition AddMethod { + get { + if (add_method != null) + return add_method; + + InitializeMethods (); + return add_method; + } + set { add_method = value; } + } + + public MethodDefinition InvokeMethod { + get { + if (invoke_method != null) + return invoke_method; + + InitializeMethods (); + return invoke_method; + } + set { invoke_method = value; } + } + + public MethodDefinition RemoveMethod { + get { + if (remove_method != null) + return remove_method; + + InitializeMethods (); + return remove_method; + } + set { remove_method = value; } + } + + public bool HasOtherMethods { + get { + if (other_methods != null) + return other_methods.Count > 0; + + InitializeMethods (); + return !other_methods.IsNullOrEmpty (); + } + } + + public Collection OtherMethods { + get { + if (other_methods != null) + return other_methods; + + InitializeMethods (); + + if (other_methods != null) + return other_methods; + + return other_methods = new Collection (); + } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, Module)); } + } + + #region EventAttributes + + public bool IsSpecialName { + get { return attributes.GetAttributes ((ushort) EventAttributes.SpecialName); } + set { attributes = attributes.SetAttributes ((ushort) EventAttributes.SpecialName, value); } + } + + public bool IsRuntimeSpecialName { + get { return attributes.GetAttributes ((ushort) EventAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((ushort) EventAttributes.RTSpecialName, value); } + } + + #endregion + + public new TypeDefinition DeclaringType { + get { return (TypeDefinition) base.DeclaringType; } + set { base.DeclaringType = value; } + } + + public override bool IsDefinition { + get { return true; } + } + + public EventDefinition (string name, EventAttributes attributes, TypeReference eventType) + : base (name, eventType) + { + this.attributes = (ushort) attributes; + this.token = new MetadataToken (TokenType.Event); + } + + void InitializeMethods () + { + var module = this.Module; + if (module == null) + return; + + lock (module.SyncRoot) { + if (add_method != null + || invoke_method != null + || remove_method != null) + return; + + if (!module.HasImage ()) + return; + + module.Read (this, (@event, reader) => reader.ReadMethods (@event)); + } + } + + public override EventDefinition Resolve () + { + return this; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs.meta new file mode 100644 index 0000000..5f30eed --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2eb4df339bfe23b4da17984c1ef2be08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs new file mode 100644 index 0000000..d4df72b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs @@ -0,0 +1,42 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public abstract class EventReference : MemberReference { + + TypeReference event_type; + + public TypeReference EventType { + get { return event_type; } + set { event_type = value; } + } + + public override string FullName { + get { return event_type.FullName + " " + MemberFullName (); } + } + + protected EventReference (string name, TypeReference eventType) + : base (name) + { + Mixin.CheckType (eventType, Mixin.Argument.eventType); + event_type = eventType; + } + + protected override IMemberDefinition ResolveDefinition () + { + return this.Resolve (); + } + + public new abstract EventDefinition Resolve (); + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs.meta new file mode 100644 index 0000000..d11f135 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/EventReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59b445bc6fd86cb43a25b5f16f420db4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs new file mode 100644 index 0000000..8238a0c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs @@ -0,0 +1,240 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public sealed class ExportedType : IMetadataTokenProvider { + + string @namespace; + string name; + uint attributes; + IMetadataScope scope; + ModuleDefinition module; + int identifier; + ExportedType declaring_type; + internal MetadataToken token; + + public string Namespace { + get { return @namespace; } + set { @namespace = value; } + } + + public string Name { + get { return name; } + set { name = value; } + } + + public TypeAttributes Attributes { + get { return (TypeAttributes) attributes; } + set { attributes = (uint) value; } + } + + public IMetadataScope Scope { + get { + if (declaring_type != null) + return declaring_type.Scope; + + return scope; + } + set { + if (declaring_type != null) { + declaring_type.Scope = value; + return; + } + + scope = value; + } + } + + public ExportedType DeclaringType { + get { return declaring_type; } + set { declaring_type = value; } + } + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + public int Identifier { + get { return identifier; } + set { identifier = value; } + } + + #region TypeAttributes + + public bool IsNotPublic { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NotPublic); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NotPublic, value); } + } + + public bool IsPublic { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.Public); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.Public, value); } + } + + public bool IsNestedPublic { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPublic); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPublic, value); } + } + + public bool IsNestedPrivate { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPrivate); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPrivate, value); } + } + + public bool IsNestedFamily { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamily); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamily, value); } + } + + public bool IsNestedAssembly { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedAssembly); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedAssembly, value); } + } + + public bool IsNestedFamilyAndAssembly { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamANDAssem); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamANDAssem, value); } + } + + public bool IsNestedFamilyOrAssembly { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamORAssem); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamORAssem, value); } + } + + public bool IsAutoLayout { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.AutoLayout); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.AutoLayout, value); } + } + + public bool IsSequentialLayout { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.SequentialLayout); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.SequentialLayout, value); } + } + + public bool IsExplicitLayout { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.ExplicitLayout); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.ExplicitLayout, value); } + } + + public bool IsClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Class); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Class, value); } + } + + public bool IsInterface { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Interface); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Interface, value); } + } + + public bool IsAbstract { + get { return attributes.GetAttributes ((uint) TypeAttributes.Abstract); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Abstract, value); } + } + + public bool IsSealed { + get { return attributes.GetAttributes ((uint) TypeAttributes.Sealed); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Sealed, value); } + } + + public bool IsSpecialName { + get { return attributes.GetAttributes ((uint) TypeAttributes.SpecialName); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.SpecialName, value); } + } + + public bool IsImport { + get { return attributes.GetAttributes ((uint) TypeAttributes.Import); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Import, value); } + } + + public bool IsSerializable { + get { return attributes.GetAttributes ((uint) TypeAttributes.Serializable); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Serializable, value); } + } + + public bool IsAnsiClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AnsiClass); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AnsiClass, value); } + } + + public bool IsUnicodeClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.UnicodeClass); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.UnicodeClass, value); } + } + + public bool IsAutoClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AutoClass); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AutoClass, value); } + } + + public bool IsBeforeFieldInit { + get { return attributes.GetAttributes ((uint) TypeAttributes.BeforeFieldInit); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.BeforeFieldInit, value); } + } + + public bool IsRuntimeSpecialName { + get { return attributes.GetAttributes ((uint) TypeAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.RTSpecialName, value); } + } + + public bool HasSecurity { + get { return attributes.GetAttributes ((uint) TypeAttributes.HasSecurity); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.HasSecurity, value); } + } + + #endregion + + public bool IsForwarder { + get { return attributes.GetAttributes ((uint) TypeAttributes.Forwarder); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Forwarder, value); } + } + + public string FullName { + get { + var fullname = string.IsNullOrEmpty (@namespace) + ? name + : @namespace + '.' + name; + + if (declaring_type != null) + return declaring_type.FullName + "/" + fullname; + + return fullname; + } + } + + public ExportedType (string @namespace, string name, ModuleDefinition module, IMetadataScope scope) + { + this.@namespace = @namespace; + this.name = name; + this.scope = scope; + this.module = module; + } + + public override string ToString () + { + return FullName; + } + + public TypeDefinition Resolve () + { + return module.Resolve (CreateReference ()); + } + + internal TypeReference CreateReference () + { + return new TypeReference (@namespace, name, module, scope) { + DeclaringType = declaring_type != null ? declaring_type.CreateReference () : null, + }; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs.meta new file mode 100644 index 0000000..d812ade --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ExportedType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19429acff424ad5499c8314b155b2e38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs new file mode 100644 index 0000000..7d5bb54 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs @@ -0,0 +1,41 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum FieldAttributes : ushort { + FieldAccessMask = 0x0007, + CompilerControlled = 0x0000, // Member not referenceable + Private = 0x0001, // Accessible only by the parent type + FamANDAssem = 0x0002, // Accessible by sub-types only in this assembly + Assembly = 0x0003, // Accessible by anyone in the Assembly + Family = 0x0004, // Accessible only by type and sub-types + FamORAssem = 0x0005, // Accessible by sub-types anywhere, plus anyone in the assembly + Public = 0x0006, // Accessible by anyone who has visibility to this scope field contract attributes + + Static = 0x0010, // Defined on type, else per instance + InitOnly = 0x0020, // Field may only be initialized, not written after init + Literal = 0x0040, // Value is compile time constant + NotSerialized = 0x0080, // Field does not have to be serialized when type is remoted + SpecialName = 0x0200, // Field is special + + // Interop Attributes + PInvokeImpl = 0x2000, // Implementation is forwarded through PInvoke + + // Additional flags + RTSpecialName = 0x0400, // CLI provides 'special' behavior, depending upon the name of the field + HasFieldMarshal = 0x1000, // Field has marshalling information + HasDefault = 0x8000, // Field has default + HasFieldRVA = 0x0100 // Field has RVA + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs.meta new file mode 100644 index 0000000..ccc6dd0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c10aeeab7adf1f74e9db872852016f02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs new file mode 100644 index 0000000..593b77e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs @@ -0,0 +1,267 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class FieldDefinition : FieldReference, IMemberDefinition, IConstantProvider, IMarshalInfoProvider { + + ushort attributes; + Collection custom_attributes; + + int offset = Mixin.NotResolvedMarker; + + internal int rva = Mixin.NotResolvedMarker; + byte [] initial_value; + + object constant = Mixin.NotResolved; + + MarshalInfo marshal_info; + + void ResolveLayout () + { + if (offset != Mixin.NotResolvedMarker) + return; + + if (!HasImage) { + offset = Mixin.NoDataMarker; + return; + } + + offset = Module.Read (this, (field, reader) => reader.ReadFieldLayout (field)); + } + + public bool HasLayoutInfo { + get { + if (offset >= 0) + return true; + + ResolveLayout (); + + return offset >= 0; + } + } + + public int Offset { + get { + if (offset >= 0) + return offset; + + ResolveLayout (); + + return offset >= 0 ? offset : -1; + } + set { offset = value; } + } + + internal new FieldDefinitionProjection WindowsRuntimeProjection { + get { return (FieldDefinitionProjection) projection; } + set { projection = value; } + } + + void ResolveRVA () + { + if (rva != Mixin.NotResolvedMarker) + return; + + if (!HasImage) + return; + + rva = Module.Read (this, (field, reader) => reader.ReadFieldRVA (field)); + } + + public int RVA { + get { + if (rva > 0) + return rva; + + ResolveRVA (); + + return rva > 0 ? rva : 0; + } + } + + public byte [] InitialValue { + get { + if (initial_value != null) + return initial_value; + + ResolveRVA (); + + if (initial_value == null) + initial_value = Empty.Array; + + return initial_value; + } + set { + initial_value = value; + rva = 0; + } + } + + public FieldAttributes Attributes { + get { return (FieldAttributes) attributes; } + set { + if (IsWindowsRuntimeProjection && (ushort) value != attributes) + throw new InvalidOperationException (); + + attributes = (ushort) value; + } + } + + public bool HasConstant { + get { + this.ResolveConstant (ref constant, Module); + + return constant != Mixin.NoValue; + } + set { if (!value) constant = Mixin.NoValue; } + } + + public object Constant { + get { return HasConstant ? constant : null; } + set { constant = value; } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, Module)); } + } + + public bool HasMarshalInfo { + get { + if (marshal_info != null) + return true; + + return this.GetHasMarshalInfo (Module); + } + } + + public MarshalInfo MarshalInfo { + get { return marshal_info ?? (this.GetMarshalInfo (ref marshal_info, Module)); } + set { marshal_info = value; } + } + + #region FieldAttributes + + public bool IsCompilerControlled { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.CompilerControlled); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.CompilerControlled, value); } + } + + public bool IsPrivate { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Private); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Private, value); } + } + + public bool IsFamilyAndAssembly { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.FamANDAssem); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.FamANDAssem, value); } + } + + public bool IsAssembly { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Assembly); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Assembly, value); } + } + + public bool IsFamily { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Family); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Family, value); } + } + + public bool IsFamilyOrAssembly { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.FamORAssem); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.FamORAssem, value); } + } + + public bool IsPublic { + get { return attributes.GetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Public); } + set { attributes = attributes.SetMaskedAttributes ((ushort) FieldAttributes.FieldAccessMask, (ushort) FieldAttributes.Public, value); } + } + + public bool IsStatic { + get { return attributes.GetAttributes ((ushort) FieldAttributes.Static); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.Static, value); } + } + + public bool IsInitOnly { + get { return attributes.GetAttributes ((ushort) FieldAttributes.InitOnly); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.InitOnly, value); } + } + + public bool IsLiteral { + get { return attributes.GetAttributes ((ushort) FieldAttributes.Literal); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.Literal, value); } + } + + public bool IsNotSerialized { + get { return attributes.GetAttributes ((ushort) FieldAttributes.NotSerialized); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.NotSerialized, value); } + } + + public bool IsSpecialName { + get { return attributes.GetAttributes ((ushort) FieldAttributes.SpecialName); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.SpecialName, value); } + } + + public bool IsPInvokeImpl { + get { return attributes.GetAttributes ((ushort) FieldAttributes.PInvokeImpl); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.PInvokeImpl, value); } + } + + public bool IsRuntimeSpecialName { + get { return attributes.GetAttributes ((ushort) FieldAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.RTSpecialName, value); } + } + + public bool HasDefault { + get { return attributes.GetAttributes ((ushort) FieldAttributes.HasDefault); } + set { attributes = attributes.SetAttributes ((ushort) FieldAttributes.HasDefault, value); } + } + + #endregion + + public override bool IsDefinition { + get { return true; } + } + + public new TypeDefinition DeclaringType { + get { return (TypeDefinition) base.DeclaringType; } + set { base.DeclaringType = value; } + } + + public FieldDefinition (string name, FieldAttributes attributes, TypeReference fieldType) + : base (name, fieldType) + { + this.attributes = (ushort) attributes; + } + + public override FieldDefinition Resolve () + { + return this; + } + } + + static partial class Mixin { + + public const int NotResolvedMarker = -2; + public const int NoDataMarker = -1; + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs.meta new file mode 100644 index 0000000..6f051b5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a81ef6737a5ba424f8b753dbd639c028 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs new file mode 100644 index 0000000..944c225 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs @@ -0,0 +1,68 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public class FieldReference : MemberReference { + + TypeReference field_type; + + public TypeReference FieldType { + get { return field_type; } + set { field_type = value; } + } + + public override string FullName { + get { return field_type.FullName + " " + MemberFullName (); } + } + + public override bool ContainsGenericParameter { + get { return field_type.ContainsGenericParameter || base.ContainsGenericParameter; } + } + + internal FieldReference () + { + this.token = new MetadataToken (TokenType.MemberRef); + } + + public FieldReference (string name, TypeReference fieldType) + : base (name) + { + Mixin.CheckType (fieldType, Mixin.Argument.fieldType); + + this.field_type = fieldType; + this.token = new MetadataToken (TokenType.MemberRef); + } + + public FieldReference (string name, TypeReference fieldType, TypeReference declaringType) + : this (name, fieldType) + { + Mixin.CheckType (declaringType, Mixin.Argument.declaringType); + + this.DeclaringType = declaringType; + } + + protected override IMemberDefinition ResolveDefinition () + { + return this.Resolve (); + } + + public new virtual FieldDefinition Resolve () + { + var module = this.Module; + if (module == null) + throw new NotSupportedException (); + + return module.Resolve (this); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs.meta new file mode 100644 index 0000000..bc80529 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FieldReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 064da4421d554554abb13616fa82e7ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs new file mode 100644 index 0000000..171f174 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs @@ -0,0 +1,17 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + enum FileAttributes : uint { + ContainsMetaData = 0x0000, // This is not a resource file + ContainsNoMetaData = 0x0001, // This is a resource file or other non-metadata-containing file + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs.meta new file mode 100644 index 0000000..1eb5bc0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FileAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59011577da2db964d9d57536ce7e5f9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs new file mode 100644 index 0000000..0602fcb --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs @@ -0,0 +1,111 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; +using Mono.Collections.Generic; +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class FunctionPointerType : TypeSpecification, IMethodSignature { + + readonly MethodReference function; + + public bool HasThis { + get { return function.HasThis; } + set { function.HasThis = value; } + } + + public bool ExplicitThis { + get { return function.ExplicitThis; } + set { function.ExplicitThis = value; } + } + + public MethodCallingConvention CallingConvention { + get { return function.CallingConvention; } + set { function.CallingConvention = value; } + } + + public bool HasParameters { + get { return function.HasParameters; } + } + + public Collection Parameters { + get { return function.Parameters; } + } + + public TypeReference ReturnType { + get { return function.MethodReturnType.ReturnType; } + set { function.MethodReturnType.ReturnType = value; } + } + + public MethodReturnType MethodReturnType { + get { return function.MethodReturnType; } + } + + public override string Name { + get { return function.Name; } + set { throw new InvalidOperationException (); } + } + + public override string Namespace { + get { return string.Empty; } + set { throw new InvalidOperationException (); } + } + + public override ModuleDefinition Module { + get { return ReturnType.Module; } + } + + public override IMetadataScope Scope { + get { return function.ReturnType.Scope; } + set { throw new InvalidOperationException (); } + } + + public override bool IsFunctionPointer { + get { return true; } + } + + public override bool ContainsGenericParameter { + get { return function.ContainsGenericParameter; } + } + + public override string FullName { + get { + var signature = new StringBuilder (); + signature.Append (function.Name); + signature.Append (" "); + signature.Append (function.ReturnType.FullName); + signature.Append (" *"); + this.MethodSignatureFullName (signature); + return signature.ToString (); + } + } + + public FunctionPointerType () + : base (null) + { + this.function = new MethodReference (); + this.function.Name = "method"; + this.etype = MD.ElementType.FnPtr; + } + + public override TypeDefinition Resolve () + { + return null; + } + + public override TypeReference GetElementType () + { + return this; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs.meta new file mode 100644 index 0000000..3e2f1c7 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/FunctionPointerType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 247c20f77caecc646960f694dca946fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs new file mode 100644 index 0000000..00de03a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs @@ -0,0 +1,67 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class GenericInstanceMethod : MethodSpecification, IGenericInstance, IGenericContext { + + Collection arguments; + + public bool HasGenericArguments { + get { return !arguments.IsNullOrEmpty (); } + } + + public Collection GenericArguments { + get { return arguments ?? (arguments = new Collection ()); } + } + + public override bool IsGenericInstance { + get { return true; } + } + + IGenericParameterProvider IGenericContext.Method { + get { return ElementMethod; } + } + + IGenericParameterProvider IGenericContext.Type { + get { return ElementMethod.DeclaringType; } + } + + public override bool ContainsGenericParameter { + get { return this.ContainsGenericParameter () || base.ContainsGenericParameter; } + } + + public override string FullName { + get { + var signature = new StringBuilder (); + var method = this.ElementMethod; + signature.Append (method.ReturnType.FullName) + .Append (" ") + .Append (method.DeclaringType.FullName) + .Append ("::") + .Append (method.Name); + this.GenericInstanceFullName (signature); + this.MethodSignatureFullName (signature); + return signature.ToString (); + + } + } + + public GenericInstanceMethod (MethodReference method) + : base (method) + { + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs.meta new file mode 100644 index 0000000..77c8ed1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceMethod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4d9ac1ab3a061747b4114da3b534c95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs new file mode 100644 index 0000000..0e683e7 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs @@ -0,0 +1,65 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; + +using Mono.Collections.Generic; + +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class GenericInstanceType : TypeSpecification, IGenericInstance, IGenericContext { + + Collection arguments; + + public bool HasGenericArguments { + get { return !arguments.IsNullOrEmpty (); } + } + + public Collection GenericArguments { + get { return arguments ?? (arguments = new Collection ()); } + } + + public override TypeReference DeclaringType { + get { return ElementType.DeclaringType; } + set { throw new NotSupportedException (); } + } + + public override string FullName { + get { + var name = new StringBuilder (); + name.Append (base.FullName); + this.GenericInstanceFullName (name); + return name.ToString (); + } + } + + public override bool IsGenericInstance { + get { return true; } + } + + public override bool ContainsGenericParameter { + get { return this.ContainsGenericParameter () || base.ContainsGenericParameter; } + } + + IGenericParameterProvider IGenericContext.Type { + get { return ElementType; } + } + + public GenericInstanceType (TypeReference type) + : base (type) + { + base.IsValueType = type.IsValueType; + this.etype = MD.ElementType.GenericInst; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs.meta new file mode 100644 index 0000000..316f5c2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericInstanceType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3106bf0c40cd2934681c5b68539e564c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs new file mode 100644 index 0000000..f2997da --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs @@ -0,0 +1,268 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +using Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class GenericParameter : TypeReference, ICustomAttributeProvider { + + internal int position; + internal GenericParameterType type; + internal IGenericParameterProvider owner; + + ushort attributes; + Collection constraints; + Collection custom_attributes; + + public GenericParameterAttributes Attributes { + get { return (GenericParameterAttributes) attributes; } + set { attributes = (ushort) value; } + } + + public int Position { + get { return position; } + } + + public GenericParameterType Type { + get { return type; } + } + + public IGenericParameterProvider Owner { + get { return owner; } + } + + public bool HasConstraints { + get { + if (constraints != null) + return constraints.Count > 0; + + return HasImage && Module.Read (this, (generic_parameter, reader) => reader.HasGenericConstraints (generic_parameter)); + } + } + + public Collection Constraints { + get { + if (constraints != null) + return constraints; + + if (HasImage) + return Module.Read (ref constraints, this, (generic_parameter, reader) => reader.ReadGenericConstraints (generic_parameter)); + + return constraints = new Collection (); + } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, Module)); } + } + + public override IMetadataScope Scope { + get { + if (owner == null) + return null; + + return owner.GenericParameterType == GenericParameterType.Method + ? ((MethodReference) owner).DeclaringType.Scope + : ((TypeReference) owner).Scope; + } + set { throw new InvalidOperationException (); } + } + + public override TypeReference DeclaringType { + get { return owner as TypeReference; } + set { throw new InvalidOperationException (); } + } + + public MethodReference DeclaringMethod { + get { return owner as MethodReference; } + } + + public override ModuleDefinition Module { + get { return module ?? owner.Module; } + } + + public override string Name { + get { + if (!string.IsNullOrEmpty (base.Name)) + return base.Name; + + return base.Name = (type == GenericParameterType.Method ? "!!" : "!") + position; + } + } + + public override string Namespace { + get { return string.Empty; } + set { throw new InvalidOperationException (); } + } + + public override string FullName { + get { return Name; } + } + + public override bool IsGenericParameter { + get { return true; } + } + + public override bool ContainsGenericParameter { + get { return true; } + } + + public override MetadataType MetadataType { + get { return (MetadataType) etype; } + } + + #region GenericParameterAttributes + + public bool IsNonVariant { + get { return attributes.GetMaskedAttributes ((ushort) GenericParameterAttributes.VarianceMask, (ushort) GenericParameterAttributes.NonVariant); } + set { attributes = attributes.SetMaskedAttributes ((ushort) GenericParameterAttributes.VarianceMask, (ushort) GenericParameterAttributes.NonVariant, value); } + } + + public bool IsCovariant { + get { return attributes.GetMaskedAttributes ((ushort) GenericParameterAttributes.VarianceMask, (ushort) GenericParameterAttributes.Covariant); } + set { attributes = attributes.SetMaskedAttributes ((ushort) GenericParameterAttributes.VarianceMask, (ushort) GenericParameterAttributes.Covariant, value); } + } + + public bool IsContravariant { + get { return attributes.GetMaskedAttributes ((ushort) GenericParameterAttributes.VarianceMask, (ushort) GenericParameterAttributes.Contravariant); } + set { attributes = attributes.SetMaskedAttributes ((ushort) GenericParameterAttributes.VarianceMask, (ushort) GenericParameterAttributes.Contravariant, value); } + } + + public bool HasReferenceTypeConstraint { + get { return attributes.GetAttributes ((ushort) GenericParameterAttributes.ReferenceTypeConstraint); } + set { attributes = attributes.SetAttributes ((ushort) GenericParameterAttributes.ReferenceTypeConstraint, value); } + } + + public bool HasNotNullableValueTypeConstraint { + get { return attributes.GetAttributes ((ushort) GenericParameterAttributes.NotNullableValueTypeConstraint); } + set { attributes = attributes.SetAttributes ((ushort) GenericParameterAttributes.NotNullableValueTypeConstraint, value); } + } + + public bool HasDefaultConstructorConstraint { + get { return attributes.GetAttributes ((ushort) GenericParameterAttributes.DefaultConstructorConstraint); } + set { attributes = attributes.SetAttributes ((ushort) GenericParameterAttributes.DefaultConstructorConstraint, value); } + } + + #endregion + + public GenericParameter (IGenericParameterProvider owner) + : this (string.Empty, owner) + { + } + + public GenericParameter (string name, IGenericParameterProvider owner) + : base (string.Empty, name) + { + if (owner == null) + throw new ArgumentNullException (); + + this.position = -1; + this.owner = owner; + this.type = owner.GenericParameterType; + this.etype = ConvertGenericParameterType (this.type); + this.token = new MetadataToken (TokenType.GenericParam); + + } + + internal GenericParameter (int position, GenericParameterType type, ModuleDefinition module) + : base (string.Empty, string.Empty) + { + Mixin.CheckModule (module); + + this.position = position; + this.type = type; + this.etype = ConvertGenericParameterType (type); + this.module = module; + this.token = new MetadataToken (TokenType.GenericParam); + } + + static ElementType ConvertGenericParameterType (GenericParameterType type) + { + switch (type) { + case GenericParameterType.Type: + return ElementType.Var; + case GenericParameterType.Method: + return ElementType.MVar; + } + + throw new ArgumentOutOfRangeException (); + } + + public override TypeDefinition Resolve () + { + return null; + } + } + + sealed class GenericParameterCollection : Collection { + + readonly IGenericParameterProvider owner; + + internal GenericParameterCollection (IGenericParameterProvider owner) + { + this.owner = owner; + } + + internal GenericParameterCollection (IGenericParameterProvider owner, int capacity) + : base (capacity) + { + this.owner = owner; + } + + protected override void OnAdd (GenericParameter item, int index) + { + UpdateGenericParameter (item, index); + } + + protected override void OnInsert (GenericParameter item, int index) + { + UpdateGenericParameter (item, index); + + for (int i = index; i < size; i++) + items[i].position = i + 1; + } + + protected override void OnSet (GenericParameter item, int index) + { + UpdateGenericParameter (item, index); + } + + void UpdateGenericParameter (GenericParameter item, int index) + { + item.owner = owner; + item.position = index; + item.type = owner.GenericParameterType; + } + + protected override void OnRemove (GenericParameter item, int index) + { + item.owner = null; + item.position = -1; + item.type = GenericParameterType.Type; + + for (int i = index + 1; i < size; i++) + items[i].position = i - 1; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs.meta new file mode 100644 index 0000000..33dad74 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a79130bc4bc14a4438cedc6b2d961a68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs new file mode 100644 index 0000000..149582c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs @@ -0,0 +1,27 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum GenericParameterAttributes : ushort { + VarianceMask = 0x0003, + NonVariant = 0x0000, + Covariant = 0x0001, + Contravariant = 0x0002, + + SpecialConstraintMask = 0x001c, + ReferenceTypeConstraint = 0x0004, + NotNullableValueTypeConstraint = 0x0008, + DefaultConstructorConstraint = 0x0010 + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs.meta new file mode 100644 index 0000000..63e4fe1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/GenericParameterAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a43470826c035814fb0cefbf8d35b1e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs new file mode 100644 index 0000000..178b665 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs @@ -0,0 +1,44 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public interface IConstantProvider : IMetadataTokenProvider { + + bool HasConstant { get; set; } + object Constant { get; set; } + } + + static partial class Mixin { + + internal static object NoValue = new object (); + internal static object NotResolved = new object (); + + public static void ResolveConstant ( + this IConstantProvider self, + ref object constant, + ModuleDefinition module) + { + if (module == null) { + constant = Mixin.NoValue; + return; + } + + lock (module.SyncRoot) { + if (constant != Mixin.NotResolved) + return; + if (module.HasImage ()) + constant = module.Read (self, (provider, reader) => reader.ReadConstant (provider)); + else + constant = Mixin.NoValue; + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs.meta new file mode 100644 index 0000000..71e29b0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IConstantProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31dca01f47c8a6246b11fba5b92381fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs new file mode 100644 index 0000000..36d7ed0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs @@ -0,0 +1,42 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public interface ICustomAttributeProvider : IMetadataTokenProvider { + + Collection CustomAttributes { get; } + + bool HasCustomAttributes { get; } + } + + static partial class Mixin { + + public static bool GetHasCustomAttributes ( + this ICustomAttributeProvider self, + ModuleDefinition module) + { + return module.HasImage () && module.Read (self, (provider, reader) => reader.HasCustomAttributes (provider)); + } + + public static Collection GetCustomAttributes ( + this ICustomAttributeProvider self, + ref Collection variable, + ModuleDefinition module) + { + return module.HasImage () + ? module.Read (ref variable, self, (provider, reader) => reader.ReadCustomAttributes (provider)) + : variable = new Collection(); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs.meta new file mode 100644 index 0000000..a166956 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ICustomAttributeProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 916fd6861b63f8a439823f465191224e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs new file mode 100644 index 0000000..e98d818 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs @@ -0,0 +1,48 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public interface IGenericInstance : IMetadataTokenProvider { + + bool HasGenericArguments { get; } + Collection GenericArguments { get; } + } + + static partial class Mixin { + + public static bool ContainsGenericParameter (this IGenericInstance self) + { + var arguments = self.GenericArguments; + + for (int i = 0; i < arguments.Count; i++) + if (arguments [i].ContainsGenericParameter) + return true; + + return false; + } + + public static void GenericInstanceFullName (this IGenericInstance self, StringBuilder builder) + { + builder.Append ("<"); + var arguments = self.GenericArguments; + for (int i = 0; i < arguments.Count; i++) { + if (i > 0) + builder.Append (","); + builder.Append (arguments [i].FullName); + } + builder.Append (">"); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs.meta new file mode 100644 index 0000000..1ce6f00 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericInstance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50e75da35c8e0624481ae9ce3d587687 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs new file mode 100644 index 0000000..4c8dfc4 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs @@ -0,0 +1,56 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public interface IGenericParameterProvider : IMetadataTokenProvider { + + bool HasGenericParameters { get; } + bool IsDefinition { get; } + ModuleDefinition Module { get; } + Collection GenericParameters { get; } + GenericParameterType GenericParameterType { get; } + } + + public enum GenericParameterType { + Type, + Method + } + + interface IGenericContext { + + bool IsDefinition { get; } + IGenericParameterProvider Type { get; } + IGenericParameterProvider Method { get; } + } + + static partial class Mixin { + + public static bool GetHasGenericParameters ( + this IGenericParameterProvider self, + ModuleDefinition module) + { + return module.HasImage () && module.Read (self, (provider, reader) => reader.HasGenericParameters (provider)); + } + + public static Collection GetGenericParameters ( + this IGenericParameterProvider self, + ref Collection collection, + ModuleDefinition module) + { + return module.HasImage () + ? module.Read (ref collection, self, (provider, reader) => reader.ReadGenericParameters (provider)) + : collection = new GenericParameterCollection (self); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs.meta new file mode 100644 index 0000000..90b8c47 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IGenericParameterProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72b879cf48c1d2a4c95ff81e836edbe7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs new file mode 100644 index 0000000..a1b9e88 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs @@ -0,0 +1,38 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public interface IMarshalInfoProvider : IMetadataTokenProvider { + + bool HasMarshalInfo { get; } + MarshalInfo MarshalInfo { get; set; } + } + + static partial class Mixin { + + public static bool GetHasMarshalInfo ( + this IMarshalInfoProvider self, + ModuleDefinition module) + { + return module.HasImage () && module.Read (self, (provider, reader) => reader.HasMarshalInfo (provider)); + } + + public static MarshalInfo GetMarshalInfo ( + this IMarshalInfoProvider self, + ref MarshalInfo variable, + ModuleDefinition module) + { + return module.HasImage () + ? module.Read (ref variable, self, (provider, reader) => reader.ReadMarshalInfo (provider)) + : null; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs.meta new file mode 100644 index 0000000..7c13108 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMarshalInfoProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5799369036f0177419ba15c40c72bb9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs new file mode 100644 index 0000000..ad74700 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs @@ -0,0 +1,82 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public interface IMemberDefinition : ICustomAttributeProvider { + + string Name { get; set; } + string FullName { get; } + + bool IsSpecialName { get; set; } + bool IsRuntimeSpecialName { get; set; } + + TypeDefinition DeclaringType { get; set; } + } + + static partial class Mixin { + + public static bool GetAttributes (this uint self, uint attributes) + { + return (self & attributes) != 0; + } + + public static uint SetAttributes (this uint self, uint attributes, bool value) + { + if (value) + return self | attributes; + + return self & ~attributes; + } + + public static bool GetMaskedAttributes (this uint self, uint mask, uint attributes) + { + return (self & mask) == attributes; + } + + public static uint SetMaskedAttributes (this uint self, uint mask, uint attributes, bool value) + { + if (value) { + self &= ~mask; + return self | attributes; + } + + return self & ~(mask & attributes); + } + + public static bool GetAttributes (this ushort self, ushort attributes) + { + return (self & attributes) != 0; + } + + public static ushort SetAttributes (this ushort self, ushort attributes, bool value) + { + if (value) + return (ushort) (self | attributes); + + return (ushort) (self & ~attributes); + } + + public static bool GetMaskedAttributes (this ushort self, ushort mask, uint attributes) + { + return (self & mask) == attributes; + } + + public static ushort SetMaskedAttributes (this ushort self, ushort mask, uint attributes, bool value) + { + if (value) { + self = (ushort) (self & ~mask); + return (ushort) (self | attributes); + } + + return (ushort) (self & ~(mask & attributes)); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs.meta new file mode 100644 index 0000000..408119e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMemberDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f8d560bcf48c9a46a2f701d3b3996da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs new file mode 100644 index 0000000..2e56e75 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs @@ -0,0 +1,23 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum MetadataScopeType { + AssemblyNameReference, + ModuleReference, + ModuleDefinition, + } + + public interface IMetadataScope : IMetadataTokenProvider { + MetadataScopeType MetadataScopeType { get; } + string Name { get; set; } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs.meta new file mode 100644 index 0000000..9332cb4 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 199d39444ede78e4a8ab1c5bbb9074f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs new file mode 100644 index 0000000..dcd678b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs @@ -0,0 +1,17 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public interface IMetadataTokenProvider { + + MetadataToken MetadataToken { get; set; } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs.meta new file mode 100644 index 0000000..3e247f5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMetadataTokenProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa716fce815acdf4c95091b8284dc45d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs new file mode 100644 index 0000000..4d7766e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs @@ -0,0 +1,57 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public interface IMethodSignature : IMetadataTokenProvider { + + bool HasThis { get; set; } + bool ExplicitThis { get; set; } + MethodCallingConvention CallingConvention { get; set; } + + bool HasParameters { get; } + Collection Parameters { get; } + TypeReference ReturnType { get; set; } + MethodReturnType MethodReturnType { get; } + } + + static partial class Mixin { + + public static bool HasImplicitThis (this IMethodSignature self) + { + return self.HasThis && !self.ExplicitThis; + } + + public static void MethodSignatureFullName (this IMethodSignature self, StringBuilder builder) + { + builder.Append ("("); + + if (self.HasParameters) { + var parameters = self.Parameters; + for (int i = 0; i < parameters.Count; i++) { + var parameter = parameters [i]; + if (i > 0) + builder.Append (","); + + if (parameter.ParameterType.IsSentinel) + builder.Append ("...,"); + + builder.Append (parameter.ParameterType.FullName); + } + } + + builder.Append (")"); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs.meta new file mode 100644 index 0000000..7b0bfee --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/IMethodSignature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 651b6121cb0d28c46a2f96fcb64b1ba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs new file mode 100644 index 0000000..6b5644a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs @@ -0,0 +1,829 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using Mono.Collections.Generic; +using SR = System.Reflection; + +using Mono.Cecil.Metadata; + +namespace Mono.Cecil { + +#if !READ_ONLY + + public interface IMetadataImporterProvider { + IMetadataImporter GetMetadataImporter (ModuleDefinition module); + } + + public interface IMetadataImporter { + AssemblyNameReference ImportReference (AssemblyNameReference reference); + TypeReference ImportReference (TypeReference type, IGenericParameterProvider context); + FieldReference ImportReference (FieldReference field, IGenericParameterProvider context); + MethodReference ImportReference (MethodReference method, IGenericParameterProvider context); + } + + public interface IReflectionImporterProvider { + IReflectionImporter GetReflectionImporter (ModuleDefinition module); + } + + public interface IReflectionImporter { + AssemblyNameReference ImportReference (SR.AssemblyName reference); + TypeReference ImportReference (Type type, IGenericParameterProvider context); + FieldReference ImportReference (SR.FieldInfo field, IGenericParameterProvider context); + MethodReference ImportReference (SR.MethodBase method, IGenericParameterProvider context); + } + + struct ImportGenericContext { + + Collection stack; + + public bool IsEmpty { get { return stack == null; } } + + public ImportGenericContext (IGenericParameterProvider provider) + { + if (provider == null) + throw new ArgumentNullException ("provider"); + + stack = null; + + Push (provider); + } + + public void Push (IGenericParameterProvider provider) + { + if (stack == null) + stack = new Collection (1) { provider }; + else + stack.Add (provider); + } + + public void Pop () + { + stack.RemoveAt (stack.Count - 1); + } + + public TypeReference MethodParameter (string method, int position) + { + for (int i = stack.Count - 1; i >= 0; i--) { + var candidate = stack [i] as MethodReference; + if (candidate == null) + continue; + + if (method != NormalizeMethodName (candidate)) + continue; + + return candidate.GenericParameters [position]; + } + + throw new InvalidOperationException (); + } + + public string NormalizeMethodName (MethodReference method) + { + return method.DeclaringType.GetElementType ().FullName + "." + method.Name; + } + + public TypeReference TypeParameter (string type, int position) + { + for (int i = stack.Count - 1; i >= 0; i--) { + var candidate = GenericTypeFor (stack [i]); + + if (candidate.FullName != type) + continue; + + return candidate.GenericParameters [position]; + } + + throw new InvalidOperationException (); + } + + static TypeReference GenericTypeFor (IGenericParameterProvider context) + { + var type = context as TypeReference; + if (type != null) + return type.GetElementType (); + + var method = context as MethodReference; + if (method != null) + return method.DeclaringType.GetElementType (); + + throw new InvalidOperationException (); + } + + public static ImportGenericContext For (IGenericParameterProvider context) + { + return context != null ? new ImportGenericContext (context) : default (ImportGenericContext); + } + } + + public class DefaultReflectionImporter : IReflectionImporter { + + readonly protected ModuleDefinition module; + + public DefaultReflectionImporter (ModuleDefinition module) + { + Mixin.CheckModule (module); + + this.module = module; + } + + enum ImportGenericKind { + Definition, + Open, + } + + static readonly Dictionary type_etype_mapping = new Dictionary (18) { + { typeof (void), ElementType.Void }, + { typeof (bool), ElementType.Boolean }, + { typeof (char), ElementType.Char }, + { typeof (sbyte), ElementType.I1 }, + { typeof (byte), ElementType.U1 }, + { typeof (short), ElementType.I2 }, + { typeof (ushort), ElementType.U2 }, + { typeof (int), ElementType.I4 }, + { typeof (uint), ElementType.U4 }, + { typeof (long), ElementType.I8 }, + { typeof (ulong), ElementType.U8 }, + { typeof (float), ElementType.R4 }, + { typeof (double), ElementType.R8 }, + { typeof (string), ElementType.String }, +#if !NET_CORE + { typeof (TypedReference), ElementType.TypedByRef }, +#endif + { typeof (IntPtr), ElementType.I }, + { typeof (UIntPtr), ElementType.U }, + { typeof (object), ElementType.Object }, + }; + + TypeReference ImportType (Type type, ImportGenericContext context) + { + return ImportType (type, context, ImportGenericKind.Open); + } + + TypeReference ImportType (Type type, ImportGenericContext 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), + type.IsValueType ()); + + reference.etype = ImportElementType (type); + + if (IsNestedType (type)) + reference.DeclaringType = ImportType (type.DeclaringType, context, import_kind); + else + reference.Namespace = type.Namespace ?? string.Empty; + + if (type.IsGenericType ()) + ImportGenericParameters (reference, type.GetGenericArguments ()); + + return reference; + } + + protected virtual IMetadataScope ImportScope (Type type) + { + return ImportScope (type.Assembly ()); + } + + static bool ImportOpenGenericType (Type type, ImportGenericKind import_kind) + { + return type.IsGenericType () && type.IsGenericTypeDefinition () && import_kind == ImportGenericKind.Open; + } + + static bool ImportOpenGenericMethod (SR.MethodBase method, ImportGenericKind import_kind) + { + return method.IsGenericMethod && method.IsGenericMethodDefinition && import_kind == ImportGenericKind.Open; + } + + static bool IsNestedType (Type type) + { + return type.IsNested; + } + + TypeReference ImportTypeSpecification (Type type, ImportGenericContext context) + { + if (type.IsByRef) + return new ByReferenceType (ImportType (type.GetElementType (), context)); + + if (type.IsPointer) + return new PointerType (ImportType (type.GetElementType (), context)); + + if (type.IsArray) + return new ArrayType (ImportType (type.GetElementType (), context), type.GetArrayRank ()); + + if (type.IsGenericType ()) + return ImportGenericInstance (type, context); + + if (type.IsGenericParameter) + return ImportGenericParameter (type, context); + + throw new NotSupportedException (type.FullName); + } + + static TypeReference ImportGenericParameter (Type type, ImportGenericContext context) + { + if (context.IsEmpty) + throw new InvalidOperationException (); + + if (type.DeclaringMethod () != null) + return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod ()), type.GenericParameterPosition); + + if (type.DeclaringType != null) + return context.TypeParameter (NormalizeTypeFullName (type.DeclaringType), type.GenericParameterPosition); + + throw new InvalidOperationException(); + } + + static string NormalizeMethodName (SR.MethodBase method) + { + return NormalizeTypeFullName (method.DeclaringType) + "." + method.Name; + } + + static string NormalizeTypeFullName (Type type) + { + if (IsNestedType (type)) + return NormalizeTypeFullName (type.DeclaringType) + "/" + type.Name; + + return type.FullName; + } + + TypeReference ImportGenericInstance (Type type, ImportGenericContext context) + { + var element_type = ImportType (type.GetGenericTypeDefinition (), context, ImportGenericKind.Definition); + var instance = new GenericInstanceType (element_type); + var arguments = type.GetGenericArguments (); + var instance_arguments = instance.GenericArguments; + + context.Push (element_type); + try { + for (int i = 0; i < arguments.Length; i++) + instance_arguments.Add (ImportType (arguments [i], context)); + + return instance; + } finally { + context.Pop (); + } + } + + static bool IsTypeSpecification (Type type) + { + return type.HasElementType + || IsGenericInstance (type) + || type.IsGenericParameter; + } + + static bool IsGenericInstance (Type type) + { + return type.IsGenericType () && !type.IsGenericTypeDefinition (); + } + + static ElementType ImportElementType (Type type) + { + ElementType etype; + if (!type_etype_mapping.TryGetValue (type, out etype)) + return ElementType.None; + + return etype; + } + + protected AssemblyNameReference ImportScope (SR.Assembly assembly) + { + return ImportReference (assembly.GetName ()); + } + + public virtual AssemblyNameReference ImportReference (SR.AssemblyName name) + { + Mixin.CheckName (name); + + AssemblyNameReference reference; + if (TryGetAssemblyNameReference (name, out reference)) + return reference; + + reference = new AssemblyNameReference (name.Name, name.Version) + { + PublicKeyToken = name.GetPublicKeyToken (), +#if !NET_CORE + Culture = name.CultureInfo.Name, + HashAlgorithm = (AssemblyHashAlgorithm) name.HashAlgorithm, +#endif + }; + + module.AssemblyReferences.Add (reference); + + return reference; + } + + bool TryGetAssemblyNameReference (SR.AssemblyName name, out AssemblyNameReference assembly_reference) + { + var references = module.AssemblyReferences; + + for (int i = 0; i < references.Count; i++) { + var reference = references [i]; + if (name.FullName != reference.FullName) // TODO compare field by field + continue; + + assembly_reference = reference; + return true; + } + + assembly_reference = null; + return false; + } + + FieldReference ImportField (SR.FieldInfo field, ImportGenericContext context) + { + var declaring_type = ImportType (field.DeclaringType, context); + + if (IsGenericInstance (field.DeclaringType)) + field = ResolveFieldDefinition (field); + + context.Push (declaring_type); + try { + return new FieldReference { + Name = field.Name, + DeclaringType = declaring_type, + FieldType = ImportType (field.FieldType, context), + }; + } finally { + context.Pop (); + } + } + + static SR.FieldInfo ResolveFieldDefinition (SR.FieldInfo field) + { +#if NET_CORE + throw new NotImplementedException (); +#else + return field.Module.ResolveField (field.MetadataToken); +#endif + } + + static SR.MethodBase ResolveMethodDefinition (SR.MethodBase method) + { +#if NET_CORE + throw new NotImplementedException (); +#else + return method.Module.ResolveMethod (method.MetadataToken); +#endif + } + + MethodReference ImportMethod (SR.MethodBase method, ImportGenericContext context, ImportGenericKind import_kind) + { + if (IsMethodSpecification (method) || ImportOpenGenericMethod (method, import_kind)) + return ImportMethodSpecification (method, context); + + var declaring_type = ImportType (method.DeclaringType, context); + + if (IsGenericInstance (method.DeclaringType)) + method = ResolveMethodDefinition (method); + + var reference = new MethodReference { + Name = method.Name, + HasThis = HasCallingConvention (method, SR.CallingConventions.HasThis), + ExplicitThis = HasCallingConvention (method, SR.CallingConventions.ExplicitThis), + DeclaringType = ImportType (method.DeclaringType, context, ImportGenericKind.Definition), + }; + + if (HasCallingConvention (method, SR.CallingConventions.VarArgs)) + reference.CallingConvention &= MethodCallingConvention.VarArg; + + if (method.IsGenericMethod) + ImportGenericParameters (reference, method.GetGenericArguments ()); + + context.Push (reference); + try { + var method_info = method as SR.MethodInfo; + reference.ReturnType = method_info != null + ? ImportType (method_info.ReturnType, context) + : ImportType (typeof (void), default (ImportGenericContext)); + + var parameters = method.GetParameters (); + var reference_parameters = reference.Parameters; + + for (int i = 0; i < parameters.Length; i++) + reference_parameters.Add ( + new ParameterDefinition (ImportType (parameters [i].ParameterType, context))); + + reference.DeclaringType = declaring_type; + + return reference; + } finally { + context.Pop (); + } + } + + static void ImportGenericParameters (IGenericParameterProvider provider, Type [] arguments) + { + var provider_parameters = provider.GenericParameters; + + for (int i = 0; i < arguments.Length; i++) + provider_parameters.Add (new GenericParameter (arguments [i].Name, provider)); + } + + static bool IsMethodSpecification (SR.MethodBase method) + { + return method.IsGenericMethod && !method.IsGenericMethodDefinition; + } + + MethodReference ImportMethodSpecification (SR.MethodBase method, ImportGenericContext context) + { + var method_info = method as SR.MethodInfo; + if (method_info == null) + throw new InvalidOperationException (); + + var element_method = ImportMethod (method_info.GetGenericMethodDefinition (), context, ImportGenericKind.Definition); + var instance = new GenericInstanceMethod (element_method); + var arguments = method.GetGenericArguments (); + var instance_arguments = instance.GenericArguments; + + context.Push (element_method); + try { + for (int i = 0; i < arguments.Length; i++) + instance_arguments.Add (ImportType (arguments [i], context)); + + return instance; + } finally { + context.Pop (); + } + } + + static bool HasCallingConvention (SR.MethodBase method, SR.CallingConventions conventions) + { + return (method.CallingConvention & conventions) != 0; + } + + public virtual TypeReference ImportReference (Type type, IGenericParameterProvider context) + { + Mixin.CheckType (type); + return ImportType ( + type, + ImportGenericContext.For (context), + context != null ? ImportGenericKind.Open : ImportGenericKind.Definition); + } + + public virtual FieldReference ImportReference (SR.FieldInfo field, IGenericParameterProvider context) + { + Mixin.CheckField (field); + return ImportField (field, ImportGenericContext.For (context)); + } + + public virtual MethodReference ImportReference (SR.MethodBase method, IGenericParameterProvider context) + { + Mixin.CheckMethod (method); + return ImportMethod (method, + ImportGenericContext.For (context), + context != null ? ImportGenericKind.Open : ImportGenericKind.Definition); + } + } + + public class DefaultMetadataImporter : IMetadataImporter { + + readonly protected ModuleDefinition module; + + public DefaultMetadataImporter (ModuleDefinition module) + { + Mixin.CheckModule (module); + + this.module = module; + } + + TypeReference ImportType (TypeReference type, ImportGenericContext context) + { + if (type.IsTypeSpecification ()) + return ImportTypeSpecification (type, context); + + var reference = new TypeReference ( + type.Namespace, + type.Name, + module, + ImportScope (type), + type.IsValueType); + + MetadataSystem.TryProcessPrimitiveTypeReference (reference); + + if (type.IsNested) + reference.DeclaringType = ImportType (type.DeclaringType, context); + + if (type.HasGenericParameters) + ImportGenericParameters (reference, type); + + return reference; + } + + protected virtual IMetadataScope ImportScope (TypeReference type) + { + return ImportScope (type.Scope); + } + + protected IMetadataScope ImportScope (IMetadataScope scope) + { + switch (scope.MetadataScopeType) { + case MetadataScopeType.AssemblyNameReference: + return ImportReference ((AssemblyNameReference) scope); + case MetadataScopeType.ModuleDefinition: + if (scope == module) return scope; + return ImportReference (((ModuleDefinition) scope).Assembly.Name); + case MetadataScopeType.ModuleReference: + throw new NotImplementedException (); + } + + throw new NotSupportedException (); + } + + public virtual AssemblyNameReference ImportReference (AssemblyNameReference name) + { + Mixin.CheckName (name); + + AssemblyNameReference reference; + if (module.TryGetAssemblyNameReference (name, out reference)) + return reference; + + reference = new AssemblyNameReference (name.Name, name.Version) { + Culture = name.Culture, + HashAlgorithm = name.HashAlgorithm, + IsRetargetable = name.IsRetargetable, + IsWindowsRuntime = name.IsWindowsRuntime, + }; + + var pk_token = !name.PublicKeyToken.IsNullOrEmpty () + ? new byte [name.PublicKeyToken.Length] + : Empty.Array; + + if (pk_token.Length > 0) + Buffer.BlockCopy (name.PublicKeyToken, 0, pk_token, 0, pk_token.Length); + + reference.PublicKeyToken = pk_token; + + module.AssemblyReferences.Add (reference); + + return reference; + } + + static void ImportGenericParameters (IGenericParameterProvider imported, IGenericParameterProvider original) + { + var parameters = original.GenericParameters; + var imported_parameters = imported.GenericParameters; + + for (int i = 0; i < parameters.Count; i++) + imported_parameters.Add (new GenericParameter (parameters [i].Name, imported)); + } + + TypeReference ImportTypeSpecification (TypeReference type, ImportGenericContext 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.FnPtr: + var fnptr = (FunctionPointerType) type; + var imported_fnptr = new FunctionPointerType () { + HasThis = fnptr.HasThis, + ExplicitThis = fnptr.ExplicitThis, + CallingConvention = fnptr.CallingConvention, + ReturnType = ImportType (fnptr.ReturnType, context), + }; + + if (!fnptr.HasParameters) + return imported_fnptr; + + for (int i = 0; i < fnptr.Parameters.Count; i++) + imported_fnptr.Parameters.Add (new ParameterDefinition ( + ImportType (fnptr.Parameters [i].ParameterType, context))); + + return imported_fnptr; + 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: + var var_parameter = (GenericParameter) type; + if (var_parameter.DeclaringType == null) + throw new InvalidOperationException (); + return context.TypeParameter (var_parameter.DeclaringType.FullName, var_parameter.Position); + case ElementType.MVar: + var mvar_parameter = (GenericParameter) type; + if (mvar_parameter.DeclaringMethod == null) + throw new InvalidOperationException (); + return context.MethodParameter (context.NormalizeMethodName (mvar_parameter.DeclaringMethod), mvar_parameter.Position); + } + + throw new NotSupportedException (type.etype.ToString ()); + } + + FieldReference ImportField (FieldReference field, ImportGenericContext context) + { + var declaring_type = ImportType (field.DeclaringType, context); + + context.Push (declaring_type); + try { + return new FieldReference { + Name = field.Name, + DeclaringType = declaring_type, + FieldType = ImportType (field.FieldType, context), + }; + } finally { + context.Pop (); + } + } + + MethodReference ImportMethod (MethodReference method, ImportGenericContext 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, + CallingConvention = method.CallingConvention, + }; + + if (method.HasGenericParameters) + ImportGenericParameters (reference, method); + + context.Push (reference); + try { + reference.ReturnType = ImportType (method.ReturnType, context); + + if (!method.HasParameters) + return reference; + + var parameters = method.Parameters; + var reference_parameters = reference.parameters = new ParameterDefinitionCollection (reference, parameters.Count); + for (int i = 0; i < parameters.Count; i++) + reference_parameters.Add ( + new ParameterDefinition (ImportType (parameters [i].ParameterType, context))); + + return reference; + } finally { + context.Pop(); + } + } + + MethodSpecification ImportMethodSpecification (MethodReference method, ImportGenericContext 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; + } + + public virtual TypeReference ImportReference (TypeReference type, IGenericParameterProvider context) + { + Mixin.CheckType (type); + return ImportType (type, ImportGenericContext.For (context)); + } + + public virtual FieldReference ImportReference (FieldReference field, IGenericParameterProvider context) + { + Mixin.CheckField (field); + return ImportField (field, ImportGenericContext.For (context)); + } + + public virtual MethodReference ImportReference (MethodReference method, IGenericParameterProvider context) + { + Mixin.CheckMethod (method); + return ImportMethod (method, ImportGenericContext.For (context)); + } + } + +#endif + + static partial class Mixin { + + public static void CheckModule (ModuleDefinition module) + { + if (module == null) + throw new ArgumentNullException (Argument.module.ToString ()); + } + + public static bool TryGetAssemblyNameReference (this ModuleDefinition module, AssemblyNameReference name_reference, out AssemblyNameReference assembly_reference) + { + var references = module.AssemblyReferences; + + for (int i = 0; i < references.Count; i++) { + var reference = references [i]; + if (!Equals (name_reference, reference)) + continue; + + assembly_reference = reference; + return true; + } + + assembly_reference = null; + return false; + } + + static bool Equals (byte [] a, byte [] b) + { + if (ReferenceEquals (a, b)) + return true; + if (a == null) + return false; + if (a.Length != b.Length) + return false; + for (int i = 0; i < a.Length; i++) + if (a [i] != b [i]) + return false; + return true; + } + + static bool Equals (T a, T b) where T : class, IEquatable + { + if (ReferenceEquals (a, b)) + return true; + if (a == null) + return false; + return a.Equals (b); + } + + static bool Equals (AssemblyNameReference a, AssemblyNameReference b) + { + if (ReferenceEquals (a, b)) + return true; + if (a.Name != b.Name) + return false; + if (!Equals (a.Version, b.Version)) + return false; + if (a.Culture != b.Culture) + return false; + if (!Equals (a.PublicKeyToken, b.PublicKeyToken)) + return false; + return true; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs.meta new file mode 100644 index 0000000..b1cb60b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Import.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09435b52677bcb54c92b19343195c629 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs new file mode 100644 index 0000000..e53430e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs @@ -0,0 +1,42 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public sealed class LinkedResource : Resource { + + internal byte [] hash; + string file; + + public byte [] Hash { + get { return hash; } + } + + public string File { + get { return file; } + set { file = value; } + } + + public override ResourceType ResourceType { + get { return ResourceType.Linked; } + } + + public LinkedResource (string name, ManifestResourceAttributes flags) + : base (name, flags) + { + } + + public LinkedResource (string name, ManifestResourceAttributes flags, string file) + : base (name, flags) + { + this.file = file; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs.meta new file mode 100644 index 0000000..3d86a51 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/LinkedResource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 708ef0c806abcec4b8a1c4943ce3d3f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs new file mode 100644 index 0000000..03ccb6b --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs @@ -0,0 +1,21 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum ManifestResourceAttributes : uint { + VisibilityMask = 0x0007, + Public = 0x0001, // The resource is exported from the Assembly + Private = 0x0002 // The resource is private to the Assembly + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs.meta new file mode 100644 index 0000000..6f951f2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ManifestResourceAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3da4414473eac754db519b746fe0f7d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs new file mode 100644 index 0000000..47d935e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs @@ -0,0 +1,153 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public class MarshalInfo { + + internal NativeType native; + + public NativeType NativeType { + get { return native; } + set { native = value; } + } + + public MarshalInfo (NativeType native) + { + this.native = native; + } + } + + public sealed class ArrayMarshalInfo : MarshalInfo { + + internal NativeType element_type; + internal int size_parameter_index; + internal int size; + internal int size_parameter_multiplier; + + public NativeType ElementType { + get { return element_type; } + set { element_type = value; } + } + + public int SizeParameterIndex { + get { return size_parameter_index; } + set { size_parameter_index = value; } + } + + public int Size { + get { return size; } + set { size = value; } + } + + public int SizeParameterMultiplier { + get { return size_parameter_multiplier; } + set { size_parameter_multiplier = value; } + } + + public ArrayMarshalInfo () + : base (NativeType.Array) + { + element_type = NativeType.None; + size_parameter_index = -1; + size = -1; + size_parameter_multiplier = -1; + } + } + + public sealed class CustomMarshalInfo : MarshalInfo { + + internal Guid guid; + internal string unmanaged_type; + internal TypeReference managed_type; + internal string cookie; + + public Guid Guid { + get { return guid; } + set { guid = value; } + } + + public string UnmanagedType { + get { return unmanaged_type; } + set { unmanaged_type = value; } + } + + public TypeReference ManagedType { + get { return managed_type; } + set { managed_type = value; } + } + + public string Cookie { + get { return cookie; } + set { cookie = value; } + } + + public CustomMarshalInfo () + : base (NativeType.CustomMarshaler) + { + } + } + + public sealed class SafeArrayMarshalInfo : MarshalInfo { + + internal VariantType element_type; + + public VariantType ElementType { + get { return element_type; } + set { element_type = value; } + } + + public SafeArrayMarshalInfo () + : base (NativeType.SafeArray) + { + element_type = VariantType.None; + } + } + + public sealed class FixedArrayMarshalInfo : MarshalInfo { + + internal NativeType element_type; + internal int size; + + public NativeType ElementType { + get { return element_type; } + set { element_type = value; } + } + + public int Size { + get { return size; } + set { size = value; } + } + + public FixedArrayMarshalInfo () + : base (NativeType.FixedArray) + { + element_type = NativeType.None; + } + } + + public sealed class FixedSysStringMarshalInfo : MarshalInfo { + + internal int size; + + public int Size { + get { return size; } + set { size = value; } + } + + public FixedSysStringMarshalInfo () + : base (NativeType.FixedSysString) + { + size = -1; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs.meta new file mode 100644 index 0000000..5593e74 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MarshalInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 022df92728663594c8c77689274b3af0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs new file mode 100644 index 0000000..3872b2a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs @@ -0,0 +1,74 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + sealed class MemberDefinitionCollection : Collection where T : IMemberDefinition { + + TypeDefinition container; + + internal MemberDefinitionCollection (TypeDefinition container) + { + this.container = container; + } + + internal MemberDefinitionCollection (TypeDefinition container, int capacity) + : base (capacity) + { + this.container = container; + } + + protected override void OnAdd (T item, int index) + { + Attach (item); + } + + protected sealed override void OnSet (T item, int index) + { + Attach (item); + } + + protected sealed override void OnInsert (T item, int index) + { + Attach (item); + } + + protected sealed override void OnRemove (T item, int index) + { + Detach (item); + } + + protected sealed override void OnClear () + { + foreach (var definition in this) + Detach (definition); + } + + void Attach (T element) + { + if (element.DeclaringType == container) + return; + + if (element.DeclaringType != null) + throw new ArgumentException ("Member already attached"); + + element.DeclaringType = this.container; + } + + static void Detach (T element) + { + element.DeclaringType = null; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs.meta new file mode 100644 index 0000000..56618ad --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberDefinitionCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d9151147388ec345a3ce9b0fe6ce4d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs new file mode 100644 index 0000000..84fd38c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs @@ -0,0 +1,107 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public abstract class MemberReference : IMetadataTokenProvider { + + string name; + TypeReference declaring_type; + + internal MetadataToken token; + internal object projection; + + public virtual string Name { + get { return name; } + set { + if (IsWindowsRuntimeProjection && value != name) + throw new InvalidOperationException (); + + name = value; + } + } + + public abstract string FullName { + get; + } + + public virtual TypeReference DeclaringType { + get { return declaring_type; } + set { declaring_type = value; } + } + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + public bool IsWindowsRuntimeProjection { + get { return projection != null; } + } + + internal MemberReferenceProjection WindowsRuntimeProjection { + get { return (MemberReferenceProjection) projection; } + set { projection = value; } + } + + internal bool HasImage { + get { + var module = Module; + if (module == null) + return false; + + return module.HasImage; + } + } + + public virtual ModuleDefinition Module { + get { return declaring_type != null ? declaring_type.Module : null; } + } + + public virtual bool IsDefinition { + get { return false; } + } + + public virtual bool ContainsGenericParameter { + get { return declaring_type != null && declaring_type.ContainsGenericParameter; } + } + + internal MemberReference () + { + } + + internal MemberReference (string name) + { + this.name = name ?? string.Empty; + } + + internal string MemberFullName () + { + if (declaring_type == null) + return name; + + return declaring_type.FullName + "::" + name; + } + + public IMemberDefinition Resolve () + { + return ResolveDefinition (); + } + + protected abstract IMemberDefinition ResolveDefinition (); + + public override string ToString () + { + return FullName; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs.meta new file mode 100644 index 0000000..2b71751 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MemberReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a43899320d16ec4bafb5a4dad4ec10c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs new file mode 100644 index 0000000..630ec8a --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs @@ -0,0 +1,391 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public interface IAssemblyResolver : IDisposable { + AssemblyDefinition Resolve (AssemblyNameReference name); + AssemblyDefinition Resolve (AssemblyNameReference name, ReaderParameters parameters); + } + + public interface IMetadataResolver { + TypeDefinition Resolve (TypeReference type); + FieldDefinition Resolve (FieldReference field); + MethodDefinition Resolve (MethodReference method); + } + +#if !NET_CORE + [Serializable] +#endif + public sealed class ResolutionException : Exception { + + readonly MemberReference member; + + public MemberReference Member { + get { return member; } + } + + public IMetadataScope Scope { + get { + var type = member as TypeReference; + if (type != null) + return type.Scope; + + var declaring_type = member.DeclaringType; + if (declaring_type != null) + return declaring_type.Scope; + + throw new NotSupportedException (); + } + } + + public ResolutionException (MemberReference member) + : base ("Failed to resolve " + member.FullName) + { + if (member == null) + throw new ArgumentNullException ("member"); + + this.member = member; + } + + public ResolutionException (MemberReference member, Exception innerException) + : base ("Failed to resolve " + member.FullName, innerException) + { + if (member == null) + throw new ArgumentNullException ("member"); + + this.member = member; + } + +#if !NET_CORE + ResolutionException ( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) + : base (info, context) + { + } +#endif + } + + public class MetadataResolver : IMetadataResolver { + + readonly IAssemblyResolver assembly_resolver; + + public IAssemblyResolver AssemblyResolver { + get { return assembly_resolver; } + } + + public MetadataResolver (IAssemblyResolver assemblyResolver) + { + if (assemblyResolver == null) + throw new ArgumentNullException ("assemblyResolver"); + + assembly_resolver = assemblyResolver; + } + + public virtual TypeDefinition Resolve (TypeReference type) + { + Mixin.CheckType (type); + + type = type.GetElementType (); + + var scope = type.Scope; + + if (scope == null) + return null; + + switch (scope.MetadataScopeType) { + case MetadataScopeType.AssemblyNameReference: + var assembly = assembly_resolver.Resolve ((AssemblyNameReference) scope); + if (assembly == null) + return null; + + return GetType (assembly.MainModule, type); + case MetadataScopeType.ModuleDefinition: + return GetType ((ModuleDefinition) scope, type); + case MetadataScopeType.ModuleReference: + var modules = type.Module.Assembly.Modules; + var module_ref = (ModuleReference) scope; + for (int i = 0; i < modules.Count; i++) { + var netmodule = modules [i]; + if (netmodule.Name == module_ref.Name) + return GetType (netmodule, type); + } + break; + } + + throw new NotSupportedException (); + } + + static TypeDefinition GetType (ModuleDefinition module, TypeReference reference) + { + var type = GetTypeDefinition (module, reference); + if (type != null) + return type; + + if (!module.HasExportedTypes) + return null; + + var exported_types = module.ExportedTypes; + + for (int i = 0; i < exported_types.Count; i++) { + var exported_type = exported_types [i]; + if (exported_type.Name != reference.Name) + continue; + + if (exported_type.Namespace != reference.Namespace) + continue; + + return exported_type.Resolve (); + } + + return null; + } + + static TypeDefinition GetTypeDefinition (ModuleDefinition module, TypeReference type) + { + if (!type.IsNested) + return module.GetType (type.Namespace, type.Name); + + var declaring_type = type.DeclaringType.Resolve (); + if (declaring_type == null) + return null; + + return declaring_type.GetNestedType (type.TypeFullName ()); + } + + public virtual FieldDefinition Resolve (FieldReference field) + { + Mixin.CheckField (field); + + var type = Resolve (field.DeclaringType); + if (type == null) + return null; + + if (!type.HasFields) + return null; + + return GetField (type, field); + } + + FieldDefinition GetField (TypeDefinition type, FieldReference reference) + { + while (type != null) { + var field = GetField (type.Fields, reference); + if (field != null) + return field; + + if (type.BaseType == null) + return null; + + type = Resolve (type.BaseType); + } + + return null; + } + + static FieldDefinition GetField (Collection fields, FieldReference reference) + { + for (int i = 0; i < fields.Count; i++) { + var field = fields [i]; + + if (field.Name != reference.Name) + continue; + + if (!AreSame (field.FieldType, reference.FieldType)) + continue; + + return field; + } + + return null; + } + + public virtual MethodDefinition Resolve (MethodReference method) + { + Mixin.CheckMethod (method); + + var type = Resolve (method.DeclaringType); + if (type == null) + return null; + + method = method.GetElementMethod (); + + if (!type.HasMethods) + return null; + + return GetMethod (type, method); + } + + MethodDefinition GetMethod (TypeDefinition type, MethodReference reference) + { + while (type != null) { + var method = GetMethod (type.Methods, reference); + if (method != null) + return method; + + if (type.BaseType == null) + return null; + + type = Resolve (type.BaseType); + } + + return null; + } + + public static MethodDefinition GetMethod (Collection methods, MethodReference reference) + { + for (int i = 0; i < methods.Count; i++) { + var method = methods [i]; + + if (method.Name != reference.Name) + continue; + + if (method.HasGenericParameters != reference.HasGenericParameters) + continue; + + if (method.HasGenericParameters && method.GenericParameters.Count != reference.GenericParameters.Count) + continue; + + if (!AreSame (method.ReturnType, reference.ReturnType)) + continue; + + if (method.IsVarArg () != reference.IsVarArg ()) + continue; + + if (method.IsVarArg () && IsVarArgCallTo (method, reference)) + return method; + + if (method.HasParameters != reference.HasParameters) + continue; + + if (!method.HasParameters && !reference.HasParameters) + return method; + + if (!AreSame (method.Parameters, reference.Parameters)) + continue; + + return method; + } + + return null; + } + + static bool AreSame (Collection a, Collection b) + { + var count = a.Count; + + if (count != b.Count) + return false; + + if (count == 0) + return true; + + for (int i = 0; i < count; i++) + if (!AreSame (a [i].ParameterType, b [i].ParameterType)) + return false; + + return true; + } + + static bool IsVarArgCallTo (MethodDefinition method, MethodReference reference) + { + if (method.Parameters.Count >= reference.Parameters.Count) + return false; + + if (reference.GetSentinelPosition () != method.Parameters.Count) + return false; + + for (int i = 0; i < method.Parameters.Count; i++) + if (!AreSame (method.Parameters [i].ParameterType, reference.Parameters [i].ParameterType)) + return false; + + return true; + } + + static bool AreSame (TypeSpecification a, TypeSpecification b) + { + if (!AreSame (a.ElementType, b.ElementType)) + return false; + + if (a.IsGenericInstance) + return AreSame ((GenericInstanceType) a, (GenericInstanceType) b); + + if (a.IsRequiredModifier || a.IsOptionalModifier) + return AreSame ((IModifierType) a, (IModifierType) b); + + if (a.IsArray) + return AreSame ((ArrayType) a, (ArrayType) b); + + return true; + } + + static bool AreSame (ArrayType a, ArrayType b) + { + if (a.Rank != b.Rank) + return false; + + // TODO: dimensions + + return true; + } + + static bool AreSame (IModifierType a, IModifierType b) + { + return AreSame (a.ModifierType, b.ModifierType); + } + + static bool AreSame (GenericInstanceType a, GenericInstanceType b) + { + if (a.GenericArguments.Count != b.GenericArguments.Count) + return false; + + for (int i = 0; i < a.GenericArguments.Count; i++) + if (!AreSame (a.GenericArguments [i], b.GenericArguments [i])) + return false; + + return true; + } + + static bool AreSame (GenericParameter a, GenericParameter b) + { + return a.Position == b.Position; + } + + static bool AreSame (TypeReference a, TypeReference b) + { + if (ReferenceEquals (a, b)) + return true; + + if (a == null || b == null) + return false; + + if (a.etype != b.etype) + return false; + + if (a.IsGenericParameter) + return AreSame ((GenericParameter) a, (GenericParameter) b); + + if (a.IsTypeSpecification ()) + return AreSame ((TypeSpecification) a, (TypeSpecification) b); + + if (a.Name != b.Name || a.Namespace != b.Namespace) + return false; + + //TODO: check scope + + return AreSame (a.DeclaringType, b.DeclaringType); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs.meta new file mode 100644 index 0000000..5e2a1f6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 115424ceb0b6d534aa1ead91242724ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs new file mode 100644 index 0000000..6a2dd34 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs @@ -0,0 +1,429 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + struct Range { + public uint Start; + public uint Length; + + public Range (uint index, uint length) + { + this.Start = index; + this.Length = length; + } + } + + sealed class MetadataSystem { + + internal AssemblyNameReference [] AssemblyReferences; + internal ModuleReference [] ModuleReferences; + + internal TypeDefinition [] Types; + internal TypeReference [] TypeReferences; + + internal FieldDefinition [] Fields; + internal MethodDefinition [] Methods; + internal MemberReference [] MemberReferences; + + internal Dictionary> NestedTypes; + internal Dictionary ReverseNestedTypes; + internal Dictionary>> Interfaces; + internal Dictionary> ClassLayouts; + internal Dictionary FieldLayouts; + internal Dictionary FieldRVAs; + internal Dictionary FieldMarshals; + internal Dictionary> Constants; + internal Dictionary> Overrides; + internal Dictionary CustomAttributes; + internal Dictionary SecurityDeclarations; + internal Dictionary Events; + internal Dictionary Properties; + internal Dictionary> Semantics; + internal Dictionary> PInvokes; + internal Dictionary GenericParameters; + internal Dictionary> GenericConstraints; + + internal Document [] Documents; + internal Dictionary>> LocalScopes; + internal ImportDebugInformation [] ImportScopes; + internal Dictionary StateMachineMethods; + internal Dictionary []> CustomDebugInformations; + + static Dictionary> primitive_value_types; + + static void InitializePrimitives () + { + primitive_value_types = new Dictionary> (18, StringComparer.Ordinal) { + { "Void", new Row (ElementType.Void, false) }, + { "Boolean", new Row (ElementType.Boolean, true) }, + { "Char", new Row (ElementType.Char, true) }, + { "SByte", new Row (ElementType.I1, true) }, + { "Byte", new Row (ElementType.U1, true) }, + { "Int16", new Row (ElementType.I2, true) }, + { "UInt16", new Row (ElementType.U2, true) }, + { "Int32", new Row (ElementType.I4, true) }, + { "UInt32", new Row (ElementType.U4, true) }, + { "Int64", new Row (ElementType.I8, true) }, + { "UInt64", new Row (ElementType.U8, true) }, + { "Single", new Row (ElementType.R4, true) }, + { "Double", new Row (ElementType.R8, true) }, + { "String", new Row (ElementType.String, false) }, + { "TypedReference", new Row (ElementType.TypedByRef, false) }, + { "IntPtr", new Row (ElementType.I, true) }, + { "UIntPtr", new Row (ElementType.U, true) }, + { "Object", new Row (ElementType.Object, false) }, + }; + } + + public static void TryProcessPrimitiveTypeReference (TypeReference type) + { + if (type.Namespace != "System") + return; + + var scope = type.scope; + if (scope == null || scope.MetadataScopeType != MetadataScopeType.AssemblyNameReference) + return; + + Row primitive_data; + if (!TryGetPrimitiveData (type, out primitive_data)) + return; + + type.etype = primitive_data.Col1; + type.IsValueType = primitive_data.Col2; + } + + public static bool TryGetPrimitiveElementType (TypeDefinition type, out ElementType etype) + { + etype = ElementType.None; + + if (type.Namespace != "System") + return false; + + Row primitive_data; + if (TryGetPrimitiveData (type, out primitive_data)) { + etype = primitive_data.Col1; + return true; + } + + return false; + } + + static bool TryGetPrimitiveData (TypeReference type, out Row primitive_data) + { + if (primitive_value_types == null) + InitializePrimitives (); + + return primitive_value_types.TryGetValue (type.Name, out primitive_data); + } + + public void Clear () + { + if (NestedTypes != null) NestedTypes = new Dictionary> (capacity: 0); + if (ReverseNestedTypes != null) ReverseNestedTypes = new Dictionary (capacity: 0); + if (Interfaces != null) Interfaces = new Dictionary>> (capacity: 0); + if (ClassLayouts != null) ClassLayouts = new Dictionary> (capacity: 0); + if (FieldLayouts != null) FieldLayouts = new Dictionary (capacity: 0); + if (FieldRVAs != null) FieldRVAs = new Dictionary (capacity: 0); + if (FieldMarshals != null) FieldMarshals = new Dictionary (capacity: 0); + if (Constants != null) Constants = new Dictionary> (capacity: 0); + if (Overrides != null) Overrides = new Dictionary> (capacity: 0); + if (CustomAttributes != null) CustomAttributes = new Dictionary (capacity: 0); + if (SecurityDeclarations != null) SecurityDeclarations = new Dictionary (capacity: 0); + if (Events != null) Events = new Dictionary (capacity: 0); + if (Properties != null) Properties = new Dictionary (capacity: 0); + if (Semantics != null) Semantics = new Dictionary> (capacity: 0); + if (PInvokes != null) PInvokes = new Dictionary> (capacity: 0); + if (GenericParameters != null) GenericParameters = new Dictionary (capacity: 0); + if (GenericConstraints != null) GenericConstraints = new Dictionary> (capacity: 0); + + Documents = Empty.Array; + ImportScopes = Empty.Array; + if (LocalScopes != null) LocalScopes = new Dictionary>> (capacity: 0); + if (StateMachineMethods != null) StateMachineMethods = new Dictionary (capacity: 0); + } + + public AssemblyNameReference GetAssemblyNameReference (uint rid) + { + if (rid < 1 || rid > AssemblyReferences.Length) + return null; + + return AssemblyReferences [rid - 1]; + } + + public TypeDefinition GetTypeDefinition (uint rid) + { + if (rid < 1 || rid > Types.Length) + return null; + + return Types [rid - 1]; + } + + public void AddTypeDefinition (TypeDefinition type) + { + Types [type.token.RID - 1] = type; + } + + public TypeReference GetTypeReference (uint rid) + { + if (rid < 1 || rid > TypeReferences.Length) + return null; + + return TypeReferences [rid - 1]; + } + + public void AddTypeReference (TypeReference type) + { + TypeReferences [type.token.RID - 1] = type; + } + + public FieldDefinition GetFieldDefinition (uint rid) + { + if (rid < 1 || rid > Fields.Length) + return null; + + return Fields [rid - 1]; + } + + public void AddFieldDefinition (FieldDefinition field) + { + Fields [field.token.RID - 1] = field; + } + + public MethodDefinition GetMethodDefinition (uint rid) + { + if (rid < 1 || rid > Methods.Length) + return null; + + return Methods [rid - 1]; + } + + public void AddMethodDefinition (MethodDefinition method) + { + Methods [method.token.RID - 1] = method; + } + + public MemberReference GetMemberReference (uint rid) + { + if (rid < 1 || rid > MemberReferences.Length) + return null; + + return MemberReferences [rid - 1]; + } + + public void AddMemberReference (MemberReference member) + { + MemberReferences [member.token.RID - 1] = member; + } + + public bool TryGetNestedTypeMapping (TypeDefinition type, out Collection mapping) + { + return NestedTypes.TryGetValue (type.token.RID, out mapping); + } + + public void SetNestedTypeMapping (uint type_rid, Collection mapping) + { + NestedTypes [type_rid] = mapping; + } + + public void RemoveNestedTypeMapping (TypeDefinition type) + { + NestedTypes.Remove (type.token.RID); + } + + public bool TryGetReverseNestedTypeMapping (TypeDefinition type, out uint declaring) + { + return ReverseNestedTypes.TryGetValue (type.token.RID, out declaring); + } + + public void SetReverseNestedTypeMapping (uint nested, uint declaring) + { + ReverseNestedTypes [nested] = declaring; + } + + public void RemoveReverseNestedTypeMapping (TypeDefinition type) + { + ReverseNestedTypes.Remove (type.token.RID); + } + + public bool TryGetInterfaceMapping (TypeDefinition type, out Collection> mapping) + { + return Interfaces.TryGetValue (type.token.RID, out mapping); + } + + public void SetInterfaceMapping (uint type_rid, Collection> mapping) + { + Interfaces [type_rid] = mapping; + } + + public void RemoveInterfaceMapping (TypeDefinition type) + { + Interfaces.Remove (type.token.RID); + } + + public void AddPropertiesRange (uint type_rid, Range range) + { + Properties.Add (type_rid, range); + } + + public bool TryGetPropertiesRange (TypeDefinition type, out Range range) + { + return Properties.TryGetValue (type.token.RID, out range); + } + + public void RemovePropertiesRange (TypeDefinition type) + { + Properties.Remove (type.token.RID); + } + + public void AddEventsRange (uint type_rid, Range range) + { + Events.Add (type_rid, range); + } + + public bool TryGetEventsRange (TypeDefinition type, out Range range) + { + return Events.TryGetValue (type.token.RID, out range); + } + + public void RemoveEventsRange (TypeDefinition type) + { + Events.Remove (type.token.RID); + } + + public bool TryGetGenericParameterRanges (IGenericParameterProvider owner, out Range [] ranges) + { + return GenericParameters.TryGetValue (owner.MetadataToken, out ranges); + } + + public void RemoveGenericParameterRange (IGenericParameterProvider owner) + { + GenericParameters.Remove (owner.MetadataToken); + } + + public bool TryGetCustomAttributeRanges (ICustomAttributeProvider owner, out Range [] ranges) + { + return CustomAttributes.TryGetValue (owner.MetadataToken, out ranges); + } + + public void RemoveCustomAttributeRange (ICustomAttributeProvider owner) + { + CustomAttributes.Remove (owner.MetadataToken); + } + + public bool TryGetSecurityDeclarationRanges (ISecurityDeclarationProvider owner, out Range [] ranges) + { + return SecurityDeclarations.TryGetValue (owner.MetadataToken, out ranges); + } + + public void RemoveSecurityDeclarationRange (ISecurityDeclarationProvider owner) + { + SecurityDeclarations.Remove (owner.MetadataToken); + } + + public bool TryGetGenericConstraintMapping (GenericParameter generic_parameter, out Collection mapping) + { + return GenericConstraints.TryGetValue (generic_parameter.token.RID, out mapping); + } + + public void SetGenericConstraintMapping (uint gp_rid, Collection mapping) + { + GenericConstraints [gp_rid] = mapping; + } + + public void RemoveGenericConstraintMapping (GenericParameter generic_parameter) + { + GenericConstraints.Remove (generic_parameter.token.RID); + } + + public bool TryGetOverrideMapping (MethodDefinition method, out Collection mapping) + { + return Overrides.TryGetValue (method.token.RID, out mapping); + } + + public void SetOverrideMapping (uint rid, Collection mapping) + { + Overrides [rid] = mapping; + } + + public void RemoveOverrideMapping (MethodDefinition method) + { + Overrides.Remove (method.token.RID); + } + + public Document GetDocument (uint rid) + { + if (rid < 1 || rid > Documents.Length) + return null; + + return Documents [rid - 1]; + } + + public bool TryGetLocalScopes (MethodDefinition method, out Collection> scopes) + { + return LocalScopes.TryGetValue (method.MetadataToken.RID, out scopes); + } + + public void SetLocalScopes (uint method_rid, Collection> records) + { + LocalScopes [method_rid] = records; + } + + public ImportDebugInformation GetImportScope (uint rid) + { + if (rid < 1 || rid > ImportScopes.Length) + return null; + + return ImportScopes [rid - 1]; + } + + public bool TryGetStateMachineKickOffMethod (MethodDefinition method, out uint rid) + { + return StateMachineMethods.TryGetValue (method.MetadataToken.RID, out rid); + } + + public TypeDefinition GetFieldDeclaringType (uint field_rid) + { + return BinaryRangeSearch (Types, field_rid, true); + } + + public TypeDefinition GetMethodDeclaringType (uint method_rid) + { + return BinaryRangeSearch (Types, method_rid, false); + } + + static TypeDefinition BinaryRangeSearch (TypeDefinition [] types, uint rid, bool field) + { + int min = 0; + int max = types.Length - 1; + while (min <= max) { + int mid = min + ((max - min) / 2); + var type = types [mid]; + var range = field ? type.fields_range : type.methods_range; + + if (rid < range.Start) + max = mid - 1; + else if (rid >= range.Start + range.Length) + min = mid + 1; + else + return type; + } + + return null; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs.meta new file mode 100644 index 0000000..c980548 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MetadataSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fde9c40f8a8ba943a2574fa3af5fd40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs new file mode 100644 index 0000000..1bd7d12 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs @@ -0,0 +1,48 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum MethodAttributes : ushort { + MemberAccessMask = 0x0007, + CompilerControlled = 0x0000, // Member not referenceable + Private = 0x0001, // Accessible only by the parent type + FamANDAssem = 0x0002, // Accessible by sub-types only in this Assembly + Assembly = 0x0003, // Accessibly by anyone in the Assembly + Family = 0x0004, // Accessible only by type and sub-types + FamORAssem = 0x0005, // Accessibly by sub-types anywhere, plus anyone in assembly + Public = 0x0006, // Accessibly by anyone who has visibility to this scope + + Static = 0x0010, // Defined on type, else per instance + Final = 0x0020, // Method may not be overridden + Virtual = 0x0040, // Method is virtual + HideBySig = 0x0080, // Method hides by name+sig, else just by name + + VtableLayoutMask = 0x0100, // Use this mask to retrieve vtable attributes + ReuseSlot = 0x0000, // Method reuses existing slot in vtable + NewSlot = 0x0100, // Method always gets a new slot in the vtable + + CheckAccessOnOverride = 0x0200, // Method can only be overriden if also accessible + Abstract = 0x0400, // Method does not provide an implementation + SpecialName = 0x0800, // Method is special + + // Interop Attributes + PInvokeImpl = 0x2000, // Implementation is forwarded through PInvoke + UnmanagedExport = 0x0008, // Reserved: shall be zero for conforming implementations + + // Additional flags + RTSpecialName = 0x1000, // CLI provides 'special' behavior, depending upon the name of the method + HasSecurity = 0x4000, // Method has security associate with it + RequireSecObject = 0x8000 // Method calls another method containing security code + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs.meta new file mode 100644 index 0000000..4f2bfc3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34c8762fc49497f4ea79d858c002eb40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs new file mode 100644 index 0000000..f9c0e0c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs @@ -0,0 +1,22 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum MethodCallingConvention : byte { + Default = 0x0, + C = 0x1, + StdCall = 0x2, + ThisCall = 0x3, + FastCall = 0x4, + VarArg = 0x5, + Generic = 0x10, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs.meta new file mode 100644 index 0000000..0f67983 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodCallingConvention.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5281d78bd13c4d54abb75ff64ceb4995 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs new file mode 100644 index 0000000..76ce612 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs @@ -0,0 +1,545 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using Mono.Cecil.Cil; +using Mono.Collections.Generic; + +using RVA = System.UInt32; + +namespace Mono.Cecil { + + public sealed class MethodDefinition : MethodReference, IMemberDefinition, ISecurityDeclarationProvider, ICustomDebugInformationProvider { + + ushort attributes; + ushort impl_attributes; + internal volatile bool sem_attrs_ready; + internal MethodSemanticsAttributes sem_attrs; + Collection custom_attributes; + Collection security_declarations; + + internal RVA rva; + internal PInvokeInfo pinvoke; + Collection overrides; + + internal MethodBody body; + internal MethodDebugInformation debug_info; + internal Collection custom_infos; + + public override string Name { + get { return base.Name; } + set { + if (IsWindowsRuntimeProjection && value != base.Name) + throw new InvalidOperationException (); + + base.Name = value; + } + } + + public MethodAttributes Attributes { + get { return (MethodAttributes) attributes; } + set { + if (IsWindowsRuntimeProjection && (ushort) value != attributes) + throw new InvalidOperationException (); + + attributes = (ushort) value; + } + } + + public MethodImplAttributes ImplAttributes { + get { return (MethodImplAttributes) impl_attributes; } + set { + if (IsWindowsRuntimeProjection && (ushort) value != impl_attributes) + throw new InvalidOperationException (); + + impl_attributes = (ushort) value; + } + } + + public MethodSemanticsAttributes SemanticsAttributes { + get { + if (sem_attrs_ready) + return sem_attrs; + + if (HasImage) { + ReadSemantics (); + return sem_attrs; + } + + sem_attrs = MethodSemanticsAttributes.None; + sem_attrs_ready = true; + return sem_attrs; + } + set { sem_attrs = value; } + } + + internal new MethodDefinitionProjection WindowsRuntimeProjection { + get { return (MethodDefinitionProjection) projection; } + set { projection = value; } + } + + internal void ReadSemantics () + { + if (sem_attrs_ready) + return; + + var module = this.Module; + if (module == null) + return; + + if (!module.HasImage) + return; + + module.Read (this, (method, reader) => reader.ReadAllSemantics (method)); + } + + public bool HasSecurityDeclarations { + get { + if (security_declarations != null) + return security_declarations.Count > 0; + + return this.GetHasSecurityDeclarations (Module); + } + } + + public Collection SecurityDeclarations { + get { return security_declarations ?? (this.GetSecurityDeclarations (ref security_declarations, Module)); } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, Module)); } + } + + public int RVA { + get { return (int) rva; } + } + + public bool HasBody { + get { + return (attributes & (ushort) MethodAttributes.Abstract) == 0 && + (attributes & (ushort) MethodAttributes.PInvokeImpl) == 0 && + (impl_attributes & (ushort) MethodImplAttributes.InternalCall) == 0 && + (impl_attributes & (ushort) MethodImplAttributes.Native) == 0 && + (impl_attributes & (ushort) MethodImplAttributes.Unmanaged) == 0 && + (impl_attributes & (ushort) MethodImplAttributes.Runtime) == 0; + } + } + + public MethodBody Body { + get { + var local = this.body; + if (local != null) + return local; + + if (!HasBody) + return null; + + if (HasImage && rva != 0) + return Module.Read (ref body, this, (method, reader) => reader.ReadMethodBody (method)); + + return body = new MethodBody (this); + } + set { + var module = this.Module; + if (module == null) { + body = value; + return; + } + + // we reset Body to null in ILSpy to save memory; so we need that operation to be thread-safe + lock (module.SyncRoot) { + body = value; + if (value == null) + this.debug_info = null; + } + } + } + + public MethodDebugInformation DebugInformation { + get { + Mixin.Read (Body); + + if (debug_info != null) + return debug_info; + + return debug_info ?? (debug_info = new MethodDebugInformation (this)); + } + set { + debug_info = value; + } + } + + public bool HasPInvokeInfo { + get { + if (pinvoke != null) + return true; + + return IsPInvokeImpl; + } + } + + public PInvokeInfo PInvokeInfo { + get { + if (pinvoke != null) + return pinvoke; + + if (HasImage && IsPInvokeImpl) + return Module.Read (ref pinvoke, this, (method, reader) => reader.ReadPInvokeInfo (method)); + + return null; + } + set { + IsPInvokeImpl = true; + pinvoke = value; + } + } + + public bool HasOverrides { + get { + if (overrides != null) + return overrides.Count > 0; + + return HasImage && Module.Read (this, (method, reader) => reader.HasOverrides (method)); + } + } + + public Collection Overrides { + get { + if (overrides != null) + return overrides; + + if (HasImage) + return Module.Read (ref overrides, this, (method, reader) => reader.ReadOverrides (method)); + + return overrides = new Collection (); + } + } + + public override bool HasGenericParameters { + get { + if (generic_parameters != null) + return generic_parameters.Count > 0; + + return this.GetHasGenericParameters (Module); + } + } + + public override Collection GenericParameters { + get { return generic_parameters ?? (this.GetGenericParameters (ref generic_parameters, Module)); } + } + + public bool HasCustomDebugInformations { + get { + Mixin.Read (Body); + + return !custom_infos.IsNullOrEmpty (); + } + } + + public Collection CustomDebugInformations { + get { + Mixin.Read (Body); + + return custom_infos ?? (custom_infos = new Collection ()); + } + } + + #region MethodAttributes + + public bool IsCompilerControlled { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.CompilerControlled); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.CompilerControlled, value); } + } + + public bool IsPrivate { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Private); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Private, value); } + } + + public bool IsFamilyAndAssembly { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.FamANDAssem); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.FamANDAssem, value); } + } + + public bool IsAssembly { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Assembly); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Assembly, value); } + } + + public bool IsFamily { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Family); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Family, value); } + } + + public bool IsFamilyOrAssembly { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.FamORAssem); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.FamORAssem, value); } + } + + public bool IsPublic { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Public); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.MemberAccessMask, (ushort) MethodAttributes.Public, value); } + } + + public bool IsStatic { + get { return attributes.GetAttributes ((ushort) MethodAttributes.Static); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.Static, value); } + } + + public bool IsFinal { + get { return attributes.GetAttributes ((ushort) MethodAttributes.Final); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.Final, value); } + } + + public bool IsVirtual { + get { return attributes.GetAttributes ((ushort) MethodAttributes.Virtual); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.Virtual, value); } + } + + public bool IsHideBySig { + get { return attributes.GetAttributes ((ushort) MethodAttributes.HideBySig); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.HideBySig, value); } + } + + public bool IsReuseSlot { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.VtableLayoutMask, (ushort) MethodAttributes.ReuseSlot); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.VtableLayoutMask, (ushort) MethodAttributes.ReuseSlot, value); } + } + + public bool IsNewSlot { + get { return attributes.GetMaskedAttributes ((ushort) MethodAttributes.VtableLayoutMask, (ushort) MethodAttributes.NewSlot); } + set { attributes = attributes.SetMaskedAttributes ((ushort) MethodAttributes.VtableLayoutMask, (ushort) MethodAttributes.NewSlot, value); } + } + + public bool IsCheckAccessOnOverride { + get { return attributes.GetAttributes ((ushort) MethodAttributes.CheckAccessOnOverride); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.CheckAccessOnOverride, value); } + } + + public bool IsAbstract { + get { return attributes.GetAttributes ((ushort) MethodAttributes.Abstract); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.Abstract, value); } + } + + public bool IsSpecialName { + get { return attributes.GetAttributes ((ushort) MethodAttributes.SpecialName); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.SpecialName, value); } + } + + public bool IsPInvokeImpl { + get { return attributes.GetAttributes ((ushort) MethodAttributes.PInvokeImpl); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.PInvokeImpl, value); } + } + + public bool IsUnmanagedExport { + get { return attributes.GetAttributes ((ushort) MethodAttributes.UnmanagedExport); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.UnmanagedExport, value); } + } + + public bool IsRuntimeSpecialName { + get { return attributes.GetAttributes ((ushort) MethodAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.RTSpecialName, value); } + } + + public bool HasSecurity { + get { return attributes.GetAttributes ((ushort) MethodAttributes.HasSecurity); } + set { attributes = attributes.SetAttributes ((ushort) MethodAttributes.HasSecurity, value); } + } + + #endregion + + #region MethodImplAttributes + + public bool IsIL { + get { return impl_attributes.GetMaskedAttributes ((ushort) MethodImplAttributes.CodeTypeMask, (ushort) MethodImplAttributes.IL); } + set { impl_attributes = impl_attributes.SetMaskedAttributes ((ushort) MethodImplAttributes.CodeTypeMask, (ushort) MethodImplAttributes.IL, value); } + } + + public bool IsNative { + get { return impl_attributes.GetMaskedAttributes ((ushort) MethodImplAttributes.CodeTypeMask, (ushort) MethodImplAttributes.Native); } + set { impl_attributes = impl_attributes.SetMaskedAttributes ((ushort) MethodImplAttributes.CodeTypeMask, (ushort) MethodImplAttributes.Native, value); } + } + + public bool IsRuntime { + get { return impl_attributes.GetMaskedAttributes ((ushort) MethodImplAttributes.CodeTypeMask, (ushort) MethodImplAttributes.Runtime); } + set { impl_attributes = impl_attributes.SetMaskedAttributes ((ushort) MethodImplAttributes.CodeTypeMask, (ushort) MethodImplAttributes.Runtime, value); } + } + + public bool IsUnmanaged { + get { return impl_attributes.GetMaskedAttributes ((ushort) MethodImplAttributes.ManagedMask, (ushort) MethodImplAttributes.Unmanaged); } + set { impl_attributes = impl_attributes.SetMaskedAttributes ((ushort) MethodImplAttributes.ManagedMask, (ushort) MethodImplAttributes.Unmanaged, value); } + } + + public bool IsManaged { + get { return impl_attributes.GetMaskedAttributes ((ushort) MethodImplAttributes.ManagedMask, (ushort) MethodImplAttributes.Managed); } + set { impl_attributes = impl_attributes.SetMaskedAttributes ((ushort) MethodImplAttributes.ManagedMask, (ushort) MethodImplAttributes.Managed, value); } + } + + public bool IsForwardRef { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.ForwardRef); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.ForwardRef, value); } + } + + public bool IsPreserveSig { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.PreserveSig); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.PreserveSig, value); } + } + + public bool IsInternalCall { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.InternalCall); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.InternalCall, value); } + } + + public bool IsSynchronized { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.Synchronized); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.Synchronized, value); } + } + + public bool NoInlining { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.NoInlining); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.NoInlining, value); } + } + + public bool NoOptimization { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.NoOptimization); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.NoOptimization, value); } + } + + public bool AggressiveInlining { + get { return impl_attributes.GetAttributes ((ushort) MethodImplAttributes.AggressiveInlining); } + set { impl_attributes = impl_attributes.SetAttributes ((ushort) MethodImplAttributes.AggressiveInlining, value); } + } + + #endregion + + #region MethodSemanticsAttributes + + public bool IsSetter { + get { return this.GetSemantics (MethodSemanticsAttributes.Setter); } + set { this.SetSemantics (MethodSemanticsAttributes.Setter, value); } + } + + public bool IsGetter { + get { return this.GetSemantics (MethodSemanticsAttributes.Getter); } + set { this.SetSemantics (MethodSemanticsAttributes.Getter, value); } + } + + public bool IsOther { + get { return this.GetSemantics (MethodSemanticsAttributes.Other); } + set { this.SetSemantics (MethodSemanticsAttributes.Other, value); } + } + + public bool IsAddOn { + get { return this.GetSemantics (MethodSemanticsAttributes.AddOn); } + set { this.SetSemantics (MethodSemanticsAttributes.AddOn, value); } + } + + public bool IsRemoveOn { + get { return this.GetSemantics (MethodSemanticsAttributes.RemoveOn); } + set { this.SetSemantics (MethodSemanticsAttributes.RemoveOn, value); } + } + + public bool IsFire { + get { return this.GetSemantics (MethodSemanticsAttributes.Fire); } + set { this.SetSemantics (MethodSemanticsAttributes.Fire, value); } + } + + #endregion + + public new TypeDefinition DeclaringType { + get { return (TypeDefinition) base.DeclaringType; } + set { base.DeclaringType = value; } + } + + public bool IsConstructor { + get { + return this.IsRuntimeSpecialName + && this.IsSpecialName + && (this.Name == ".cctor" || this.Name == ".ctor"); + } + } + + public override bool IsDefinition { + get { return true; } + } + + internal MethodDefinition () + { + this.token = new MetadataToken (TokenType.Method); + } + + public MethodDefinition (string name, MethodAttributes attributes, TypeReference returnType) + : base (name, returnType) + { + this.attributes = (ushort) attributes; + this.HasThis = !this.IsStatic; + this.token = new MetadataToken (TokenType.Method); + } + + public override MethodDefinition Resolve () + { + return this; + } + } + + static partial class Mixin { + + public static ParameterDefinition GetParameter (this MethodBody self, int index) + { + var method = self.method; + + if (method.HasThis) { + if (index == 0) + return self.ThisParameter; + + index--; + } + + var parameters = method.Parameters; + + if (index < 0 || index >= parameters.size) + return null; + + return parameters [index]; + } + + public static VariableDefinition GetVariable (this MethodBody self, int index) + { + var variables = self.Variables; + + if (index < 0 || index >= variables.size) + return null; + + return variables [index]; + } + + public static bool GetSemantics (this MethodDefinition self, MethodSemanticsAttributes semantics) + { + return (self.SemanticsAttributes & semantics) != 0; + } + + public static void SetSemantics (this MethodDefinition self, MethodSemanticsAttributes semantics, bool value) + { + if (value) + self.SemanticsAttributes |= semantics; + else + self.SemanticsAttributes &= ~semantics; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs.meta new file mode 100644 index 0000000..6ae2482 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40c4310353c73bb449d61b0149e229b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs new file mode 100644 index 0000000..2f1f018 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs @@ -0,0 +1,36 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum MethodImplAttributes : ushort { + CodeTypeMask = 0x0003, + IL = 0x0000, // Method impl is CIL + Native = 0x0001, // Method impl is native + OPTIL = 0x0002, // Reserved: shall be zero in conforming implementations + Runtime = 0x0003, // Method impl is provided by the runtime + + ManagedMask = 0x0004, // Flags specifying whether the code is managed or unmanaged + Unmanaged = 0x0004, // Method impl is unmanaged, otherwise managed + Managed = 0x0000, // Method impl is managed + + // Implementation info and interop + ForwardRef = 0x0010, // Indicates method is defined; used primarily in merge scenarios + PreserveSig = 0x0080, // Reserved: conforming implementations may ignore + InternalCall = 0x1000, // Reserved: shall be zero in conforming implementations + Synchronized = 0x0020, // Method is single threaded through the body + NoOptimization = 0x0040, // Method is not optimized by the JIT. + NoInlining = 0x0008, // Method may not be inlined + AggressiveInlining = 0x0100, // Method should be inlined, if possible. + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs.meta new file mode 100644 index 0000000..ccb6af3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodImplAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6503a54321d96b04095a7da554ba60e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs new file mode 100644 index 0000000..bd5fb77 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs @@ -0,0 +1,202 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public class MethodReference : MemberReference, IMethodSignature, IGenericParameterProvider, IGenericContext { + + internal ParameterDefinitionCollection parameters; + MethodReturnType return_type; + + bool has_this; + bool explicit_this; + MethodCallingConvention calling_convention; + internal Collection generic_parameters; + + public virtual bool HasThis { + get { return has_this; } + set { has_this = value; } + } + + public virtual bool ExplicitThis { + get { return explicit_this; } + set { explicit_this = value; } + } + + public virtual MethodCallingConvention CallingConvention { + get { return calling_convention; } + set { calling_convention = value; } + } + + public virtual bool HasParameters { + get { return !parameters.IsNullOrEmpty (); } + } + + public virtual Collection Parameters { + get { + if (parameters == null) + parameters = new ParameterDefinitionCollection (this); + + return parameters; + } + } + + IGenericParameterProvider IGenericContext.Type { + get { + var declaring_type = this.DeclaringType; + var instance = declaring_type as GenericInstanceType; + if (instance != null) + return instance.ElementType; + + return declaring_type; + } + } + + IGenericParameterProvider IGenericContext.Method { + get { return this; } + } + + GenericParameterType IGenericParameterProvider.GenericParameterType { + get { return GenericParameterType.Method; } + } + + public virtual bool HasGenericParameters { + get { return !generic_parameters.IsNullOrEmpty (); } + } + + public virtual Collection GenericParameters { + get { + if (generic_parameters != null) + return generic_parameters; + + return generic_parameters = new GenericParameterCollection (this); + } + } + + public TypeReference ReturnType { + get { + var return_type = MethodReturnType; + return return_type != null ? return_type.ReturnType : null; + } + set { + var return_type = MethodReturnType; + if (return_type != null) + return_type.ReturnType = value; + } + } + + public virtual MethodReturnType MethodReturnType { + get { return return_type; } + set { return_type = value; } + } + + public override string FullName { + get { + var builder = new StringBuilder (); + builder.Append (ReturnType.FullName) + .Append (" ") + .Append (MemberFullName ()); + this.MethodSignatureFullName (builder); + return builder.ToString (); + } + } + + public virtual bool IsGenericInstance { + get { return false; } + } + + public override bool ContainsGenericParameter { + get { + if (this.ReturnType.ContainsGenericParameter || base.ContainsGenericParameter) + return true; + + if (!HasParameters) + return false; + + var parameters = this.Parameters; + + for (int i = 0; i < parameters.Count; i++) + if (parameters [i].ParameterType.ContainsGenericParameter) + return true; + + return false; + } + } + + internal MethodReference () + { + this.return_type = new MethodReturnType (this); + this.token = new MetadataToken (TokenType.MemberRef); + } + + public MethodReference (string name, TypeReference returnType) + : base (name) + { + Mixin.CheckType (returnType, Mixin.Argument.returnType); + + this.return_type = new MethodReturnType (this); + this.return_type.ReturnType = returnType; + this.token = new MetadataToken (TokenType.MemberRef); + } + + public MethodReference (string name, TypeReference returnType, TypeReference declaringType) + : this (name, returnType) + { + Mixin.CheckType (declaringType, Mixin.Argument.declaringType); + + this.DeclaringType = declaringType; + } + + public virtual MethodReference GetElementMethod () + { + return this; + } + + protected override IMemberDefinition ResolveDefinition () + { + return this.Resolve (); + } + + public new virtual MethodDefinition Resolve () + { + var module = this.Module; + if (module == null) + throw new NotSupportedException (); + + return module.Resolve (this); + } + } + + static partial class Mixin { + + public static bool IsVarArg (this IMethodSignature self) + { + return self.CallingConvention == MethodCallingConvention.VarArg; + } + + public static int GetSentinelPosition (this IMethodSignature self) + { + if (!self.HasParameters) + return -1; + + var parameters = self.Parameters; + for (int i = 0; i < parameters.Count; i++) + if (parameters [i].ParameterType.IsSentinel) + return i; + + return -1; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs.meta new file mode 100644 index 0000000..4fe6075 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e0d9d63996b5d74e880719ce746ca55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs new file mode 100644 index 0000000..71a78de --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs @@ -0,0 +1,98 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System.Threading; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class MethodReturnType : IConstantProvider, ICustomAttributeProvider, IMarshalInfoProvider { + + internal IMethodSignature method; + internal ParameterDefinition parameter; + TypeReference return_type; + + public IMethodSignature Method { + get { return method; } + } + + public TypeReference ReturnType { + get { return return_type; } + set { return_type = value; } + } + + internal ParameterDefinition Parameter { + get { + if (parameter == null) + Interlocked.CompareExchange (ref parameter, new ParameterDefinition (return_type, method), null); + + return parameter; + } + } + + public MetadataToken MetadataToken { + get { return Parameter.MetadataToken; } + set { Parameter.MetadataToken = value; } + } + + public ParameterAttributes Attributes { + get { return Parameter.Attributes; } + set { Parameter.Attributes = value; } + } + + public string Name { + get { return Parameter.Name; } + set { Parameter.Name = value; } + } + + public bool HasCustomAttributes { + get { return parameter != null && parameter.HasCustomAttributes; } + } + + public Collection CustomAttributes { + get { return Parameter.CustomAttributes; } + } + + public bool HasDefault { + get { return parameter != null && parameter.HasDefault; } + set { Parameter.HasDefault = value; } + } + + public bool HasConstant { + get { return parameter != null && parameter.HasConstant; } + set { Parameter.HasConstant = value; } + } + + public object Constant { + get { return Parameter.Constant; } + set { Parameter.Constant = value; } + } + + public bool HasFieldMarshal { + get { return parameter != null && parameter.HasFieldMarshal; } + set { Parameter.HasFieldMarshal = value; } + } + + public bool HasMarshalInfo { + get { return parameter != null && parameter.HasMarshalInfo; } + } + + public MarshalInfo MarshalInfo { + get { return Parameter.MarshalInfo; } + set { Parameter.MarshalInfo = value; } + } + + public MethodReturnType (IMethodSignature method) + { + this.method = method; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs.meta new file mode 100644 index 0000000..ab4759e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodReturnType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9fba6f8fac26b24888122fb6421cafd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs new file mode 100644 index 0000000..274dfd0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs @@ -0,0 +1,25 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum MethodSemanticsAttributes : ushort { + None = 0x0000, + Setter = 0x0001, // Setter for property + Getter = 0x0002, // Getter for property + Other = 0x0004, // Other method for property or event + AddOn = 0x0008, // AddOn method for event + RemoveOn = 0x0010, // RemoveOn method for event + Fire = 0x0020 // Fire method for event + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs.meta new file mode 100644 index 0000000..322a7e2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSemanticsAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98e0c5b2ceef1b34f8fbe72448b47272 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs new file mode 100644 index 0000000..040be6e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs @@ -0,0 +1,84 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public abstract class MethodSpecification : MethodReference { + + readonly MethodReference method; + + public MethodReference ElementMethod { + get { return method; } + } + + public override string Name { + get { return method.Name; } + set { throw new InvalidOperationException (); } + } + + public override MethodCallingConvention CallingConvention { + get { return method.CallingConvention; } + set { throw new InvalidOperationException (); } + } + + public override bool HasThis { + get { return method.HasThis; } + set { throw new InvalidOperationException (); } + } + + public override bool ExplicitThis { + get { return method.ExplicitThis; } + set { throw new InvalidOperationException (); } + } + + public override MethodReturnType MethodReturnType { + get { return method.MethodReturnType; } + set { throw new InvalidOperationException (); } + } + + public override TypeReference DeclaringType { + get { return method.DeclaringType; } + set { throw new InvalidOperationException (); } + } + + public override ModuleDefinition Module { + get { return method.Module; } + } + + public override bool HasParameters { + get { return method.HasParameters; } + } + + public override Collection Parameters { + get { return method.Parameters; } + } + + public override bool ContainsGenericParameter { + get { return method.ContainsGenericParameter; } + } + + internal MethodSpecification (MethodReference method) + { + Mixin.CheckMethod (method); + + this.method = method; + this.token = new MetadataToken (TokenType.MethodSpec); + } + + public sealed override MethodReference GetElementMethod () + { + return method.GetElementMethod (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs.meta new file mode 100644 index 0000000..9d4edf6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/MethodSpecification.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 693989e44c5ac3a41a08f3bfa6988f4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs new file mode 100644 index 0000000..9c50f0e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs @@ -0,0 +1,112 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public interface IModifierType { + TypeReference ModifierType { get; } + TypeReference ElementType { get; } + } + + public sealed class OptionalModifierType : TypeSpecification, IModifierType { + + TypeReference modifier_type; + + public TypeReference ModifierType { + get { return modifier_type; } + set { modifier_type = value; } + } + + public override string Name { + get { return base.Name + Suffix; } + } + + public override string FullName { + get { return base.FullName + Suffix; } + } + + string Suffix { + get { return " modopt(" + modifier_type + ")"; } + } + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override bool IsOptionalModifier { + get { return true; } + } + + public override bool ContainsGenericParameter { + get { return modifier_type.ContainsGenericParameter || base.ContainsGenericParameter; } + } + + public OptionalModifierType (TypeReference modifierType, TypeReference type) + : base (type) + { + if (modifierType == null) + throw new ArgumentNullException (Mixin.Argument.modifierType.ToString ()); + Mixin.CheckType (type); + this.modifier_type = modifierType; + this.etype = MD.ElementType.CModOpt; + } + } + + public sealed class RequiredModifierType : TypeSpecification, IModifierType { + + TypeReference modifier_type; + + public TypeReference ModifierType { + get { return modifier_type; } + set { modifier_type = value; } + } + + public override string Name { + get { return base.Name + Suffix; } + } + + public override string FullName { + get { return base.FullName + Suffix; } + } + + string Suffix { + get { return " modreq(" + modifier_type + ")"; } + } + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override bool IsRequiredModifier { + get { return true; } + } + + public override bool ContainsGenericParameter { + get { return modifier_type.ContainsGenericParameter || base.ContainsGenericParameter; } + } + + public RequiredModifierType (TypeReference modifierType, TypeReference type) + : base (type) + { + if (modifierType == null) + throw new ArgumentNullException (Mixin.Argument.modifierType.ToString ()); + Mixin.CheckType (type); + this.modifier_type = modifierType; + this.etype = MD.ElementType.CModReqD; + } + + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs.meta new file mode 100644 index 0000000..62e636d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Modifiers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10d05b766386f3a4191c647595130cc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs new file mode 100644 index 0000000..4bee2f8 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs @@ -0,0 +1,1373 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using SR = System.Reflection; + +using Mono.Cecil.Cil; +using Mono.Cecil.Metadata; +using Mono.Cecil.PE; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public enum ReadingMode { + Immediate = 1, + Deferred = 2, + } + + public sealed class ReaderParameters { + + ReadingMode reading_mode; + internal IAssemblyResolver assembly_resolver; + internal IMetadataResolver metadata_resolver; +#if !READ_ONLY + internal IMetadataImporterProvider metadata_importer_provider; + internal IReflectionImporterProvider reflection_importer_provider; +#endif + Stream symbol_stream; + ISymbolReaderProvider symbol_reader_provider; + bool read_symbols; + bool throw_symbols_mismatch; + bool projections; + bool in_memory; + bool read_write; + + public ReadingMode ReadingMode { + get { return reading_mode; } + set { reading_mode = value; } + } + + public bool InMemory { + get { return in_memory; } + set { in_memory = value; } + } + + public IAssemblyResolver AssemblyResolver { + get { return assembly_resolver; } + set { assembly_resolver = value; } + } + + public IMetadataResolver MetadataResolver { + get { return metadata_resolver; } + set { metadata_resolver = value; } + } + +#if !READ_ONLY + public IMetadataImporterProvider MetadataImporterProvider { + get { return metadata_importer_provider; } + set { metadata_importer_provider = value; } + } + + public IReflectionImporterProvider ReflectionImporterProvider { + get { return reflection_importer_provider; } + set { reflection_importer_provider = value; } + } +#endif + + public Stream SymbolStream { + get { return symbol_stream; } + set { symbol_stream = value; } + } + + public ISymbolReaderProvider SymbolReaderProvider { + get { return symbol_reader_provider; } + set { symbol_reader_provider = value; } + } + + public bool ReadSymbols { + get { return read_symbols; } + set { read_symbols = value; } + } + + public bool ThrowIfSymbolsAreNotMatching { + get { return throw_symbols_mismatch; } + set { throw_symbols_mismatch = value; } + } + + public bool ReadWrite { + get { return read_write; } + set { read_write = value; } + } + + public bool ApplyWindowsRuntimeProjections { + get { return projections; } + set { projections = value; } + } + + public ReaderParameters () + : this (ReadingMode.Deferred) + { + } + + public ReaderParameters (ReadingMode readingMode) + { + this.reading_mode = readingMode; + this.throw_symbols_mismatch = true; + } + } + +#if !READ_ONLY + + public sealed class ModuleParameters { + + ModuleKind kind; + TargetRuntime runtime; + uint? timestamp; + TargetArchitecture architecture; + IAssemblyResolver assembly_resolver; + IMetadataResolver metadata_resolver; +#if !READ_ONLY + IMetadataImporterProvider metadata_importer_provider; + IReflectionImporterProvider reflection_importer_provider; +#endif + + public ModuleKind Kind { + get { return kind; } + set { kind = value; } + } + + public TargetRuntime Runtime { + get { return runtime; } + set { runtime = value; } + } + + public uint? Timestamp { + get { return timestamp; } + set { timestamp = value; } + } + + public TargetArchitecture Architecture { + get { return architecture; } + set { architecture = value; } + } + + public IAssemblyResolver AssemblyResolver { + get { return assembly_resolver; } + set { assembly_resolver = value; } + } + + public IMetadataResolver MetadataResolver { + get { return metadata_resolver; } + set { metadata_resolver = value; } + } + +#if !READ_ONLY + public IMetadataImporterProvider MetadataImporterProvider { + get { return metadata_importer_provider; } + set { metadata_importer_provider = value; } + } + + public IReflectionImporterProvider ReflectionImporterProvider { + get { return reflection_importer_provider; } + set { reflection_importer_provider = value; } + } +#endif + + public ModuleParameters () + { + this.kind = ModuleKind.Dll; + this.Runtime = GetCurrentRuntime (); + this.architecture = TargetArchitecture.I386; + } + + static TargetRuntime GetCurrentRuntime () + { +#if !NET_CORE + return typeof (object).Assembly.ImageRuntimeVersion.ParseRuntime (); +#else + var corlib_name = AssemblyNameReference.Parse (typeof (object).Assembly ().FullName); + var corlib_version = corlib_name.Version; + + switch (corlib_version.Major) { + case 1: + return corlib_version.Minor == 0 + ? TargetRuntime.Net_1_0 + : TargetRuntime.Net_1_1; + case 2: + return TargetRuntime.Net_2_0; + case 4: + return TargetRuntime.Net_4_0; + default: + throw new NotSupportedException (); + } +#endif + } + } + + public sealed class WriterParameters { + + uint? timestamp; + Stream symbol_stream; + ISymbolWriterProvider symbol_writer_provider; + bool write_symbols; +#if !NET_CORE + SR.StrongNameKeyPair key_pair; +#endif + + public uint? Timestamp { + get { return timestamp; } + set { timestamp = value; } + } + + public Stream SymbolStream { + get { return symbol_stream; } + set { symbol_stream = value; } + } + + public ISymbolWriterProvider SymbolWriterProvider { + get { return symbol_writer_provider; } + set { symbol_writer_provider = value; } + } + + public bool WriteSymbols { + get { return write_symbols; } + set { write_symbols = value; } + } + +#if !NET_CORE + public SR.StrongNameKeyPair StrongNameKeyPair { + get { return key_pair; } + set { key_pair = value; } + } +#endif + } + +#endif + + public sealed class ModuleDefinition : ModuleReference, ICustomAttributeProvider, ICustomDebugInformationProvider, IDisposable { + + internal Image Image; + internal MetadataSystem MetadataSystem; + internal ReadingMode ReadingMode; + internal ISymbolReaderProvider SymbolReaderProvider; + + internal ISymbolReader symbol_reader; + internal Disposable assembly_resolver; + internal IMetadataResolver metadata_resolver; + internal TypeSystem type_system; + internal readonly MetadataReader reader; + readonly string file_name; + + internal string runtime_version; + internal ModuleKind kind; + WindowsRuntimeProjections projections; + MetadataKind metadata_kind; + TargetRuntime runtime; + TargetArchitecture architecture; + ModuleAttributes attributes; + ModuleCharacteristics characteristics; + Guid mvid; + + internal ushort linker_version = 8; + internal ushort subsystem_major = 4; + internal ushort subsystem_minor = 0; + internal uint timestamp; + + internal AssemblyDefinition assembly; + MethodDefinition entry_point; + +#if !READ_ONLY + internal IReflectionImporter reflection_importer; + internal IMetadataImporter metadata_importer; +#endif + Collection custom_attributes; + Collection references; + Collection modules; + Collection resources; + Collection exported_types; + TypeDefinitionCollection types; + + internal Collection custom_infos; + +#if !READ_ONLY + internal MetadataBuilder metadata_builder; +#endif + + public bool IsMain { + get { return kind != ModuleKind.NetModule; } + } + + public ModuleKind Kind { + get { return kind; } + set { kind = value; } + } + + public MetadataKind MetadataKind { + get { return metadata_kind; } + set { metadata_kind = value; } + } + + internal WindowsRuntimeProjections Projections { + get { + if (projections == null) + Interlocked.CompareExchange (ref projections, new WindowsRuntimeProjections (this), null); + + return projections; + } + } + + public TargetRuntime Runtime { + get { return runtime; } + set { + runtime = value; + runtime_version = runtime.RuntimeVersionString (); + } + } + + public string RuntimeVersion { + get { return runtime_version; } + set { + runtime_version = value; + runtime = runtime_version.ParseRuntime (); + } + } + + public TargetArchitecture Architecture { + get { return architecture; } + set { architecture = value; } + } + + public ModuleAttributes Attributes { + get { return attributes; } + set { attributes = value; } + } + + public ModuleCharacteristics Characteristics { + get { return characteristics; } + set { characteristics = value; } + } + + [Obsolete ("Use FileName")] + public string FullyQualifiedName { + get { return file_name; } + } + + public string FileName { + get { return file_name; } + } + + public Guid Mvid { + get { return mvid; } + set { mvid = value; } + } + + internal bool HasImage { + get { return Image != null; } + } + + public bool HasSymbols { + get { return symbol_reader != null; } + } + + public ISymbolReader SymbolReader { + get { return symbol_reader; } + } + + public override MetadataScopeType MetadataScopeType { + get { return MetadataScopeType.ModuleDefinition; } + } + + public AssemblyDefinition Assembly { + get { return assembly; } + } + +#if !READ_ONLY + internal IReflectionImporter ReflectionImporter { + get { + if (reflection_importer == null) + Interlocked.CompareExchange (ref reflection_importer, new DefaultReflectionImporter (this), null); + + return reflection_importer; + } + } + + internal IMetadataImporter MetadataImporter { + get { + if (metadata_importer == null) + Interlocked.CompareExchange (ref metadata_importer, new DefaultMetadataImporter (this), null); + + return metadata_importer; + } + } +#endif + + public IAssemblyResolver AssemblyResolver { + get { + if (assembly_resolver.value == null) { + lock (module_lock) { + assembly_resolver = Disposable.Owned (new DefaultAssemblyResolver () as IAssemblyResolver); + } + } + + return assembly_resolver.value; + } + } + + public IMetadataResolver MetadataResolver { + get { + if (metadata_resolver == null) + Interlocked.CompareExchange (ref metadata_resolver, new MetadataResolver (this.AssemblyResolver), null); + + return metadata_resolver; + } + } + + public TypeSystem TypeSystem { + get { + if (type_system == null) + Interlocked.CompareExchange (ref type_system, TypeSystem.CreateTypeSystem (this), null); + + return type_system; + } + } + + public bool HasAssemblyReferences { + get { + if (references != null) + return references.Count > 0; + + return HasImage && Image.HasTable (Table.AssemblyRef); + } + } + + public Collection AssemblyReferences { + get { + if (references != null) + return references; + + if (HasImage) + return Read (ref references, this, (_, reader) => reader.ReadAssemblyReferences ()); + + return references = new Collection (); + } + } + + public bool HasModuleReferences { + get { + if (modules != null) + return modules.Count > 0; + + return HasImage && Image.HasTable (Table.ModuleRef); + } + } + + public Collection ModuleReferences { + get { + if (modules != null) + return modules; + + if (HasImage) + return Read (ref modules, this, (_, reader) => reader.ReadModuleReferences ()); + + return modules = new Collection (); + } + } + + public bool HasResources { + get { + if (resources != null) + return resources.Count > 0; + + if (HasImage) + return Image.HasTable (Table.ManifestResource) || Read (this, (_, reader) => reader.HasFileResource ()); + + return false; + } + } + + public Collection Resources { + get { + if (resources != null) + return resources; + + if (HasImage) + return Read (ref resources, this, (_, reader) => reader.ReadResources ()); + + return resources = new Collection (); + } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (this); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, this)); } + } + + public bool HasTypes { + get { + if (types != null) + return types.Count > 0; + + return HasImage && Image.HasTable (Table.TypeDef); + } + } + + public Collection Types { + get { + if (types != null) + return types; + + if (HasImage) + return Read (ref types, this, (_, reader) => reader.ReadTypes ()); + + return types = new TypeDefinitionCollection (this); + } + } + + public bool HasExportedTypes { + get { + if (exported_types != null) + return exported_types.Count > 0; + + return HasImage && Image.HasTable (Table.ExportedType); + } + } + + public Collection ExportedTypes { + get { + if (exported_types != null) + return exported_types; + + if (HasImage) + return Read (ref exported_types, this, (_, reader) => reader.ReadExportedTypes ()); + + return exported_types = new Collection (); + } + } + + public MethodDefinition EntryPoint { + get { + if (entry_point != null) + return entry_point; + + if (HasImage) + return Read (ref entry_point, this, (_, reader) => reader.ReadEntryPoint ()); + + return entry_point = null; + } + set { entry_point = value; } + } + + public bool HasCustomDebugInformations { + get { + return custom_infos != null && custom_infos.Count > 0; + } + } + + public Collection CustomDebugInformations { + get { + return custom_infos ?? (custom_infos = new Collection ()); + } + } + + internal ModuleDefinition () + { + this.MetadataSystem = new MetadataSystem (); + this.token = new MetadataToken (TokenType.Module, 1); + } + + internal ModuleDefinition (Image image) + : this () + { + this.Image = image; + this.kind = image.Kind; + this.RuntimeVersion = image.RuntimeVersion; + this.architecture = image.Architecture; + this.attributes = image.Attributes; + this.characteristics = image.Characteristics; + this.linker_version = image.LinkerVersion; + this.subsystem_major = image.SubSystemMajor; + this.subsystem_minor = image.SubSystemMinor; + this.file_name = image.FileName; + this.timestamp = image.Timestamp; + + this.reader = new MetadataReader (this); + } + + public void Dispose () + { + if (Image != null) + Image.Dispose (); + + if (symbol_reader != null) + symbol_reader.Dispose (); + + if (assembly_resolver.value != null) + assembly_resolver.Dispose (); + } + + public bool HasTypeReference (string fullName) + { + return HasTypeReference (string.Empty, fullName); + } + + public bool HasTypeReference (string scope, string fullName) + { + Mixin.CheckFullName (fullName); + + if (!HasImage) + return false; + + return GetTypeReference (scope, fullName) != null; + } + + public bool TryGetTypeReference (string fullName, out TypeReference type) + { + return TryGetTypeReference (string.Empty, fullName, out type); + } + + public bool TryGetTypeReference (string scope, string fullName, out TypeReference type) + { + Mixin.CheckFullName (fullName); + + if (!HasImage) { + type = null; + return false; + } + + return (type = GetTypeReference (scope, fullName)) != null; + } + + TypeReference GetTypeReference (string scope, string fullname) + { + return Read (new Row (scope, fullname), (row, reader) => reader.GetTypeReference (row.Col1, row.Col2)); + } + + public IEnumerable GetTypeReferences () + { + if (!HasImage) + return Empty.Array; + + return Read (this, (_, reader) => reader.GetTypeReferences ()); + } + + public IEnumerable GetMemberReferences () + { + if (!HasImage) + return Empty.Array; + + return Read (this, (_, reader) => reader.GetMemberReferences ()); + } + + public IEnumerable GetCustomAttributes () + { + if (!HasImage) + return Empty.Array; + + return Read (this, (_, reader) => reader.GetCustomAttributes ()); + } + + public TypeReference GetType (string fullName, bool runtimeName) + { + return runtimeName + ? TypeParser.ParseType (this, fullName, typeDefinitionOnly: true) + : GetType (fullName); + } + + public TypeDefinition GetType (string fullName) + { + Mixin.CheckFullName (fullName); + + var position = fullName.IndexOf ('/'); + if (position > 0) + return GetNestedType (fullName); + + return ((TypeDefinitionCollection) this.Types).GetType (fullName); + } + + public TypeDefinition GetType (string @namespace, string name) + { + Mixin.CheckName (name); + + return ((TypeDefinitionCollection) this.Types).GetType (@namespace ?? string.Empty, name); + } + + public IEnumerable GetTypes () + { + return GetTypes (Types); + } + + static IEnumerable GetTypes (Collection types) + { + for (int i = 0; i < types.Count; i++) { + var type = types [i]; + + yield return type; + + if (!type.HasNestedTypes) + continue; + + foreach (var nested in GetTypes (type.NestedTypes)) + yield return nested; + } + } + + TypeDefinition GetNestedType (string fullname) + { + var names = fullname.Split ('/'); + var type = GetType (names [0]); + + if (type == null) + return null; + + for (int i = 1; i < names.Length; i++) { + var nested_type = type.GetNestedType (names [i]); + if (nested_type == null) + return null; + + type = nested_type; + } + + return type; + } + + internal FieldDefinition Resolve (FieldReference field) + { + return MetadataResolver.Resolve (field); + } + + internal MethodDefinition Resolve (MethodReference method) + { + return MetadataResolver.Resolve (method); + } + + internal TypeDefinition Resolve (TypeReference type) + { + return MetadataResolver.Resolve (type); + } + +#if !READ_ONLY + + static void CheckContext (IGenericParameterProvider context, ModuleDefinition module) + { + if (context == null) + return; + + if (context.Module != module) + throw new ArgumentException (); + } + + [Obsolete ("Use ImportReference", error: false)] + public TypeReference Import (Type type) + { + return ImportReference (type, null); + } + + public TypeReference ImportReference (Type type) + { + return ImportReference (type, null); + } + + [Obsolete ("Use ImportReference", error: false)] + public TypeReference Import (Type type, IGenericParameterProvider context) + { + return ImportReference (type, context); + } + + public TypeReference ImportReference (Type type, IGenericParameterProvider context) + { + Mixin.CheckType (type); + CheckContext (context, this); + + return ReflectionImporter.ImportReference (type, context); + } + + [Obsolete ("Use ImportReference", error: false)] + public FieldReference Import (SR.FieldInfo field) + { + return ImportReference (field, null); + } + + [Obsolete ("Use ImportReference", error: false)] + public FieldReference Import (SR.FieldInfo field, IGenericParameterProvider context) + { + return ImportReference (field, context); + } + + public FieldReference ImportReference (SR.FieldInfo field) + { + return ImportReference (field, null); + } + + public FieldReference ImportReference (SR.FieldInfo field, IGenericParameterProvider context) + { + Mixin.CheckField (field); + CheckContext (context, this); + + return ReflectionImporter.ImportReference (field, context); + } + + [Obsolete ("Use ImportReference", error: false)] + public MethodReference Import (SR.MethodBase method) + { + return ImportReference (method, null); + } + + [Obsolete ("Use ImportReference", error: false)] + public MethodReference Import (SR.MethodBase method, IGenericParameterProvider context) + { + return ImportReference (method, context); + } + + public MethodReference ImportReference (SR.MethodBase method) + { + return ImportReference (method, null); + } + + public MethodReference ImportReference (SR.MethodBase method, IGenericParameterProvider context) + { + Mixin.CheckMethod (method); + CheckContext (context, this); + + return ReflectionImporter.ImportReference (method, context); + } + + [Obsolete ("Use ImportReference", error: false)] + public TypeReference Import (TypeReference type) + { + return ImportReference (type, null); + } + + [Obsolete ("Use ImportReference", error: false)] + public TypeReference Import (TypeReference type, IGenericParameterProvider context) + { + return ImportReference (type, context); + } + + public TypeReference ImportReference (TypeReference type) + { + return ImportReference (type, null); + } + + public TypeReference ImportReference (TypeReference type, IGenericParameterProvider context) + { + Mixin.CheckType (type); + + if (type.Module == this) + return type; + + CheckContext (context, this); + + return MetadataImporter.ImportReference (type, context); + } + + [Obsolete ("Use ImportReference", error: false)] + public FieldReference Import (FieldReference field) + { + return ImportReference (field, null); + } + + [Obsolete ("Use ImportReference", error: false)] + public FieldReference Import (FieldReference field, IGenericParameterProvider context) + { + return ImportReference (field, context); + } + + public FieldReference ImportReference (FieldReference field) + { + return ImportReference (field, null); + } + + public FieldReference ImportReference (FieldReference field, IGenericParameterProvider context) + { + Mixin.CheckField (field); + + if (field.Module == this) + return field; + + CheckContext (context, this); + + return MetadataImporter.ImportReference (field, context); + } + + [Obsolete ("Use ImportReference", error: false)] + public MethodReference Import (MethodReference method) + { + return ImportReference (method, null); + } + + [Obsolete ("Use ImportReference", error: false)] + public MethodReference Import (MethodReference method, IGenericParameterProvider context) + { + return ImportReference (method, context); + } + + public MethodReference ImportReference (MethodReference method) + { + return ImportReference (method, null); + } + + public MethodReference ImportReference (MethodReference method, IGenericParameterProvider context) + { + Mixin.CheckMethod (method); + + if (method.Module == this) + return method; + + CheckContext (context, this); + + return MetadataImporter.ImportReference (method, context); + } + +#endif + + public IMetadataTokenProvider LookupToken (int token) + { + return LookupToken (new MetadataToken ((uint) token)); + } + + public IMetadataTokenProvider LookupToken (MetadataToken token) + { + return Read (token, (t, reader) => reader.LookupToken (t)); + } + + readonly object module_lock = new object(); + + internal object SyncRoot { + get { return module_lock; } + } + + internal void Read (TItem item, Action read) + { + lock (module_lock) { + var position = reader.position; + var context = reader.context; + + read (item, reader); + + reader.position = position; + reader.context = context; + } + } + + internal TRet Read (TItem item, Func read) + { + lock (module_lock) { + var position = reader.position; + var context = reader.context; + + var ret = read (item, reader); + + reader.position = position; + reader.context = context; + + return ret; + } + } + + internal TRet Read (ref TRet variable, TItem item, Func read) where TRet : class + { + lock (module_lock) { + if (variable != null) + return variable; + + var position = reader.position; + var context = reader.context; + + var ret = read (item, reader); + + reader.position = position; + reader.context = context; + + return variable = ret; + } + } + + public bool HasDebugHeader { + get { return Image != null && Image.DebugHeader != null; } + } + + public ImageDebugHeader GetDebugHeader () + { + return Image.DebugHeader ?? new ImageDebugHeader (); + } + +#if !READ_ONLY + + public static ModuleDefinition CreateModule (string name, ModuleKind kind) + { + return CreateModule (name, new ModuleParameters { Kind = kind }); + } + + public static ModuleDefinition CreateModule (string name, ModuleParameters parameters) + { + Mixin.CheckName (name); + Mixin.CheckParameters (parameters); + + var module = new ModuleDefinition { + Name = name, + kind = parameters.Kind, + timestamp = parameters.Timestamp ?? Mixin.GetTimestamp (), + Runtime = parameters.Runtime, + architecture = parameters.Architecture, + mvid = Guid.NewGuid (), + Attributes = ModuleAttributes.ILOnly, + Characteristics = (ModuleCharacteristics) 0x8540, + }; + + if (parameters.AssemblyResolver != null) + module.assembly_resolver = Disposable.NotOwned (parameters.AssemblyResolver); + + if (parameters.MetadataResolver != null) + module.metadata_resolver = parameters.MetadataResolver; + +#if !READ_ONLY + if (parameters.MetadataImporterProvider != null) + module.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter (module); + if (parameters.ReflectionImporterProvider != null) + module.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter (module); +#endif + + if (parameters.Kind != ModuleKind.NetModule) { + var assembly = new AssemblyDefinition (); + module.assembly = assembly; + module.assembly.Name = CreateAssemblyName (name); + assembly.main_module = module; + } + + module.Types.Add (new TypeDefinition (string.Empty, "", TypeAttributes.NotPublic)); + + return module; + } + + static AssemblyNameDefinition CreateAssemblyName (string name) + { + if (name.EndsWith (".dll") || name.EndsWith (".exe")) + name = name.Substring (0, name.Length - 4); + + return new AssemblyNameDefinition (name, Mixin.ZeroVersion); + } + +#endif + + public void ReadSymbols () + { + if (string.IsNullOrEmpty (file_name)) + throw new InvalidOperationException (); + + var provider = new DefaultSymbolReaderProvider (throwIfNoSymbol: true); + ReadSymbols (provider.GetSymbolReader (this, file_name), throwIfSymbolsAreNotMaching: true); + } + + public void ReadSymbols (ISymbolReader reader) + { + ReadSymbols(reader, throwIfSymbolsAreNotMaching: true); + } + + public void ReadSymbols (ISymbolReader reader, bool throwIfSymbolsAreNotMaching) + { + if (reader == null) + throw new ArgumentNullException ("reader"); + + symbol_reader = reader; + + if (!symbol_reader.ProcessDebugHeader (GetDebugHeader ())) { + symbol_reader = null; + + if (throwIfSymbolsAreNotMaching) + throw new SymbolsNotMatchingException ("Symbols were found but are not matching the assembly"); + + return; + } + + if (HasImage && ReadingMode == ReadingMode.Immediate) { + var immediate_reader = new ImmediateModuleReader (Image); + immediate_reader.ReadSymbols (this); + } + } + + public static ModuleDefinition ReadModule (string fileName) + { + return ReadModule (fileName, new ReaderParameters (ReadingMode.Deferred)); + } + + public static ModuleDefinition ReadModule (string fileName, ReaderParameters parameters) + { + var stream = GetFileStream (fileName, FileMode.Open, parameters.ReadWrite ? FileAccess.ReadWrite : FileAccess.Read, FileShare.Read); + + if (parameters.InMemory) { + var memory = new MemoryStream (stream.CanSeek ? (int) stream.Length : 0); + using (stream) + stream.CopyTo (memory); + + memory.Position = 0; + stream = memory; + } + + try { + return ReadModule (Disposable.Owned (stream), fileName, parameters); + } catch (Exception) { + stream.Dispose (); + throw; + } + } + + static Stream GetFileStream (string fileName, FileMode mode, FileAccess access, FileShare share) + { + Mixin.CheckFileName (fileName); + + return new FileStream (fileName, mode, access, share); + } + + public static ModuleDefinition ReadModule (Stream stream) + { + return ReadModule (stream, new ReaderParameters (ReadingMode.Deferred)); + } + + public static ModuleDefinition ReadModule (Stream stream, ReaderParameters parameters) + { + Mixin.CheckStream (stream); + Mixin.CheckReadSeek (stream); + + return ReadModule (Disposable.NotOwned (stream), stream.GetFileName (), parameters); + } + + static ModuleDefinition ReadModule (Disposable stream, string fileName, ReaderParameters parameters) + { + Mixin.CheckParameters (parameters); + + return ModuleReader.CreateModule ( + ImageReader.ReadImage (stream, fileName), + parameters); + } + +#if !READ_ONLY + + public void Write (string fileName) + { + Write (fileName, new WriterParameters ()); + } + + public void Write (string fileName, WriterParameters parameters) + { + Mixin.CheckParameters (parameters); + var file = GetFileStream (fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read); + ModuleWriter.WriteModule (this, Disposable.Owned (file), parameters); + } + + public void Write () + { + Write (new WriterParameters ()); + } + + public void Write (WriterParameters parameters) + { + if (!HasImage) + throw new InvalidOperationException (); + + Write (Image.Stream.value, parameters); + } + + public void Write (Stream stream) + { + Write (stream, new WriterParameters ()); + } + + public void Write (Stream stream, WriterParameters parameters) + { + Mixin.CheckStream (stream); + Mixin.CheckWriteSeek (stream); + Mixin.CheckParameters (parameters); + + ModuleWriter.WriteModule (this, Disposable.NotOwned (stream), parameters); + } + +#endif + + } + + static partial class Mixin { + + public enum Argument { + name, + fileName, + fullName, + stream, + type, + method, + field, + parameters, + module, + modifierType, + eventType, + fieldType, + declaringType, + returnType, + propertyType, + interfaceType, + } + + public static void CheckName (object name) + { + if (name == null) + throw new ArgumentNullException (Argument.name.ToString ()); + } + + public static void CheckName (string name) + { + if (string.IsNullOrEmpty (name)) + throw new ArgumentNullOrEmptyException (Argument.name.ToString ()); + } + + public static void CheckFileName (string fileName) + { + if (string.IsNullOrEmpty (fileName)) + throw new ArgumentNullOrEmptyException (Argument.fileName.ToString ()); + } + + public static void CheckFullName (string fullName) + { + if (string.IsNullOrEmpty (fullName)) + throw new ArgumentNullOrEmptyException (Argument.fullName.ToString ()); + } + + public static void CheckStream (object stream) + { + if (stream == null) + throw new ArgumentNullException (Argument.stream.ToString ()); + } + + public static void CheckWriteSeek (Stream stream) + { + if (!stream.CanWrite || !stream.CanSeek) + throw new ArgumentException ("Stream must be writable and seekable."); + } + + public static void CheckReadSeek (Stream stream) + { + if (!stream.CanRead || !stream.CanSeek) + throw new ArgumentException ("Stream must be readable and seekable."); + } + + public static void CheckType (object type) + { + if (type == null) + throw new ArgumentNullException (Argument.type.ToString ()); + } + + public static void CheckType (object type, Argument argument) + { + if (type == null) + throw new ArgumentNullException (argument.ToString ()); + } + + public static void CheckField (object field) + { + if (field == null) + throw new ArgumentNullException (Argument.field.ToString ()); + } + + public static void CheckMethod (object method) + { + if (method == null) + throw new ArgumentNullException (Argument.method.ToString ()); + } + + public static void CheckParameters (object parameters) + { + if (parameters == null) + throw new ArgumentNullException (Argument.parameters.ToString ()); + } + + public static uint GetTimestamp () + { + return (uint) DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1)).TotalSeconds; + } + + public static bool HasImage (this ModuleDefinition self) + { + return self != null && self.HasImage; + } + + public static string GetFileName (this Stream self) + { + var file_stream = self as FileStream; + if (file_stream == null) + return string.Empty; + + return Path.GetFullPath (file_stream.Name); + } + +#if !NET_4_0 + public static void CopyTo (this Stream self, Stream target) + { + var buffer = new byte [1024 * 8]; + int read; + while ((read = self.Read (buffer, 0, buffer.Length)) > 0) + target.Write (buffer, 0, read); + } +#endif + + public static TargetRuntime ParseRuntime (this string self) + { + if (string.IsNullOrEmpty (self)) + return TargetRuntime.Net_4_0; + + switch (self [1]) { + case '1': + return self [3] == '0' + ? TargetRuntime.Net_1_0 + : TargetRuntime.Net_1_1; + case '2': + return TargetRuntime.Net_2_0; + case '4': + default: + return TargetRuntime.Net_4_0; + } + } + + public static string RuntimeVersionString (this TargetRuntime runtime) + { + switch (runtime) { + case TargetRuntime.Net_1_0: + return "v1.0.3705"; + case TargetRuntime.Net_1_1: + return "v1.1.4322"; + case TargetRuntime.Net_2_0: + return "v2.0.50727"; + case TargetRuntime.Net_4_0: + default: + return "v4.0.30319"; + } + } + + public static bool IsWindowsMetadata (this ModuleDefinition module) + { + return module.MetadataKind != MetadataKind.Ecma335; + } + + public static byte [] ReadAll (this Stream self) + { + int read; + var memory = new MemoryStream ((int) self.Length); + var buffer = new byte [1024]; + + while ((read = self.Read (buffer, 0, buffer.Length)) != 0) + memory.Write (buffer, 0, read); + + return memory.ToArray (); + } + + public static void Read (object o) + { + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs.meta new file mode 100644 index 0000000..631555f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d49f0528f69f844595d710a87d1f54b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs new file mode 100644 index 0000000..2cd084d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs @@ -0,0 +1,55 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public enum ModuleKind { + Dll, + Console, + Windows, + NetModule, + } + + public enum MetadataKind { + Ecma335, + WindowsMetadata, + ManagedWindowsMetadata, + } + + public enum TargetArchitecture { + I386 = 0x014c, + AMD64 = 0x8664, + IA64 = 0x0200, + ARM = 0x01c0, + ARMv7 = 0x01c4, + ARM64 = 0xaa64, + } + + [Flags] + public enum ModuleAttributes { + ILOnly = 1, + Required32Bit = 2, + ILLibrary = 4, + StrongNameSigned = 8, + Preferred32Bit = 0x00020000, + } + + [Flags] + public enum ModuleCharacteristics { + HighEntropyVA = 0x0020, + DynamicBase = 0x0040, + NoSEH = 0x0400, + NXCompat = 0x0100, + AppContainer = 0x1000, + TerminalServerAware = 0x8000, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs.meta new file mode 100644 index 0000000..3eaedfc --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleKind.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccc89c7c8a8633b429d424046a3fe842 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs new file mode 100644 index 0000000..43c618f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs @@ -0,0 +1,49 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public class ModuleReference : IMetadataScope { + + string name; + + internal MetadataToken token; + + public string Name { + get { return name; } + set { name = value; } + } + + public virtual MetadataScopeType MetadataScopeType { + get { return MetadataScopeType.ModuleReference; } + } + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + internal ModuleReference () + { + this.token = new MetadataToken (TokenType.ModuleRef); + } + + public ModuleReference (string name) + : this () + { + this.name = name; + } + + public override string ToString () + { + return name; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs.meta new file mode 100644 index 0000000..5a4ccfe --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ModuleReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3478446f6403514aa5cdddbc87c82e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs new file mode 100644 index 0000000..02174db --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs @@ -0,0 +1,55 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum NativeType { + None = 0x66, + + Boolean = 0x02, + I1 = 0x03, + U1 = 0x04, + I2 = 0x05, + U2 = 0x06, + I4 = 0x07, + U4 = 0x08, + I8 = 0x09, + U8 = 0x0a, + R4 = 0x0b, + R8 = 0x0c, + LPStr = 0x14, + Int = 0x1f, + UInt = 0x20, + Func = 0x26, + Array = 0x2a, + + // Msft specific + Currency = 0x0f, + BStr = 0x13, + LPWStr = 0x15, + LPTStr = 0x16, + FixedSysString = 0x17, + IUnknown = 0x19, + IDispatch = 0x1a, + Struct = 0x1b, + IntF = 0x1c, + SafeArray = 0x1d, + FixedArray = 0x1e, + ByValStr = 0x22, + ANSIBStr = 0x23, + TBStr = 0x24, + VariantBool = 0x25, + ASAny = 0x28, + LPStruct = 0x2b, + CustomMarshaler = 0x2c, + Error = 0x2d, + Max = 0x50 + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs.meta new file mode 100644 index 0000000..862bdfb --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/NativeType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22ba92c4ca4c8764aae5403a12f1c4f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs new file mode 100644 index 0000000..11e96d2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs @@ -0,0 +1,44 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum PInvokeAttributes : ushort { + NoMangle = 0x0001, // PInvoke is to use the member name as specified + + // Character set + CharSetMask = 0x0006, + CharSetNotSpec = 0x0000, + CharSetAnsi = 0x0002, + CharSetUnicode = 0x0004, + CharSetAuto = 0x0006, + + SupportsLastError = 0x0040, // Information about target function. Not relevant for fields + + // Calling convetion + CallConvMask = 0x0700, + CallConvWinapi = 0x0100, + CallConvCdecl = 0x0200, + CallConvStdCall = 0x0300, + CallConvThiscall = 0x0400, + CallConvFastcall = 0x0500, + + BestFitMask = 0x0030, + BestFitEnabled = 0x0010, + BestFitDisabled = 0x0020, + + ThrowOnUnmappableCharMask = 0x3000, + ThrowOnUnmappableCharEnabled = 0x1000, + ThrowOnUnmappableCharDisabled = 0x2000, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs.meta new file mode 100644 index 0000000..96e55d9 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf43e830fd6823140875efb6d5a59291 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs new file mode 100644 index 0000000..8efc010 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs @@ -0,0 +1,120 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public sealed class PInvokeInfo { + + ushort attributes; + string entry_point; + ModuleReference module; + + public PInvokeAttributes Attributes { + get { return (PInvokeAttributes) attributes; } + set { attributes = (ushort) value; } + } + + public string EntryPoint { + get { return entry_point; } + set { entry_point = value; } + } + + public ModuleReference Module { + get { return module; } + set { module = value; } + } + + #region PInvokeAttributes + + public bool IsNoMangle { + get { return attributes.GetAttributes ((ushort) PInvokeAttributes.NoMangle); } + set { attributes = attributes.SetAttributes ((ushort) PInvokeAttributes.NoMangle, value); } + } + + public bool IsCharSetNotSpec { + get { return attributes.GetMaskedAttributes((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetNotSpec); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetNotSpec, value); } + } + + public bool IsCharSetAnsi { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetAnsi); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetAnsi, value); } + } + + public bool IsCharSetUnicode { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetUnicode); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetUnicode, value); } + } + + public bool IsCharSetAuto { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetAuto); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CharSetMask, (ushort) PInvokeAttributes.CharSetAuto, value); } + } + + public bool SupportsLastError { + get { return attributes.GetAttributes ((ushort) PInvokeAttributes.SupportsLastError); } + set { attributes = attributes.SetAttributes ((ushort) PInvokeAttributes.SupportsLastError, value); } + } + + public bool IsCallConvWinapi { + get { return attributes.GetMaskedAttributes((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvWinapi); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvWinapi, value); } + } + + public bool IsCallConvCdecl { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvCdecl); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvCdecl, value); } + } + + public bool IsCallConvStdCall { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvStdCall); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvStdCall, value); } + } + + public bool IsCallConvThiscall { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvThiscall); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvThiscall, value); } + } + + public bool IsCallConvFastcall { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvFastcall); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.CallConvMask, (ushort) PInvokeAttributes.CallConvFastcall, value); } + } + + public bool IsBestFitEnabled { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.BestFitMask, (ushort) PInvokeAttributes.BestFitEnabled); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.BestFitMask, (ushort) PInvokeAttributes.BestFitEnabled, value); } + } + + public bool IsBestFitDisabled { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.BestFitMask, (ushort) PInvokeAttributes.BestFitDisabled); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.BestFitMask, (ushort) PInvokeAttributes.BestFitDisabled, value); } + } + + public bool IsThrowOnUnmappableCharEnabled { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.ThrowOnUnmappableCharMask, (ushort) PInvokeAttributes.ThrowOnUnmappableCharEnabled); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.ThrowOnUnmappableCharMask, (ushort) PInvokeAttributes.ThrowOnUnmappableCharEnabled, value); } + } + + public bool IsThrowOnUnmappableCharDisabled { + get { return attributes.GetMaskedAttributes ((ushort) PInvokeAttributes.ThrowOnUnmappableCharMask, (ushort) PInvokeAttributes.ThrowOnUnmappableCharDisabled); } + set { attributes = attributes.SetMaskedAttributes ((ushort) PInvokeAttributes.ThrowOnUnmappableCharMask, (ushort) PInvokeAttributes.ThrowOnUnmappableCharDisabled, value); } + } + + #endregion + + public PInvokeInfo (PInvokeAttributes attributes, string entryPoint, ModuleReference module) + { + this.attributes = (ushort) attributes; + this.entry_point = entryPoint; + this.module = module; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs.meta new file mode 100644 index 0000000..0585285 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PInvokeInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a72dde949719e0b448c4c363d302643f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs new file mode 100644 index 0000000..9a0e35e --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs @@ -0,0 +1,27 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum ParameterAttributes : ushort { + None = 0x0000, + In = 0x0001, // Param is [In] + Out = 0x0002, // Param is [Out] + Lcid = 0x0004, + Retval = 0x0008, + Optional = 0x0010, // Param is optional + HasDefault = 0x1000, // Param has default value + HasFieldMarshal = 0x2000, // Param has field marshal + Unused = 0xcfe0 // Reserved: shall be zero in a conforming implementation + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs.meta new file mode 100644 index 0000000..83f3fa7 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06293334d4e939d4d90a8431c4c90d22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs new file mode 100644 index 0000000..59bafe2 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs @@ -0,0 +1,146 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class ParameterDefinition : ParameterReference, ICustomAttributeProvider, IConstantProvider, IMarshalInfoProvider { + + ushort attributes; + + internal IMethodSignature method; + + object constant = Mixin.NotResolved; + Collection custom_attributes; + MarshalInfo marshal_info; + + public ParameterAttributes Attributes { + get { return (ParameterAttributes) attributes; } + set { attributes = (ushort) value; } + } + + public IMethodSignature Method { + get { return method; } + } + + public int Sequence { + get { + if (method == null) + return -1; + + return method.HasImplicitThis () ? index + 1 : index; + } + } + + public bool HasConstant { + get { + this.ResolveConstant (ref constant, parameter_type.Module); + + return constant != Mixin.NoValue; + } + set { if (!value) constant = Mixin.NoValue; } + } + + public object Constant { + get { return HasConstant ? constant : null; } + set { constant = value; } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (parameter_type.Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, parameter_type.Module)); } + } + + public bool HasMarshalInfo { + get { + if (marshal_info != null) + return true; + + return this.GetHasMarshalInfo (parameter_type.Module); + } + } + + public MarshalInfo MarshalInfo { + get { return marshal_info ?? (this.GetMarshalInfo (ref marshal_info, parameter_type.Module)); } + set { marshal_info = value; } + } + + #region ParameterAttributes + + public bool IsIn { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.In); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.In, value); } + } + + public bool IsOut { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.Out); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.Out, value); } + } + + public bool IsLcid { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.Lcid); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.Lcid, value); } + } + + public bool IsReturnValue { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.Retval); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.Retval, value); } + } + + public bool IsOptional { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.Optional); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.Optional, value); } + } + + public bool HasDefault { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.HasDefault); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.HasDefault, value); } + } + + public bool HasFieldMarshal { + get { return attributes.GetAttributes ((ushort) ParameterAttributes.HasFieldMarshal); } + set { attributes = attributes.SetAttributes ((ushort) ParameterAttributes.HasFieldMarshal, value); } + } + + #endregion + + internal ParameterDefinition (TypeReference parameterType, IMethodSignature method) + : this (string.Empty, ParameterAttributes.None, parameterType) + { + this.method = method; + } + + public ParameterDefinition (TypeReference parameterType) + : this (string.Empty, ParameterAttributes.None, parameterType) + { + } + + public ParameterDefinition (string name, ParameterAttributes attributes, TypeReference parameterType) + : base (name, parameterType) + { + this.attributes = (ushort) attributes; + this.token = new MetadataToken (TokenType.Param); + } + + public override ParameterDefinition Resolve () + { + return this; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs.meta new file mode 100644 index 0000000..340229d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a11bca6e19585a04295e5293504aa217 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs new file mode 100644 index 0000000..1a9764c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs @@ -0,0 +1,62 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + sealed class ParameterDefinitionCollection : Collection { + + readonly IMethodSignature method; + + internal ParameterDefinitionCollection (IMethodSignature method) + { + this.method = method; + } + + internal ParameterDefinitionCollection (IMethodSignature method, int capacity) + : base (capacity) + { + this.method = method; + } + + protected override void OnAdd (ParameterDefinition item, int index) + { + item.method = method; + item.index = index; + } + + protected override void OnInsert (ParameterDefinition item, int index) + { + item.method = method; + item.index = index; + + for (int i = index; i < size; i++) + items [i].index = i + 1; + } + + protected override void OnSet (ParameterDefinition item, int index) + { + item.method = method; + item.index = index; + } + + protected override void OnRemove (ParameterDefinition item, int index) + { + item.method = null; + item.index = -1; + + for (int i = index + 1; i < size; i++) + items [i].index = i - 1; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs.meta new file mode 100644 index 0000000..bac9c59 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterDefinitionCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb8d60b937d36fe40bd5620f59c71974 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs new file mode 100644 index 0000000..4670a56 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs @@ -0,0 +1,57 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + public abstract class ParameterReference : IMetadataTokenProvider { + + string name; + internal int index = -1; + protected TypeReference parameter_type; + internal MetadataToken token; + + public string Name { + get { return name; } + set { name = value; } + } + + public int Index { + get { return index; } + } + + public TypeReference ParameterType { + get { return parameter_type; } + set { parameter_type = value; } + } + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + internal ParameterReference (string name, TypeReference parameterType) + { + if (parameterType == null) + throw new ArgumentNullException ("parameterType"); + + this.name = name ?? string.Empty; + this.parameter_type = parameterType; + } + + public override string ToString () + { + return name; + } + + public abstract ParameterDefinition Resolve (); + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs.meta new file mode 100644 index 0000000..c586f13 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ParameterReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b97e35e595f92554aa83142e5c5ef8cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs new file mode 100644 index 0000000..fa89af5 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs @@ -0,0 +1,35 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class PinnedType : TypeSpecification { + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override bool IsPinned { + get { return true; } + } + + public PinnedType (TypeReference type) + : base (type) + { + Mixin.CheckType (type); + this.etype = MD.ElementType.Pinned; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs.meta new file mode 100644 index 0000000..745fae0 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PinnedType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 844e94005d6a69e4da4646f35ae6c519 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs new file mode 100644 index 0000000..4b21164 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs @@ -0,0 +1,43 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class PointerType : TypeSpecification { + + public override string Name { + get { return base.Name + "*"; } + } + + public override string FullName { + get { return base.FullName + "*"; } + } + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override bool IsPointer { + get { return true; } + } + + public PointerType (TypeReference type) + : base (type) + { + Mixin.CheckType (type); + this.etype = MD.ElementType.Ptr; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs.meta new file mode 100644 index 0000000..dfec3be --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PointerType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a139e10b73cdd7249802f57b256de67b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs new file mode 100644 index 0000000..4d1ce8c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs @@ -0,0 +1,23 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum PropertyAttributes : ushort { + None = 0x0000, + SpecialName = 0x0200, // Property is special + RTSpecialName = 0x0400, // Runtime(metadata internal APIs) should check name encoding + HasDefault = 0x1000, // Property has default + Unused = 0xe9ff // Reserved: shall be zero in a conforming implementation + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs.meta new file mode 100644 index 0000000..ab88482 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e9c0324f8f11a341bdd6b769d610021 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs new file mode 100644 index 0000000..87f2947 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs @@ -0,0 +1,244 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System.Text; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class PropertyDefinition : PropertyReference, IMemberDefinition, IConstantProvider { + + bool? has_this; + ushort attributes; + + Collection custom_attributes; + + internal MethodDefinition get_method; + internal MethodDefinition set_method; + internal Collection other_methods; + + object constant = Mixin.NotResolved; + + public PropertyAttributes Attributes { + get { return (PropertyAttributes) attributes; } + set { attributes = (ushort) value; } + } + + public bool HasThis { + get { + if (has_this.HasValue) + return has_this.Value; + + if (GetMethod != null) + return get_method.HasThis; + + if (SetMethod != null) + return set_method.HasThis; + + return false; + } + set { has_this = value; } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, Module)); } + } + + public MethodDefinition GetMethod { + get { + if (get_method != null) + return get_method; + + InitializeMethods (); + return get_method; + } + set { get_method = value; } + } + + public MethodDefinition SetMethod { + get { + if (set_method != null) + return set_method; + + InitializeMethods (); + return set_method; + } + set { set_method = value; } + } + + public bool HasOtherMethods { + get { + if (other_methods != null) + return other_methods.Count > 0; + + InitializeMethods (); + return !other_methods.IsNullOrEmpty (); + } + } + + public Collection OtherMethods { + get { + if (other_methods != null) + return other_methods; + + InitializeMethods (); + + if (other_methods != null) + return other_methods; + + return other_methods = new Collection (); + } + } + + public bool HasParameters { + get { + InitializeMethods (); + + if (get_method != null) + return get_method.HasParameters; + + if (set_method != null) + return set_method.HasParameters && set_method.Parameters.Count > 1; + + return false; + } + } + + public override Collection Parameters { + get { + InitializeMethods (); + + if (get_method != null) + return MirrorParameters (get_method, 0); + + if (set_method != null) + return MirrorParameters (set_method, 1); + + return new Collection (); + } + } + + static Collection MirrorParameters (MethodDefinition method, int bound) + { + var parameters = new Collection (); + if (!method.HasParameters) + return parameters; + + var original_parameters = method.Parameters; + var end = original_parameters.Count - bound; + + for (int i = 0; i < end; i++) + parameters.Add (original_parameters [i]); + + return parameters; + } + + public bool HasConstant { + get { + this.ResolveConstant (ref constant, Module); + + return constant != Mixin.NoValue; + } + set { if (!value) constant = Mixin.NoValue; } + } + + public object Constant { + get { return HasConstant ? constant : null; } + set { constant = value; } + } + + #region PropertyAttributes + + public bool IsSpecialName { + get { return attributes.GetAttributes ((ushort) PropertyAttributes.SpecialName); } + set { attributes = attributes.SetAttributes ((ushort) PropertyAttributes.SpecialName, value); } + } + + public bool IsRuntimeSpecialName { + get { return attributes.GetAttributes ((ushort) PropertyAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((ushort) PropertyAttributes.RTSpecialName, value); } + } + + public bool HasDefault { + get { return attributes.GetAttributes ((ushort) PropertyAttributes.HasDefault); } + set { attributes = attributes.SetAttributes ((ushort) PropertyAttributes.HasDefault, value); } + } + + #endregion + + public new TypeDefinition DeclaringType { + get { return (TypeDefinition) base.DeclaringType; } + set { base.DeclaringType = value; } + } + + public override bool IsDefinition { + get { return true; } + } + + public override string FullName { + get { + var builder = new StringBuilder (); + builder.Append (PropertyType.ToString ()); + builder.Append (' '); + builder.Append (MemberFullName ()); + builder.Append ('('); + if (HasParameters) { + var parameters = Parameters; + for (int i = 0; i < parameters.Count; i++) { + if (i > 0) + builder.Append (','); + builder.Append (parameters [i].ParameterType.FullName); + } + } + builder.Append (')'); + return builder.ToString (); + } + } + + public PropertyDefinition (string name, PropertyAttributes attributes, TypeReference propertyType) + : base (name, propertyType) + { + this.attributes = (ushort) attributes; + this.token = new MetadataToken (TokenType.Property); + } + + void InitializeMethods () + { + var module = this.Module; + if (module == null) + return; + + lock (module.SyncRoot) { + if (get_method != null || set_method != null) + return; + + if (!module.HasImage ()) + return; + + module.Read (this, (property, reader) => reader.ReadMethods (property)); + } + } + + public override PropertyDefinition Resolve () + { + return this; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs.meta new file mode 100644 index 0000000..3356194 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e14aa09f6174cf744a097497b5046ef8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs new file mode 100644 index 0000000..2434d0f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs @@ -0,0 +1,45 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public abstract class PropertyReference : MemberReference { + + TypeReference property_type; + + public TypeReference PropertyType { + get { return property_type; } + set { property_type = value; } + } + + public abstract Collection Parameters { + get; + } + + internal PropertyReference (string name, TypeReference propertyType) + : base (name) + { + Mixin.CheckType (propertyType, Mixin.Argument.propertyType); + + property_type = propertyType; + } + + protected override IMemberDefinition ResolveDefinition () + { + return this.Resolve (); + } + + public new abstract PropertyDefinition Resolve (); + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs.meta new file mode 100644 index 0000000..9cc296c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/PropertyReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: faba57a04c8c7714cbc0690ea84217a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs new file mode 100644 index 0000000..67686fb --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs @@ -0,0 +1,43 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class ByReferenceType : TypeSpecification { + + public override string Name { + get { return base.Name + "&"; } + } + + public override string FullName { + get { return base.FullName + "&"; } + } + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override bool IsByReference { + get { return true; } + } + + public ByReferenceType (TypeReference type) + : base (type) + { + Mixin.CheckType (type); + this.etype = MD.ElementType.ByRef; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs.meta new file mode 100644 index 0000000..2d42c32 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/ReferenceType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49e66d283eab59444a23a718ad37a5b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs new file mode 100644 index 0000000..cee75f9 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs @@ -0,0 +1,58 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum ResourceType { + Linked, + Embedded, + AssemblyLinked, + } + + public abstract class Resource { + + string name; + uint attributes; + + public string Name { + get { return name; } + set { name = value; } + } + + public ManifestResourceAttributes Attributes { + get { return (ManifestResourceAttributes) attributes; } + set { attributes = (uint) value; } + } + + public abstract ResourceType ResourceType { + get; + } + + #region ManifestResourceAttributes + + public bool IsPublic { + get { return attributes.GetMaskedAttributes ((uint) ManifestResourceAttributes.VisibilityMask, (uint) ManifestResourceAttributes.Public); } + set { attributes = attributes.SetMaskedAttributes ((uint) ManifestResourceAttributes.VisibilityMask, (uint) ManifestResourceAttributes.Public, value); } + } + + public bool IsPrivate { + get { return attributes.GetMaskedAttributes ((uint) ManifestResourceAttributes.VisibilityMask, (uint) ManifestResourceAttributes.Private); } + set { attributes = attributes.SetMaskedAttributes ((uint) ManifestResourceAttributes.VisibilityMask, (uint) ManifestResourceAttributes.Private, value); } + } + + #endregion + + internal Resource (string name, ManifestResourceAttributes attributes) + { + this.name = name; + this.attributes = (uint) attributes; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs.meta new file mode 100644 index 0000000..37f3df3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Resource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99628fe51ed555f47b1bd084b7324be8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs new file mode 100644 index 0000000..a18d14f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs @@ -0,0 +1,179 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Diagnostics; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public enum SecurityAction : ushort { + Request = 1, + Demand = 2, + Assert = 3, + Deny = 4, + PermitOnly = 5, + LinkDemand = 6, + InheritDemand = 7, + RequestMinimum = 8, + RequestOptional = 9, + RequestRefuse = 10, + PreJitGrant = 11, + PreJitDeny = 12, + NonCasDemand = 13, + NonCasLinkDemand = 14, + NonCasInheritance = 15 + } + + public interface ISecurityDeclarationProvider : IMetadataTokenProvider { + + bool HasSecurityDeclarations { get; } + Collection SecurityDeclarations { get; } + } + + [DebuggerDisplay ("{AttributeType}")] + public sealed class SecurityAttribute : ICustomAttribute { + + TypeReference attribute_type; + + internal Collection fields; + internal Collection properties; + + public TypeReference AttributeType { + get { return attribute_type; } + set { attribute_type = value; } + } + + public bool HasFields { + get { return !fields.IsNullOrEmpty (); } + } + + public Collection Fields { + get { return fields ?? (fields = new Collection ()); } + } + + public bool HasProperties { + get { return !properties.IsNullOrEmpty (); } + } + + public Collection Properties { + get { return properties ?? (properties = new Collection ()); } + } + + public SecurityAttribute (TypeReference attributeType) + { + this.attribute_type = attributeType; + } + + bool ICustomAttribute.HasConstructorArguments { + get { return false; } + } + + Collection ICustomAttribute.ConstructorArguments { + get { throw new NotSupportedException (); } + } + } + + public sealed class SecurityDeclaration { + + readonly internal uint signature; + byte [] blob; + readonly ModuleDefinition module; + + internal bool resolved; + SecurityAction action; + internal Collection security_attributes; + + public SecurityAction Action { + get { return action; } + set { action = value; } + } + + public bool HasSecurityAttributes { + get { + Resolve (); + + return !security_attributes.IsNullOrEmpty (); + } + } + + public Collection SecurityAttributes { + get { + Resolve (); + + return security_attributes ?? (security_attributes = new Collection ()); + } + } + + internal bool HasImage { + get { return module != null && module.HasImage; } + } + + internal SecurityDeclaration (SecurityAction action, uint signature, ModuleDefinition module) + { + this.action = action; + this.signature = signature; + this.module = module; + } + + public SecurityDeclaration (SecurityAction action) + { + this.action = action; + this.resolved = true; + } + + public SecurityDeclaration (SecurityAction action, byte [] blob) + { + this.action = action; + this.resolved = false; + this.blob = blob; + } + + public byte [] GetBlob () + { + if (blob != null) + return blob; + + if (!HasImage || signature == 0) + throw new NotSupportedException (); + + return blob = module.Read (this, (declaration, reader) => reader.ReadSecurityDeclarationBlob (declaration.signature)); + } + + void Resolve () + { + if (resolved || !HasImage) + return; + + module.Read (this, (declaration, reader) => reader.ReadSecurityDeclarationSignature (declaration)); + resolved = true; + } + } + + static partial class Mixin { + + public static bool GetHasSecurityDeclarations ( + this ISecurityDeclarationProvider self, + ModuleDefinition module) + { + return module.HasImage () && module.Read (self, (provider, reader) => reader.HasSecurityDeclarations (provider)); + } + + public static Collection GetSecurityDeclarations ( + this ISecurityDeclarationProvider self, + ref Collection variable, + ModuleDefinition module) + { + return module.HasImage () + ? module.Read (ref variable, self, (provider, reader) => reader.ReadSecurityDeclarations (provider)) + : variable = new Collection(); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs.meta new file mode 100644 index 0000000..1dd982d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SecurityDeclaration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29a6c6eac87923541b0674d43a15c8c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs new file mode 100644 index 0000000..b603cc3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs @@ -0,0 +1,35 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using MD = Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public sealed class SentinelType : TypeSpecification { + + public override bool IsValueType { + get { return false; } + set { throw new InvalidOperationException (); } + } + + public override bool IsSentinel { + get { return true; } + } + + public SentinelType (TypeReference type) + : base (type) + { + Mixin.CheckType (type); + this.etype = MD.ElementType.Sentinel; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs.meta new file mode 100644 index 0000000..45325c1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/SentinelType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f9700f4437692e4caf0db54ce16716c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs new file mode 100644 index 0000000..c1cd026 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs @@ -0,0 +1,19 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum TargetRuntime { + Net_1_0, + Net_1_1, + Net_2_0, + Net_4_0, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs.meta new file mode 100644 index 0000000..706a1d4 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TargetRuntime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbf12fb71c618f94492303cb56ab9979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs new file mode 100644 index 0000000..4ceaebf --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs @@ -0,0 +1,66 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + enum TypeDefinitionTreatment { + None = 0x0, + + KindMask = 0xf, + NormalType = 0x1, + NormalAttribute = 0x2, + UnmangleWindowsRuntimeName = 0x3, + PrefixWindowsRuntimeName = 0x4, + RedirectToClrType = 0x5, + RedirectToClrAttribute = 0x6, + + Abstract = 0x10, + Internal = 0x20, + } + + enum TypeReferenceTreatment { + None = 0x0, + SystemDelegate = 0x1, + SystemAttribute = 0x2, + UseProjectionInfo = 0x3, + } + + [Flags] + enum MethodDefinitionTreatment { + None = 0x0, + Dispose = 0x1, + Abstract = 0x2, + Private = 0x4, + Public = 0x8, + Runtime = 0x10, + InternalCall = 0x20, + } + + enum FieldDefinitionTreatment { + None = 0x0, + Public = 0x1, + } + + enum MemberReferenceTreatment { + None = 0x0, + Dispose = 0x1, + } + + enum CustomAttributeValueTreatment { + None = 0x0, + AllowSingle = 0x1, + AllowMultiple = 0x2, + VersionAttribute = 0x3, + DeprecatedAttribute = 0x4, + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs.meta new file mode 100644 index 0000000..b102ecc --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/Treatments.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ff6e35e6c317f5409145775af36100d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs new file mode 100644 index 0000000..92a71ac --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs @@ -0,0 +1,63 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono.Cecil { + + [Flags] + public enum TypeAttributes : uint { + // Visibility attributes + VisibilityMask = 0x00000007, // Use this mask to retrieve visibility information + NotPublic = 0x00000000, // Class has no public scope + Public = 0x00000001, // Class has public scope + NestedPublic = 0x00000002, // Class is nested with public visibility + NestedPrivate = 0x00000003, // Class is nested with private visibility + NestedFamily = 0x00000004, // Class is nested with family visibility + NestedAssembly = 0x00000005, // Class is nested with assembly visibility + NestedFamANDAssem = 0x00000006, // Class is nested with family and assembly visibility + NestedFamORAssem = 0x00000007, // Class is nested with family or assembly visibility + + // Class layout attributes + LayoutMask = 0x00000018, // Use this mask to retrieve class layout information + AutoLayout = 0x00000000, // Class fields are auto-laid out + SequentialLayout = 0x00000008, // Class fields are laid out sequentially + ExplicitLayout = 0x00000010, // Layout is supplied explicitly + + // Class semantics attributes + ClassSemanticMask = 0x00000020, // Use this mask to retrieve class semantics information + Class = 0x00000000, // Type is a class + Interface = 0x00000020, // Type is an interface + + // Special semantics in addition to class semantics + Abstract = 0x00000080, // Class is abstract + Sealed = 0x00000100, // Class cannot be extended + SpecialName = 0x00000400, // Class name is special + + // Implementation attributes + Import = 0x00001000, // Class/Interface is imported + Serializable = 0x00002000, // Class is serializable + WindowsRuntime = 0x00004000, // Windows Runtime type + + // String formatting attributes + StringFormatMask = 0x00030000, // Use this mask to retrieve string information for native interop + AnsiClass = 0x00000000, // LPSTR is interpreted as ANSI + UnicodeClass = 0x00010000, // LPSTR is interpreted as Unicode + AutoClass = 0x00020000, // LPSTR is interpreted automatically + + // Class initialization attributes + BeforeFieldInit = 0x00100000, // Initialize the class before first static field access + + // Additional flags + RTSpecialName = 0x00000800, // CLI provides 'special' behavior, depending upon the name of the Type + HasSecurity = 0x00040000, // Type has security associate with it + Forwarder = 0x00200000, // Exported type is a type forwarder + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs.meta new file mode 100644 index 0000000..5341016 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab4834d4761e74a4a8e809c6bc444f6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs new file mode 100644 index 0000000..6b6558c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs @@ -0,0 +1,609 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Cecil.Metadata; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public sealed class TypeDefinition : TypeReference, IMemberDefinition, ISecurityDeclarationProvider { + + uint attributes; + TypeReference base_type; + internal Range fields_range; + internal Range methods_range; + + short packing_size = Mixin.NotResolvedMarker; + int class_size = Mixin.NotResolvedMarker; + + InterfaceImplementationCollection interfaces; + Collection nested_types; + Collection methods; + Collection fields; + Collection events; + Collection properties; + Collection custom_attributes; + Collection security_declarations; + + public TypeAttributes Attributes { + get { return (TypeAttributes) attributes; } + set { + if (IsWindowsRuntimeProjection && (ushort) value != attributes) + throw new InvalidOperationException (); + + attributes = (uint) value; + } + } + + public TypeReference BaseType { + get { return base_type; } + set { base_type = value; } + } + + public override string Name { + get { return base.Name; } + set { + if (IsWindowsRuntimeProjection && value != base.Name) + throw new InvalidOperationException (); + + base.Name = value; + } + } + + void ResolveLayout () + { + if (packing_size != Mixin.NotResolvedMarker || class_size != Mixin.NotResolvedMarker) + return; + + if (!HasImage) { + packing_size = Mixin.NoDataMarker; + class_size = Mixin.NoDataMarker; + return; + } + + var row = Module.Read (this, (type, reader) => reader.ReadTypeLayout (type)); + + packing_size = row.Col1; + class_size = row.Col2; + } + + public bool HasLayoutInfo { + get { + if (packing_size >= 0 || class_size >= 0) + return true; + + ResolveLayout (); + + return packing_size >= 0 || class_size >= 0; + } + } + + public short PackingSize { + get { + if (packing_size >= 0) + return packing_size; + + ResolveLayout (); + + return packing_size >= 0 ? packing_size : (short) -1; + } + set { packing_size = value; } + } + + public int ClassSize { + get { + if (class_size >= 0) + return class_size; + + ResolveLayout (); + + return class_size >= 0 ? class_size : -1; + } + set { class_size = value; } + } + + public bool HasInterfaces { + get { + if (interfaces != null) + return interfaces.Count > 0; + + return HasImage && Module.Read (this, (type, reader) => reader.HasInterfaces (type)); + } + } + + public Collection Interfaces { + get { + if (interfaces != null) + return interfaces; + + if (HasImage) + return Module.Read (ref interfaces, this, (type, reader) => reader.ReadInterfaces (type)); + + return interfaces = new InterfaceImplementationCollection (this); + } + } + + public bool HasNestedTypes { + get { + if (nested_types != null) + return nested_types.Count > 0; + + return HasImage && Module.Read (this, (type, reader) => reader.HasNestedTypes (type)); + } + } + + public Collection NestedTypes { + get { + if (nested_types != null) + return nested_types; + + if (HasImage) + return Module.Read (ref nested_types, this, (type, reader) => reader.ReadNestedTypes (type)); + + return nested_types = new MemberDefinitionCollection (this); + } + } + + public bool HasMethods { + get { + if (methods != null) + return methods.Count > 0; + + return HasImage && methods_range.Length > 0; + } + } + + public Collection Methods { + get { + if (methods != null) + return methods; + + if (HasImage) + return Module.Read (ref methods, this, (type, reader) => reader.ReadMethods (type)); + + return methods = new MemberDefinitionCollection (this); + } + } + + public bool HasFields { + get { + if (fields != null) + return fields.Count > 0; + + return HasImage && fields_range.Length > 0; + } + } + + public Collection Fields { + get { + if (fields != null) + return fields; + + if (HasImage) + return Module.Read (ref fields, this, (type, reader) => reader.ReadFields (type)); + + return fields = new MemberDefinitionCollection (this); + } + } + + public bool HasEvents { + get { + if (events != null) + return events.Count > 0; + + return HasImage && Module.Read (this, (type, reader) => reader.HasEvents (type)); + } + } + + public Collection Events { + get { + if (events != null) + return events; + + if (HasImage) + return Module.Read (ref events, this, (type, reader) => reader.ReadEvents (type)); + + return events = new MemberDefinitionCollection (this); + } + } + + public bool HasProperties { + get { + if (properties != null) + return properties.Count > 0; + + return HasImage && Module.Read (this, (type, reader) => reader.HasProperties (type)); + } + } + + public Collection Properties { + get { + if (properties != null) + return properties; + + if (HasImage) + return Module.Read (ref properties, this, (type, reader) => reader.ReadProperties (type)); + + return properties = new MemberDefinitionCollection (this); + } + } + + public bool HasSecurityDeclarations { + get { + if (security_declarations != null) + return security_declarations.Count > 0; + + return this.GetHasSecurityDeclarations (Module); + } + } + + public Collection SecurityDeclarations { + get { return security_declarations ?? (this.GetSecurityDeclarations (ref security_declarations, Module)); } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + return this.GetHasCustomAttributes (Module); + } + } + + public Collection CustomAttributes { + get { return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, Module)); } + } + + public override bool HasGenericParameters { + get { + if (generic_parameters != null) + return generic_parameters.Count > 0; + + return this.GetHasGenericParameters (Module); + } + } + + public override Collection GenericParameters { + get { return generic_parameters ?? (this.GetGenericParameters (ref generic_parameters, Module)); } + } + + #region TypeAttributes + + public bool IsNotPublic { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NotPublic); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NotPublic, value); } + } + + public bool IsPublic { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.Public); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.Public, value); } + } + + public bool IsNestedPublic { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPublic); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPublic, value); } + } + + public bool IsNestedPrivate { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPrivate); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedPrivate, value); } + } + + public bool IsNestedFamily { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamily); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamily, value); } + } + + public bool IsNestedAssembly { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedAssembly); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedAssembly, value); } + } + + public bool IsNestedFamilyAndAssembly { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamANDAssem); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamANDAssem, value); } + } + + public bool IsNestedFamilyOrAssembly { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamORAssem); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.VisibilityMask, (uint) TypeAttributes.NestedFamORAssem, value); } + } + + public bool IsAutoLayout { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.AutoLayout); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.AutoLayout, value); } + } + + public bool IsSequentialLayout { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.SequentialLayout); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.SequentialLayout, value); } + } + + public bool IsExplicitLayout { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.ExplicitLayout); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.LayoutMask, (uint) TypeAttributes.ExplicitLayout, value); } + } + + public bool IsClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Class); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Class, value); } + } + + public bool IsInterface { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Interface); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.ClassSemanticMask, (uint) TypeAttributes.Interface, value); } + } + + public bool IsAbstract { + get { return attributes.GetAttributes ((uint) TypeAttributes.Abstract); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Abstract, value); } + } + + public bool IsSealed { + get { return attributes.GetAttributes ((uint) TypeAttributes.Sealed); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Sealed, value); } + } + + public bool IsSpecialName { + get { return attributes.GetAttributes ((uint) TypeAttributes.SpecialName); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.SpecialName, value); } + } + + public bool IsImport { + get { return attributes.GetAttributes ((uint) TypeAttributes.Import); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Import, value); } + } + + public bool IsSerializable { + get { return attributes.GetAttributes ((uint) TypeAttributes.Serializable); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.Serializable, value); } + } + + public bool IsWindowsRuntime { + get { return attributes.GetAttributes ((uint) TypeAttributes.WindowsRuntime); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.WindowsRuntime, value); } + } + + public bool IsAnsiClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AnsiClass); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AnsiClass, value); } + } + + public bool IsUnicodeClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.UnicodeClass); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.UnicodeClass, value); } + } + + public bool IsAutoClass { + get { return attributes.GetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AutoClass); } + set { attributes = attributes.SetMaskedAttributes ((uint) TypeAttributes.StringFormatMask, (uint) TypeAttributes.AutoClass, value); } + } + + public bool IsBeforeFieldInit { + get { return attributes.GetAttributes ((uint) TypeAttributes.BeforeFieldInit); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.BeforeFieldInit, value); } + } + + public bool IsRuntimeSpecialName { + get { return attributes.GetAttributes ((uint) TypeAttributes.RTSpecialName); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.RTSpecialName, value); } + } + + public bool HasSecurity { + get { return attributes.GetAttributes ((uint) TypeAttributes.HasSecurity); } + set { attributes = attributes.SetAttributes ((uint) TypeAttributes.HasSecurity, value); } + } + + #endregion + + public bool IsEnum { + get { return base_type != null && base_type.IsTypeOf ("System", "Enum"); } + } + + public override bool IsValueType { + get { + if (base_type == null) + return false; + + return base_type.IsTypeOf ("System", "Enum") || (base_type.IsTypeOf ("System", "ValueType") && !this.IsTypeOf ("System", "Enum")); + } + set { + throw new NotSupportedException (); + } + } + + public override bool IsPrimitive { + get { + ElementType primitive_etype; + return MetadataSystem.TryGetPrimitiveElementType (this, out primitive_etype) && primitive_etype.IsPrimitive (); + } + } + + public override MetadataType MetadataType { + get { + ElementType primitive_etype; + if (MetadataSystem.TryGetPrimitiveElementType (this, out primitive_etype)) + return (MetadataType) primitive_etype; + + return base.MetadataType; + } + } + + public override bool IsDefinition { + get { return true; } + } + + public new TypeDefinition DeclaringType { + get { return (TypeDefinition) base.DeclaringType; } + set { base.DeclaringType = value; } + } + + internal new TypeDefinitionProjection WindowsRuntimeProjection { + get { return (TypeDefinitionProjection) projection; } + set { projection = value; } + } + + public TypeDefinition (string @namespace, string name, TypeAttributes attributes) + : base (@namespace, name) + { + this.attributes = (uint) attributes; + this.token = new MetadataToken (TokenType.TypeDef); + } + + public TypeDefinition (string @namespace, string name, TypeAttributes attributes, TypeReference baseType) : + this (@namespace, name, attributes) + { + this.BaseType = baseType; + } + + protected override void ClearFullName () + { + base.ClearFullName (); + + if (!HasNestedTypes) + return; + + var nested_types = this.NestedTypes; + + for (int i = 0; i < nested_types.Count; i++) + nested_types [i].ClearFullName (); + } + + public override TypeDefinition Resolve () + { + return this; + } + } + + public sealed class InterfaceImplementation : ICustomAttributeProvider + { + internal TypeDefinition type; + internal MetadataToken token; + + TypeReference interface_type; + Collection custom_attributes; + + public TypeReference InterfaceType { + get { return interface_type; } + set { interface_type = value; } + } + + public bool HasCustomAttributes { + get { + if (custom_attributes != null) + return custom_attributes.Count > 0; + + if (type == null) + return false; + + return this.GetHasCustomAttributes (type.Module); + } + } + + public Collection CustomAttributes { + get { + if (type == null) + return custom_attributes = new Collection (); + + return custom_attributes ?? (this.GetCustomAttributes (ref custom_attributes, type.Module)); + } + } + + public MetadataToken MetadataToken { + get { return token; } + set { token = value; } + } + + internal InterfaceImplementation (TypeReference interfaceType, MetadataToken token) + { + this.interface_type = interfaceType; + this.token = token; + } + + public InterfaceImplementation (TypeReference interfaceType) + { + Mixin.CheckType (interfaceType, Mixin.Argument.interfaceType); + + this.interface_type = interfaceType; + this.token = new MetadataToken (TokenType.InterfaceImpl); + } + } + + class InterfaceImplementationCollection : Collection + { + readonly TypeDefinition type; + + internal InterfaceImplementationCollection (TypeDefinition type) + { + this.type = type; + } + + internal InterfaceImplementationCollection (TypeDefinition type, int length) + : base (length) + { + this.type = type; + } + + protected override void OnAdd (InterfaceImplementation item, int index) + { + item.type = type; + } + + protected override void OnInsert (InterfaceImplementation item, int index) + { + item.type = type; + } + + protected override void OnSet (InterfaceImplementation item, int index) + { + item.type = type; + } + + protected override void OnRemove (InterfaceImplementation item, int index) + { + item.type = null; + } + } + + static partial class Mixin { + + public static TypeReference GetEnumUnderlyingType (this TypeDefinition self) + { + var fields = self.Fields; + + for (int i = 0; i < fields.Count; i++) { + var field = fields [i]; + if (!field.IsStatic) + return field.FieldType; + } + + throw new ArgumentException (); + } + + public static TypeDefinition GetNestedType (this TypeDefinition self, string fullname) + { + if (!self.HasNestedTypes) + return null; + + var nested_types = self.NestedTypes; + + for (int i = 0; i < nested_types.Count; i++) { + var nested_type = nested_types [i]; + + if (nested_type.TypeFullName () == fullname) + return nested_type; + } + + return null; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs.meta new file mode 100644 index 0000000..e68e2f4 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 927909b9b12b6e7489b5c5294f0f674e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs new file mode 100644 index 0000000..95e39b9 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs @@ -0,0 +1,100 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +using Mono.Cecil.Metadata; + +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + using Slot = Row; + + sealed class TypeDefinitionCollection : Collection { + + readonly ModuleDefinition container; + readonly Dictionary name_cache; + + internal TypeDefinitionCollection (ModuleDefinition container) + { + this.container = container; + this.name_cache = new Dictionary (new RowEqualityComparer ()); + } + + internal TypeDefinitionCollection (ModuleDefinition container, int capacity) + : base (capacity) + { + this.container = container; + this.name_cache = new Dictionary (capacity, new RowEqualityComparer ()); + } + + protected override void OnAdd (TypeDefinition item, int index) + { + Attach (item); + } + + protected override void OnSet (TypeDefinition item, int index) + { + Attach (item); + } + + protected override void OnInsert (TypeDefinition item, int index) + { + Attach (item); + } + + protected override void OnRemove (TypeDefinition item, int index) + { + Detach (item); + } + + protected override void OnClear () + { + foreach (var type in this) + Detach (type); + } + + void Attach (TypeDefinition type) + { + if (type.Module != null && type.Module != container) + throw new ArgumentException ("Type already attached"); + + type.module = container; + type.scope = container; + name_cache [new Slot (type.Namespace, type.Name)] = type; + } + + void Detach (TypeDefinition type) + { + type.module = null; + type.scope = null; + name_cache.Remove (new Slot (type.Namespace, type.Name)); + } + + public TypeDefinition GetType (string fullname) + { + string @namespace, name; + TypeParser.SplitFullName (fullname, out @namespace, out name); + + return GetType (@namespace, name); + } + + public TypeDefinition GetType (string @namespace, string name) + { + TypeDefinition type; + if (name_cache.TryGetValue (new Slot (@namespace, name), out type)) + return type; + + return null; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs.meta new file mode 100644 index 0000000..72c9005 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeDefinitionCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f468dc7d9857a37498257486cd1394f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs new file mode 100644 index 0000000..07854cd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs @@ -0,0 +1,532 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Text; + +using Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + class TypeParser { + + class Type { + public const int Ptr = -1; + public const int ByRef = -2; + public const int SzArray = -3; + + public string type_fullname; + public string [] nested_names; + public int arity; + public int [] specs; + public Type [] generic_arguments; + public string assembly; + } + + readonly string fullname; + readonly int length; + + int position; + + TypeParser (string fullname) + { + this.fullname = fullname; + this.length = fullname.Length; + } + + Type ParseType (bool fq_name) + { + var type = new Type (); + type.type_fullname = ParsePart (); + + type.nested_names = ParseNestedNames (); + + if (TryGetArity (type)) + type.generic_arguments = ParseGenericArguments (type.arity); + + type.specs = ParseSpecs (); + + if (fq_name) + type.assembly = ParseAssemblyName (); + + return type; + } + + static bool TryGetArity (Type type) + { + int arity = 0; + + TryAddArity (type.type_fullname, ref arity); + + var nested_names = type.nested_names; + if (!nested_names.IsNullOrEmpty ()) { + for (int i = 0; i < nested_names.Length; i++) + TryAddArity (nested_names [i], ref arity); + } + + type.arity = arity; + return arity > 0; + } + + static bool TryGetArity (string name, out int arity) + { + arity = 0; + var index = name.LastIndexOf ('`'); + if (index == -1) + return false; + + return ParseInt32 (name.Substring (index + 1), out arity); + } + + static bool ParseInt32 (string value, out int result) + { + return int.TryParse (value, out result); + } + + static void TryAddArity (string name, ref int arity) + { + int type_arity; + if (!TryGetArity (name, out type_arity)) + return; + + arity += type_arity; + } + + string ParsePart () + { + var part = new StringBuilder (); + while (position < length && !IsDelimiter (fullname [position])) { + if (fullname [position] == '\\') + position++; + + part.Append (fullname [position++]); + } + + return part.ToString (); + } + + static bool IsDelimiter (char chr) + { + return "+,[]*&".IndexOf (chr) != -1; + } + + void TryParseWhiteSpace () + { + while (position < length && Char.IsWhiteSpace (fullname [position])) + position++; + } + + string [] ParseNestedNames () + { + string [] nested_names = null; + while (TryParse ('+')) + Add (ref nested_names, ParsePart ()); + + return nested_names; + } + + bool TryParse (char chr) + { + if (position < length && fullname [position] == chr) { + position++; + return true; + } + + return false; + } + + static void Add (ref T [] array, T item) + { + array = array.Add (item); + } + + int [] ParseSpecs () + { + int [] specs = null; + + while (position < length) { + switch (fullname [position]) { + case '*': + position++; + Add (ref specs, Type.Ptr); + break; + case '&': + position++; + Add (ref specs, Type.ByRef); + break; + case '[': + position++; + switch (fullname [position]) { + case ']': + position++; + Add (ref specs, Type.SzArray); + break; + case '*': + position++; + Add (ref specs, 1); + break; + default: + var rank = 1; + while (TryParse (',')) + rank++; + + Add (ref specs, rank); + + TryParse (']'); + break; + } + break; + default: + return specs; + } + } + + return specs; + } + + Type [] ParseGenericArguments (int arity) + { + Type [] generic_arguments = null; + + if (position == length || fullname [position] != '[') + return generic_arguments; + + TryParse ('['); + + for (int i = 0; i < arity; i++) { + var fq_argument = TryParse ('['); + Add (ref generic_arguments, ParseType (fq_argument)); + if (fq_argument) + TryParse (']'); + + TryParse (','); + TryParseWhiteSpace (); + } + + TryParse (']'); + + return generic_arguments; + } + + string ParseAssemblyName () + { + if (!TryParse (',')) + return string.Empty; + + TryParseWhiteSpace (); + + var start = position; + while (position < length) { + var chr = fullname [position]; + if (chr == '[' || chr == ']') + break; + + position++; + } + + return fullname.Substring (start, position - start); + } + + public static TypeReference ParseType (ModuleDefinition module, string fullname, bool typeDefinitionOnly = false) + { + if (string.IsNullOrEmpty (fullname)) + return null; + + var parser = new TypeParser (fullname); + return GetTypeReference (module, parser.ParseType (true), typeDefinitionOnly); + } + + static TypeReference GetTypeReference (ModuleDefinition module, Type type_info, bool type_def_only) + { + TypeReference type; + if (!TryGetDefinition (module, type_info, out type)) { + if (type_def_only) + return null; + + type = CreateReference (type_info, module, GetMetadataScope (module, type_info)); + } + + return CreateSpecs (type, type_info); + } + + static TypeReference CreateSpecs (TypeReference type, Type type_info) + { + type = TryCreateGenericInstanceType (type, type_info); + + var specs = type_info.specs; + if (specs.IsNullOrEmpty ()) + return type; + + for (int i = 0; i < specs.Length; i++) { + switch (specs [i]) { + case Type.Ptr: + type = new PointerType (type); + break; + case Type.ByRef: + type = new ByReferenceType (type); + break; + case Type.SzArray: + type = new ArrayType (type); + break; + default: + var array = new ArrayType (type); + array.Dimensions.Clear (); + + for (int j = 0; j < specs [i]; j++) + array.Dimensions.Add (new ArrayDimension ()); + + type = array; + break; + } + } + + return type; + } + + static TypeReference TryCreateGenericInstanceType (TypeReference type, Type type_info) + { + var generic_arguments = type_info.generic_arguments; + if (generic_arguments.IsNullOrEmpty ()) + return type; + + var instance = new GenericInstanceType (type); + var instance_arguments = instance.GenericArguments; + + for (int i = 0; i < generic_arguments.Length; i++) + instance_arguments.Add (GetTypeReference (type.Module, generic_arguments [i], false)); + + return instance; + } + + public static void SplitFullName (string fullname, out string @namespace, out string name) + { + var last_dot = fullname.LastIndexOf ('.'); + + if (last_dot == -1) { + @namespace = string.Empty; + name = fullname; + } else { + @namespace = fullname.Substring (0, last_dot); + name = fullname.Substring (last_dot + 1); + } + } + + static TypeReference CreateReference (Type type_info, ModuleDefinition module, IMetadataScope scope) + { + string @namespace, name; + SplitFullName (type_info.type_fullname, out @namespace, out name); + + var type = new TypeReference (@namespace, name, module, scope); + MetadataSystem.TryProcessPrimitiveTypeReference (type); + + AdjustGenericParameters (type); + + var nested_names = type_info.nested_names; + if (nested_names.IsNullOrEmpty ()) + return type; + + for (int i = 0; i < nested_names.Length; i++) { + type = new TypeReference (string.Empty, nested_names [i], module, null) { + DeclaringType = type, + }; + + AdjustGenericParameters (type); + } + + return type; + } + + static void AdjustGenericParameters (TypeReference type) + { + int arity; + if (!TryGetArity (type.Name, out arity)) + return; + + for (int i = 0; i < arity; i++) + type.GenericParameters.Add (new GenericParameter (type)); + } + + static IMetadataScope GetMetadataScope (ModuleDefinition module, Type type_info) + { + if (string.IsNullOrEmpty (type_info.assembly)) + return module.TypeSystem.CoreLibrary; + + AssemblyNameReference match; + var reference = AssemblyNameReference.Parse (type_info.assembly); + + return module.TryGetAssemblyNameReference (reference, out match) + ? match + : reference; + } + + static bool TryGetDefinition (ModuleDefinition module, Type type_info, out TypeReference type) + { + type = null; + if (!TryCurrentModule (module, type_info)) + return false; + + var typedef = module.GetType (type_info.type_fullname); + if (typedef == null) + return false; + + var nested_names = type_info.nested_names; + if (!nested_names.IsNullOrEmpty ()) { + for (int i = 0; i < nested_names.Length; i++) { + var nested_type = typedef.GetNestedType (nested_names [i]); + if (nested_type == null) + return false; + + typedef = nested_type; + } + } + + type = typedef; + return true; + } + + static bool TryCurrentModule (ModuleDefinition module, Type type_info) + { + if (string.IsNullOrEmpty (type_info.assembly)) + return true; + + if (module.assembly != null && module.assembly.Name.FullName == type_info.assembly) + return true; + + return false; + } + + public static string ToParseable (TypeReference type, bool top_level = true) + { + if (type == null) + return null; + + var name = new StringBuilder (); + AppendType (type, name, true, top_level); + return name.ToString (); + } + + static void AppendNamePart (string part, StringBuilder name) + { + foreach (var c in part) { + if (IsDelimiter (c)) + name.Append ('\\'); + + name.Append (c); + } + } + + static void AppendType (TypeReference type, StringBuilder name, bool fq_name, bool top_level) + { + var element_type = type.GetElementType (); + + var declaring_type = element_type.DeclaringType; + if (declaring_type != null) { + AppendType (declaring_type, name, false, top_level); + name.Append ('+'); + } + + var @namespace = type.Namespace; + if (!string.IsNullOrEmpty (@namespace)) { + AppendNamePart (@namespace, name); + name.Append ('.'); + } + + AppendNamePart (element_type.Name, name); + + if (!fq_name) + return; + + if (type.IsTypeSpecification ()) + AppendTypeSpecification ((TypeSpecification) type, name); + + if (RequiresFullyQualifiedName (type, top_level)) { + name.Append (", "); + name.Append (GetScopeFullName (type)); + } + } + + static string GetScopeFullName (TypeReference type) + { + var scope = type.Scope; + switch (scope.MetadataScopeType) { + case MetadataScopeType.AssemblyNameReference: + return ((AssemblyNameReference) scope).FullName; + case MetadataScopeType.ModuleDefinition: + return ((ModuleDefinition) scope).Assembly.Name.FullName; + } + + throw new ArgumentException (); + } + + static void AppendTypeSpecification (TypeSpecification type, StringBuilder name) + { + if (type.ElementType.IsTypeSpecification ()) + AppendTypeSpecification ((TypeSpecification) type.ElementType, name); + + switch (type.etype) { + case ElementType.Ptr: + name.Append ('*'); + break; + case ElementType.ByRef: + name.Append ('&'); + break; + case ElementType.SzArray: + case ElementType.Array: + var array = (ArrayType) type; + if (array.IsVector) { + name.Append ("[]"); + } else { + name.Append ('['); + for (int i = 1; i < array.Rank; i++) + name.Append (','); + name.Append (']'); + } + break; + case ElementType.GenericInst: + var instance = (GenericInstanceType) type; + var arguments = instance.GenericArguments; + + name.Append ('['); + + for (int i = 0; i < arguments.Count; i++) { + if (i > 0) + name.Append (','); + + var argument = arguments [i]; + var requires_fqname = argument.Scope != argument.Module; + + if (requires_fqname) + name.Append ('['); + + AppendType (argument, name, true, false); + + if (requires_fqname) + name.Append (']'); + } + + name.Append (']'); + break; + default: + return; + } + } + + static bool RequiresFullyQualifiedName (TypeReference type, bool top_level) + { + if (type.Scope == type.Module) + return false; + + if (type.Scope.Name == "mscorlib" && top_level) + return false; + + return true; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs.meta new file mode 100644 index 0000000..48f8747 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f36493c5a8e0db4ba621d6ad7a5db05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs new file mode 100644 index 0000000..c2643b6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs @@ -0,0 +1,352 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Cecil.Metadata; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + public enum MetadataType : byte { + Void = ElementType.Void, + Boolean = ElementType.Boolean, + Char = ElementType.Char, + SByte = ElementType.I1, + Byte = ElementType.U1, + Int16 = ElementType.I2, + UInt16 = ElementType.U2, + Int32 = ElementType.I4, + UInt32 = ElementType.U4, + Int64 = ElementType.I8, + UInt64 = ElementType.U8, + Single = ElementType.R4, + Double = ElementType.R8, + String = ElementType.String, + Pointer = ElementType.Ptr, + ByReference = ElementType.ByRef, + ValueType = ElementType.ValueType, + Class = ElementType.Class, + Var = ElementType.Var, + Array = ElementType.Array, + GenericInstance = ElementType.GenericInst, + TypedByReference = ElementType.TypedByRef, + IntPtr = ElementType.I, + UIntPtr = ElementType.U, + FunctionPointer = ElementType.FnPtr, + Object = ElementType.Object, + MVar = ElementType.MVar, + RequiredModifier = ElementType.CModReqD, + OptionalModifier = ElementType.CModOpt, + Sentinel = ElementType.Sentinel, + Pinned = ElementType.Pinned, + } + + public class TypeReference : MemberReference, IGenericParameterProvider, IGenericContext { + + string @namespace; + bool value_type; + internal IMetadataScope scope; + internal ModuleDefinition module; + + internal ElementType etype = ElementType.None; + + string fullname; + + protected Collection generic_parameters; + + public override string Name { + get { return base.Name; } + set { + if (IsWindowsRuntimeProjection && value != base.Name) + throw new InvalidOperationException ("Projected type reference name can't be changed."); + base.Name = value; + ClearFullName (); + } + } + + public virtual string Namespace { + get { return @namespace; } + set { + if (IsWindowsRuntimeProjection && value != @namespace) + throw new InvalidOperationException ("Projected type reference namespace can't be changed."); + @namespace = value; + ClearFullName (); + } + } + + public virtual bool IsValueType { + get { return value_type; } + set { value_type = value; } + } + + public override ModuleDefinition Module { + get { + if (module != null) + return module; + + var declaring_type = this.DeclaringType; + if (declaring_type != null) + return declaring_type.Module; + + return null; + } + } + + internal new TypeReferenceProjection WindowsRuntimeProjection { + get { return (TypeReferenceProjection) projection; } + set { projection = value; } + } + + IGenericParameterProvider IGenericContext.Type { + get { return this; } + } + + IGenericParameterProvider IGenericContext.Method { + get { return null; } + } + + GenericParameterType IGenericParameterProvider.GenericParameterType { + get { return GenericParameterType.Type; } + } + + public virtual bool HasGenericParameters { + get { return !generic_parameters.IsNullOrEmpty (); } + } + + public virtual Collection GenericParameters { + get { + if (generic_parameters != null) + return generic_parameters; + + return generic_parameters = new GenericParameterCollection (this); + } + } + + public virtual IMetadataScope Scope { + get { + var declaring_type = this.DeclaringType; + if (declaring_type != null) + return declaring_type.Scope; + + return scope; + } + set { + var declaring_type = this.DeclaringType; + if (declaring_type != null) { + if (IsWindowsRuntimeProjection && value != declaring_type.Scope) + throw new InvalidOperationException ("Projected type scope can't be changed."); + declaring_type.Scope = value; + return; + } + + if (IsWindowsRuntimeProjection && value != scope) + throw new InvalidOperationException ("Projected type scope can't be changed."); + scope = value; + } + } + + public bool IsNested { + get { return this.DeclaringType != null; } + } + + public override TypeReference DeclaringType { + get { return base.DeclaringType; } + set { + if (IsWindowsRuntimeProjection && value != base.DeclaringType) + throw new InvalidOperationException ("Projected type declaring type can't be changed."); + base.DeclaringType = value; + ClearFullName (); + } + } + + public override string FullName { + get { + if (fullname != null) + return fullname; + + fullname = this.TypeFullName (); + + if (IsNested) + fullname = DeclaringType.FullName + "/" + fullname; + + return fullname; + } + } + + public virtual bool IsByReference { + get { return false; } + } + + public virtual bool IsPointer { + get { return false; } + } + + public virtual bool IsSentinel { + get { return false; } + } + + public virtual bool IsArray { + get { return false; } + } + + public virtual bool IsGenericParameter { + get { return false; } + } + + public virtual bool IsGenericInstance { + get { return false; } + } + + public virtual bool IsRequiredModifier { + get { return false; } + } + + public virtual bool IsOptionalModifier { + get { return false; } + } + + public virtual bool IsPinned { + get { return false; } + } + + public virtual bool IsFunctionPointer { + get { return false; } + } + + public virtual bool IsPrimitive { + get { return etype.IsPrimitive (); } + } + + public virtual MetadataType MetadataType { + get { + switch (etype) { + case ElementType.None: + return IsValueType ? MetadataType.ValueType : MetadataType.Class; + default: + return (MetadataType) etype; + } + } + } + + protected TypeReference (string @namespace, string name) + : base (name) + { + this.@namespace = @namespace ?? string.Empty; + this.token = new MetadataToken (TokenType.TypeRef, 0); + } + + public TypeReference (string @namespace, string name, ModuleDefinition module, IMetadataScope scope) + : this (@namespace, name) + { + this.module = module; + this.scope = scope; + } + + public TypeReference (string @namespace, string name, ModuleDefinition module, IMetadataScope scope, bool valueType) : + this (@namespace, name, module, scope) + { + value_type = valueType; + } + + protected virtual void ClearFullName () + { + this.fullname = null; + } + + public virtual TypeReference GetElementType () + { + return this; + } + + protected override IMemberDefinition ResolveDefinition () + { + return this.Resolve (); + } + + public new virtual TypeDefinition Resolve () + { + var module = this.Module; + if (module == null) + throw new NotSupportedException (); + + return module.Resolve (this); + } + } + + static partial class Mixin { + + public static bool IsPrimitive (this ElementType self) + { + switch (self) { + case ElementType.Boolean: + case ElementType.Char: + case ElementType.I: + case ElementType.U: + case ElementType.I1: + case ElementType.U1: + case ElementType.I2: + case ElementType.U2: + case ElementType.I4: + case ElementType.U4: + case ElementType.I8: + case ElementType.U8: + case ElementType.R4: + case ElementType.R8: + return true; + default: + return false; + } + } + + public static string TypeFullName (this TypeReference self) + { + return string.IsNullOrEmpty (self.Namespace) + ? self.Name + : self.Namespace + '.' + self.Name; + } + + public static bool IsTypeOf (this TypeReference self, string @namespace, string name) + { + return self.Name == name + && self.Namespace == @namespace; + } + + public static bool IsTypeSpecification (this TypeReference type) + { + switch (type.etype) { + case ElementType.Array: + case ElementType.ByRef: + case ElementType.CModOpt: + case ElementType.CModReqD: + case ElementType.FnPtr: + case ElementType.GenericInst: + case ElementType.MVar: + case ElementType.Pinned: + case ElementType.Ptr: + case ElementType.SzArray: + case ElementType.Sentinel: + case ElementType.Var: + return true; + } + + return false; + } + + public static TypeDefinition CheckedResolve (this TypeReference self) + { + var type = self.Resolve (); + if (type == null) + throw new ResolutionException (self); + + return type; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs.meta new file mode 100644 index 0000000..6c241cd --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c2ba967e726c0845a8945d9743cf606 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs new file mode 100644 index 0000000..16e0cab --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs @@ -0,0 +1,68 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public abstract class TypeSpecification : TypeReference { + + readonly TypeReference element_type; + + public TypeReference ElementType { + get { return element_type; } + } + + public override string Name { + get { return element_type.Name; } + set { throw new InvalidOperationException (); } + } + + public override string Namespace { + get { return element_type.Namespace; } + set { throw new InvalidOperationException (); } + } + + public override IMetadataScope Scope { + get { return element_type.Scope; } + set { throw new InvalidOperationException (); } + } + + public override ModuleDefinition Module { + get { return element_type.Module; } + } + + public override string FullName { + get { return element_type.FullName; } + } + + public override bool ContainsGenericParameter { + get { return element_type.ContainsGenericParameter; } + } + + public override MetadataType MetadataType { + get { return (MetadataType) etype; } + } + + internal TypeSpecification (TypeReference type) + : base (null, null) + { + this.element_type = type; + this.token = new MetadataToken (TokenType.TypeSpec); + } + + public override TypeReference GetElementType () + { + return element_type.GetElementType (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs.meta new file mode 100644 index 0000000..b01bf4c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSpecification.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3fde49a652c4ba428a11c3018458e23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs new file mode 100644 index 0000000..e16ec6f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs @@ -0,0 +1,331 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +using Mono.Cecil.Metadata; + +namespace Mono.Cecil { + + public abstract class TypeSystem { + + sealed class CoreTypeSystem : TypeSystem { + + public CoreTypeSystem (ModuleDefinition module) + : base (module) + { + } + + internal override TypeReference LookupType (string @namespace, string name) + { + var type = LookupTypeDefinition (@namespace, name) ?? LookupTypeForwarded (@namespace, name); + if (type != null) + return type; + + throw new NotSupportedException (); + } + + TypeReference LookupTypeDefinition (string @namespace, string name) + { + var metadata = module.MetadataSystem; + if (metadata.Types == null) + Initialize (module.Types); + + return module.Read (new Row (@namespace, name), (row, reader) => { + var types = reader.metadata.Types; + + for (int i = 0; i < types.Length; i++) { + if (types [i] == null) + types [i] = reader.GetTypeDefinition ((uint) i + 1); + + var type = types [i]; + + if (type.Name == row.Col2 && type.Namespace == row.Col1) + return type; + } + + return null; + }); + } + + TypeReference LookupTypeForwarded (string @namespace, string name) + { + if (!module.HasExportedTypes) + return null; + + var exported_types = module.ExportedTypes; + for (int i = 0; i < exported_types.Count; i++) { + var exported_type = exported_types [i]; + + if (exported_type.Name == name && exported_type.Namespace == @namespace) + return exported_type.CreateReference (); + } + + return null; + } + + static void Initialize (object obj) + { + } + } + + sealed class CommonTypeSystem : TypeSystem { + + AssemblyNameReference core_library; + + public CommonTypeSystem (ModuleDefinition module) + : base (module) + { + } + + internal override TypeReference LookupType (string @namespace, string name) + { + return CreateTypeReference (@namespace, name); + } + + public AssemblyNameReference GetCoreLibraryReference () + { + if (core_library != null) + return core_library; + + if (module.TryGetCoreLibraryReference (out core_library)) + return core_library; + + core_library = new AssemblyNameReference { + Name = Mixin.mscorlib, + Version = GetCorlibVersion (), + PublicKeyToken = new byte [] { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 }, + }; + + module.AssemblyReferences.Add (core_library); + + return core_library; + } + + Version GetCorlibVersion () + { + switch (module.Runtime) { + case TargetRuntime.Net_1_0: + case TargetRuntime.Net_1_1: + return new Version (1, 0, 0, 0); + case TargetRuntime.Net_2_0: + return new Version (2, 0, 0, 0); + case TargetRuntime.Net_4_0: + return new Version (4, 0, 0, 0); + default: + throw new NotSupportedException (); + } + } + + TypeReference CreateTypeReference (string @namespace, string name) + { + return new TypeReference (@namespace, name, module, GetCoreLibraryReference ()); + } + } + + readonly ModuleDefinition module; + + TypeReference type_object; + TypeReference type_void; + TypeReference type_bool; + TypeReference type_char; + TypeReference type_sbyte; + TypeReference type_byte; + TypeReference type_int16; + TypeReference type_uint16; + TypeReference type_int32; + TypeReference type_uint32; + TypeReference type_int64; + TypeReference type_uint64; + TypeReference type_single; + TypeReference type_double; + TypeReference type_intptr; + TypeReference type_uintptr; + TypeReference type_string; + TypeReference type_typedref; + + TypeSystem (ModuleDefinition module) + { + this.module = module; + } + + internal static TypeSystem CreateTypeSystem (ModuleDefinition module) + { + if (module.IsCoreLibrary ()) + return new CoreTypeSystem (module); + + return new CommonTypeSystem (module); + } + + internal abstract TypeReference LookupType (string @namespace, string name); + + TypeReference LookupSystemType (ref TypeReference reference, string name, ElementType element_type) + { + lock (module.SyncRoot) { + if (reference != null) + return reference; + var type = LookupType ("System", name); + type.etype = element_type; + return reference = type; + } + } + + TypeReference LookupSystemValueType (ref TypeReference typeRef, string name, ElementType element_type) + { + lock (module.SyncRoot) { + if (typeRef != null) + return typeRef; + var type = LookupType ("System", name); + type.etype = element_type; + type.KnownValueType (); + return typeRef = type; + } + } + + [Obsolete ("Use CoreLibrary")] + public IMetadataScope Corlib { + get { return CoreLibrary; } + } + + public IMetadataScope CoreLibrary { + get { + var common = this as CommonTypeSystem; + if (common == null) + return module; + + return common.GetCoreLibraryReference (); + } + } + + public TypeReference Object { + get { return type_object ?? (LookupSystemType (ref type_object, "Object", ElementType.Object)); } + } + + public TypeReference Void { + get { return type_void ?? (LookupSystemType (ref type_void, "Void", ElementType.Void)); } + } + + public TypeReference Boolean { + get { return type_bool ?? (LookupSystemValueType (ref type_bool, "Boolean", ElementType.Boolean)); } + } + + public TypeReference Char { + get { return type_char ?? (LookupSystemValueType (ref type_char, "Char", ElementType.Char)); } + } + + public TypeReference SByte { + get { return type_sbyte ?? (LookupSystemValueType (ref type_sbyte, "SByte", ElementType.I1)); } + } + + public TypeReference Byte { + get { return type_byte ?? (LookupSystemValueType (ref type_byte, "Byte", ElementType.U1)); } + } + + public TypeReference Int16 { + get { return type_int16 ?? (LookupSystemValueType (ref type_int16, "Int16", ElementType.I2)); } + } + + public TypeReference UInt16 { + get { return type_uint16 ?? (LookupSystemValueType (ref type_uint16, "UInt16", ElementType.U2)); } + } + + public TypeReference Int32 { + get { return type_int32 ?? (LookupSystemValueType (ref type_int32, "Int32", ElementType.I4)); } + } + + public TypeReference UInt32 { + get { return type_uint32 ?? (LookupSystemValueType (ref type_uint32, "UInt32", ElementType.U4)); } + } + + public TypeReference Int64 { + get { return type_int64 ?? (LookupSystemValueType (ref type_int64, "Int64", ElementType.I8)); } + } + + public TypeReference UInt64 { + get { return type_uint64 ?? (LookupSystemValueType (ref type_uint64, "UInt64", ElementType.U8)); } + } + + public TypeReference Single { + get { return type_single ?? (LookupSystemValueType (ref type_single, "Single", ElementType.R4)); } + } + + public TypeReference Double { + get { return type_double ?? (LookupSystemValueType (ref type_double, "Double", ElementType.R8)); } + } + + public TypeReference IntPtr { + get { return type_intptr ?? (LookupSystemValueType (ref type_intptr, "IntPtr", ElementType.I)); } + } + + public TypeReference UIntPtr { + get { return type_uintptr ?? (LookupSystemValueType (ref type_uintptr, "UIntPtr", ElementType.U)); } + } + + public TypeReference String { + get { return type_string ?? (LookupSystemType (ref type_string, "String", ElementType.String)); } + } + + public TypeReference TypedReference { + get { return type_typedref ?? (LookupSystemValueType (ref type_typedref, "TypedReference", ElementType.TypedByRef)); } + } + } + + static partial class Mixin { + + public const string mscorlib = "mscorlib"; + public const string system_runtime = "System.Runtime"; + public const string system_private_corelib = "System.Private.CoreLib"; + public const string netstandard = "netstandard"; + + public static bool TryGetCoreLibraryReference (this ModuleDefinition module, out AssemblyNameReference reference) + { + var references = module.AssemblyReferences; + + for (int i = 0; i < references.Count; i++) { + reference = references [i]; + if (IsCoreLibrary (reference)) + return true; + } + + reference = null; + return false; + + } + + public static bool IsCoreLibrary (this ModuleDefinition module) + { + if (module.Assembly == null) + return false; + + if (!IsCoreLibrary (module.Assembly.Name)) + return false; + + if (module.HasImage && module.Read (module, (m, reader) => reader.image.GetTableLength (Table.AssemblyRef) > 0)) + return false; + + return true; + } + + public static void KnownValueType (this TypeReference type) + { + if (!type.IsDefinition) + type.IsValueType = true; + } + + static bool IsCoreLibrary (AssemblyNameReference reference) + { + var name = reference.Name; + return name == mscorlib + || name == system_runtime + || name == system_private_corelib + || name == netstandard; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs.meta new file mode 100644 index 0000000..9bcf273 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/TypeSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b644a219ac7ac614d988a00b2e501e00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs new file mode 100644 index 0000000..81aa7fa --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs @@ -0,0 +1,35 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +namespace Mono.Cecil { + + public enum VariantType { + None = 0, + I2 = 2, + I4 = 3, + R4 = 4, + R8 = 5, + CY = 6, + Date = 7, + BStr = 8, + Dispatch = 9, + Error = 10, + Bool = 11, + Variant = 12, + Unknown = 13, + Decimal = 14, + I1 = 16, + UI1 = 17, + UI2 = 18, + UI4 = 19, + Int = 22, + UInt = 23 + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs.meta new file mode 100644 index 0000000..84f78a8 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/VariantType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a67b8b6e50f0f7846ba7233046b90968 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs new file mode 100644 index 0000000..04ba8c6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs @@ -0,0 +1,875 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; +using System.Threading; +using Mono.Collections.Generic; + +namespace Mono.Cecil { + + sealed class MemberReferenceProjection { + + public readonly string Name; + public readonly MemberReferenceTreatment Treatment; + + public MemberReferenceProjection (MemberReference member, MemberReferenceTreatment treatment) + { + Name = member.Name; + Treatment = treatment; + } + } + + sealed class TypeDefinitionProjection { + + public readonly TypeAttributes Attributes; + public readonly string Name; + public readonly TypeDefinitionTreatment Treatment; + + public TypeDefinitionProjection (TypeDefinition type, TypeDefinitionTreatment treatment) + { + Attributes = type.Attributes; + Name = type.Name; + Treatment = treatment; + } + } + + sealed class TypeReferenceProjection { + + public readonly string Name; + public readonly string Namespace; + public readonly IMetadataScope Scope; + public readonly TypeReferenceTreatment Treatment; + + public TypeReferenceProjection (TypeReference type, TypeReferenceTreatment treatment) + { + Name = type.Name; + Namespace = type.Namespace; + Scope = type.Scope; + Treatment = treatment; + } + } + + sealed class MethodDefinitionProjection { + + public readonly MethodAttributes Attributes; + public readonly MethodImplAttributes ImplAttributes; + public readonly string Name; + public readonly MethodDefinitionTreatment Treatment; + + public MethodDefinitionProjection (MethodDefinition method, MethodDefinitionTreatment treatment) + { + Attributes = method.Attributes; + ImplAttributes = method.ImplAttributes; + Name = method.Name; + Treatment = treatment; + } + } + + sealed class FieldDefinitionProjection { + + public readonly FieldAttributes Attributes; + public readonly FieldDefinitionTreatment Treatment; + + public FieldDefinitionProjection (FieldDefinition field, FieldDefinitionTreatment treatment) + { + Attributes = field.Attributes; + Treatment = treatment; + } + } + + sealed class CustomAttributeValueProjection { + + public readonly AttributeTargets Targets; + public readonly CustomAttributeValueTreatment Treatment; + + public CustomAttributeValueProjection (AttributeTargets targets, CustomAttributeValueTreatment treatment) + { + Targets = targets; + Treatment = treatment; + } + } + + sealed class WindowsRuntimeProjections { + + struct ProjectionInfo { + + public readonly string WinRTNamespace; + public readonly string ClrNamespace; + public readonly string ClrName; + public readonly string ClrAssembly; + public readonly bool Attribute; + public readonly bool Disposable; + + public ProjectionInfo (string winrt_namespace, string clr_namespace, string clr_name, string clr_assembly, bool attribute = false, bool disposable = false) + { + WinRTNamespace = winrt_namespace; + ClrNamespace = clr_namespace; + ClrName = clr_name; + ClrAssembly = clr_assembly; + Attribute = attribute; + Disposable = disposable; + } + } + + static readonly Version version = new Version (4, 0, 0, 0); + + static readonly byte[] contract_pk_token = { + 0xB0, 0x3F, 0x5F, 0x7F, 0x11, 0xD5, 0x0A, 0x3A + }; + + static readonly byte[] contract_pk = { + 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x07, 0xD1, 0xFA, 0x57, 0xC4, 0xAE, 0xD9, 0xF0, 0xA3, 0x2E, 0x84, 0xAA, 0x0F, 0xAE, 0xFD, 0x0D, + 0xE9, 0xE8, 0xFD, 0x6A, 0xEC, 0x8F, 0x87, 0xFB, 0x03, 0x76, 0x6C, 0x83, 0x4C, 0x99, 0x92, 0x1E, + 0xB2, 0x3B, 0xE7, 0x9A, 0xD9, 0xD5, 0xDC, 0xC1, 0xDD, 0x9A, 0xD2, 0x36, 0x13, 0x21, 0x02, 0x90, + 0x0B, 0x72, 0x3C, 0xF9, 0x80, 0x95, 0x7F, 0xC4, 0xE1, 0x77, 0x10, 0x8F, 0xC6, 0x07, 0x77, 0x4F, + 0x29, 0xE8, 0x32, 0x0E, 0x92, 0xEA, 0x05, 0xEC, 0xE4, 0xE8, 0x21, 0xC0, 0xA5, 0xEF, 0xE8, 0xF1, + 0x64, 0x5C, 0x4C, 0x0C, 0x93, 0xC1, 0xAB, 0x99, 0x28, 0x5D, 0x62, 0x2C, 0xAA, 0x65, 0x2C, 0x1D, + 0xFA, 0xD6, 0x3D, 0x74, 0x5D, 0x6F, 0x2D, 0xE5, 0xF1, 0x7E, 0x5E, 0xAF, 0x0F, 0xC4, 0x96, 0x3D, + 0x26, 0x1C, 0x8A, 0x12, 0x43, 0x65, 0x18, 0x20, 0x6D, 0xC0, 0x93, 0x34, 0x4D, 0x5A, 0xD2, 0x93 + }; + + static Dictionary projections; + + static Dictionary Projections + { + get { + if (projections != null) + return projections; + + return projections = new Dictionary { + { "AttributeTargets", new ProjectionInfo ("Windows.Foundation.Metadata", "System", "AttributeTargets", "System.Runtime") }, + { "AttributeUsageAttribute", new ProjectionInfo ("Windows.Foundation.Metadata", "System", "AttributeUsageAttribute", "System.Runtime", attribute: true) }, + { "Color", new ProjectionInfo ("Windows.UI", "Windows.UI", "Color", "System.Runtime.WindowsRuntime") }, + { "CornerRadius", new ProjectionInfo ("Windows.UI.Xaml", "Windows.UI.Xaml", "CornerRadius", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "DateTime", new ProjectionInfo ("Windows.Foundation", "System", "DateTimeOffset", "System.Runtime") }, + { "Duration", new ProjectionInfo ("Windows.UI.Xaml", "Windows.UI.Xaml", "Duration", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "DurationType", new ProjectionInfo ("Windows.UI.Xaml", "Windows.UI.Xaml", "DurationType", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "EventHandler`1", new ProjectionInfo ("Windows.Foundation", "System", "EventHandler`1", "System.Runtime") }, + { "EventRegistrationToken", new ProjectionInfo ("Windows.Foundation", "System.Runtime.InteropServices.WindowsRuntime", "EventRegistrationToken", "System.Runtime.InteropServices.WindowsRuntime") }, + { "GeneratorPosition", new ProjectionInfo ("Windows.UI.Xaml.Controls.Primitives", "Windows.UI.Xaml.Controls.Primitives", "GeneratorPosition", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "GridLength", new ProjectionInfo ("Windows.UI.Xaml", "Windows.UI.Xaml", "GridLength", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "GridUnitType", new ProjectionInfo ("Windows.UI.Xaml", "Windows.UI.Xaml", "GridUnitType", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "HResult", new ProjectionInfo ("Windows.Foundation", "System", "Exception", "System.Runtime") }, + { "IBindableIterable", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System.Collections", "IEnumerable", "System.Runtime") }, + { "IBindableVector", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System.Collections", "IList", "System.Runtime") }, + { "IClosable", new ProjectionInfo ("Windows.Foundation", "System", "IDisposable", "System.Runtime", disposable: true) }, + { "ICommand", new ProjectionInfo ("Windows.UI.Xaml.Input", "System.Windows.Input", "ICommand", "System.ObjectModel") }, + { "IIterable`1", new ProjectionInfo ("Windows.Foundation.Collections", "System.Collections.Generic", "IEnumerable`1", "System.Runtime") }, + { "IKeyValuePair`2", new ProjectionInfo ("Windows.Foundation.Collections", "System.Collections.Generic", "KeyValuePair`2", "System.Runtime") }, + { "IMapView`2", new ProjectionInfo ("Windows.Foundation.Collections", "System.Collections.Generic", "IReadOnlyDictionary`2", "System.Runtime") }, + { "IMap`2", new ProjectionInfo ("Windows.Foundation.Collections", "System.Collections.Generic", "IDictionary`2", "System.Runtime") }, + { "INotifyCollectionChanged", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System.Collections.Specialized", "INotifyCollectionChanged", "System.ObjectModel") }, + { "INotifyPropertyChanged", new ProjectionInfo ("Windows.UI.Xaml.Data", "System.ComponentModel", "INotifyPropertyChanged", "System.ObjectModel") }, + { "IReference`1", new ProjectionInfo ("Windows.Foundation", "System", "Nullable`1", "System.Runtime") }, + { "IVectorView`1", new ProjectionInfo ("Windows.Foundation.Collections", "System.Collections.Generic", "IReadOnlyList`1", "System.Runtime") }, + { "IVector`1", new ProjectionInfo ("Windows.Foundation.Collections", "System.Collections.Generic", "IList`1", "System.Runtime") }, + { "KeyTime", new ProjectionInfo ("Windows.UI.Xaml.Media.Animation", "Windows.UI.Xaml.Media.Animation", "KeyTime", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "Matrix", new ProjectionInfo ("Windows.UI.Xaml.Media", "Windows.UI.Xaml.Media", "Matrix", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "Matrix3D", new ProjectionInfo ("Windows.UI.Xaml.Media.Media3D", "Windows.UI.Xaml.Media.Media3D", "Matrix3D", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "Matrix3x2", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Matrix3x2", "System.Numerics.Vectors") }, + { "Matrix4x4", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Matrix4x4", "System.Numerics.Vectors") }, + { "NotifyCollectionChangedAction", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System.Collections.Specialized", "NotifyCollectionChangedAction", "System.ObjectModel") }, + { "NotifyCollectionChangedEventArgs", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System.Collections.Specialized", "NotifyCollectionChangedEventArgs", "System.ObjectModel") }, + { "NotifyCollectionChangedEventHandler", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System.Collections.Specialized", "NotifyCollectionChangedEventHandler", "System.ObjectModel") }, + { "Plane", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Plane", "System.Numerics.Vectors") }, + { "Point", new ProjectionInfo ("Windows.Foundation", "Windows.Foundation", "Point", "System.Runtime.WindowsRuntime") }, + { "PropertyChangedEventArgs", new ProjectionInfo ("Windows.UI.Xaml.Data", "System.ComponentModel", "PropertyChangedEventArgs", "System.ObjectModel") }, + { "PropertyChangedEventHandler", new ProjectionInfo ("Windows.UI.Xaml.Data", "System.ComponentModel", "PropertyChangedEventHandler", "System.ObjectModel") }, + { "Quaternion", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Quaternion", "System.Numerics.Vectors") }, + { "Rect", new ProjectionInfo ("Windows.Foundation", "Windows.Foundation", "Rect", "System.Runtime.WindowsRuntime") }, + { "RepeatBehavior", new ProjectionInfo ("Windows.UI.Xaml.Media.Animation", "Windows.UI.Xaml.Media.Animation", "RepeatBehavior", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "RepeatBehaviorType", new ProjectionInfo ("Windows.UI.Xaml.Media.Animation", "Windows.UI.Xaml.Media.Animation", "RepeatBehaviorType", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "Size", new ProjectionInfo ("Windows.Foundation", "Windows.Foundation", "Size", "System.Runtime.WindowsRuntime") }, + { "Thickness", new ProjectionInfo ("Windows.UI.Xaml", "Windows.UI.Xaml", "Thickness", "System.Runtime.WindowsRuntime.UI.Xaml") }, + { "TimeSpan", new ProjectionInfo ("Windows.Foundation", "System", "TimeSpan", "System.Runtime") }, + { "TypeName", new ProjectionInfo ("Windows.UI.Xaml.Interop", "System", "Type", "System.Runtime") }, + { "Uri", new ProjectionInfo ("Windows.Foundation", "System", "Uri", "System.Runtime") }, + { "Vector2", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Vector2", "System.Numerics.Vectors") }, + { "Vector3", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Vector3", "System.Numerics.Vectors") }, + { "Vector4", new ProjectionInfo ("Windows.Foundation.Numerics", "System.Numerics", "Vector4", "System.Numerics.Vectors") }, + }; + } + } + + readonly ModuleDefinition module; + Version corlib_version = new Version (255, 255, 255, 255); + AssemblyNameReference[] virtual_references; + + AssemblyNameReference[] VirtualReferences { + get { + if (virtual_references == null) { + // force module to read its assembly references. that will in turn initialize virtual_references + Mixin.Read (module.AssemblyReferences); + } + + return virtual_references; + } + } + + public WindowsRuntimeProjections (ModuleDefinition module) + { + this.module = module; + } + + public static void Project (TypeDefinition type) + { + var treatment = TypeDefinitionTreatment.None; + var metadata_kind = type.Module.MetadataKind; + + if (type.IsWindowsRuntime) { + if (metadata_kind == MetadataKind.WindowsMetadata) { + treatment = GetWellKnownTypeDefinitionTreatment (type); + if (treatment != TypeDefinitionTreatment.None) { + ApplyProjection (type, new TypeDefinitionProjection (type, treatment)); + return; + } + + var base_type = type.BaseType; + if (base_type != null && IsAttribute (base_type)) + treatment = TypeDefinitionTreatment.NormalAttribute; + else + treatment = TypeDefinitionTreatment.NormalType; + } + else if (metadata_kind == MetadataKind.ManagedWindowsMetadata && NeedsWindowsRuntimePrefix (type)) + treatment = TypeDefinitionTreatment.PrefixWindowsRuntimeName; + + if (treatment == TypeDefinitionTreatment.PrefixWindowsRuntimeName || treatment == TypeDefinitionTreatment.NormalType) + if (!type.IsInterface && HasAttribute (type, "Windows.UI.Xaml", "TreatAsAbstractComposableClassAttribute")) + treatment |= TypeDefinitionTreatment.Abstract; + } + else if (metadata_kind == MetadataKind.ManagedWindowsMetadata && IsClrImplementationType (type)) + treatment = TypeDefinitionTreatment.UnmangleWindowsRuntimeName; + + if (treatment != TypeDefinitionTreatment.None) + ApplyProjection (type, new TypeDefinitionProjection (type, treatment)); + } + + static TypeDefinitionTreatment GetWellKnownTypeDefinitionTreatment (TypeDefinition type) + { + ProjectionInfo info; + if (!Projections.TryGetValue (type.Name, out info)) + return TypeDefinitionTreatment.None; + + var treatment = info.Attribute ? TypeDefinitionTreatment.RedirectToClrAttribute : TypeDefinitionTreatment.RedirectToClrType; + + if (type.Namespace == info.ClrNamespace) + return treatment; + + if (type.Namespace == info.WinRTNamespace) + return treatment | TypeDefinitionTreatment.Internal; + + return TypeDefinitionTreatment.None; + } + + static bool NeedsWindowsRuntimePrefix (TypeDefinition type) + { + if ((type.Attributes & (TypeAttributes.VisibilityMask | TypeAttributes.Interface)) != TypeAttributes.Public) + return false; + + var base_type = type.BaseType; + if (base_type == null || base_type.MetadataToken.TokenType != TokenType.TypeRef) + return false; + + if (base_type.Namespace == "System") + switch (base_type.Name) + { + case "Attribute": + case "MulticastDelegate": + case "ValueType": + return false; + } + + return true; + } + + static bool IsClrImplementationType (TypeDefinition type) + { + if ((type.Attributes & (TypeAttributes.VisibilityMask | TypeAttributes.SpecialName)) != TypeAttributes.SpecialName) + return false; + return type.Name.StartsWith (""); + } + + public static void ApplyProjection (TypeDefinition type, TypeDefinitionProjection projection) + { + if (projection == null) + return; + + var treatment = projection.Treatment; + + switch (treatment & TypeDefinitionTreatment.KindMask) { + case TypeDefinitionTreatment.NormalType: + type.Attributes |= TypeAttributes.WindowsRuntime | TypeAttributes.Import; + break; + + case TypeDefinitionTreatment.NormalAttribute: + type.Attributes |= TypeAttributes.WindowsRuntime | TypeAttributes.Sealed; + break; + + case TypeDefinitionTreatment.UnmangleWindowsRuntimeName: + type.Attributes = type.Attributes & ~TypeAttributes.SpecialName | TypeAttributes.Public; + type.Name = type.Name.Substring ("".Length); + break; + + case TypeDefinitionTreatment.PrefixWindowsRuntimeName: + type.Attributes = type.Attributes & ~TypeAttributes.Public | TypeAttributes.Import; + type.Name = "" + type.Name; + break; + + case TypeDefinitionTreatment.RedirectToClrType: + type.Attributes = type.Attributes & ~TypeAttributes.Public | TypeAttributes.Import; + break; + + case TypeDefinitionTreatment.RedirectToClrAttribute: + type.Attributes = type.Attributes & ~TypeAttributes.Public; + break; + } + + if ((treatment & TypeDefinitionTreatment.Abstract) != 0) + type.Attributes |= TypeAttributes.Abstract; + + if ((treatment & TypeDefinitionTreatment.Internal) != 0) + type.Attributes &= ~TypeAttributes.Public; + + type.WindowsRuntimeProjection = projection; + } + + public static TypeDefinitionProjection RemoveProjection (TypeDefinition type) + { + if (!type.IsWindowsRuntimeProjection) + return null; + + var projection = type.WindowsRuntimeProjection; + type.WindowsRuntimeProjection = null; + + type.Attributes = projection.Attributes; + type.Name = projection.Name; + + return projection; + } + + public static void Project (TypeReference type) + { + TypeReferenceTreatment treatment; + + ProjectionInfo info; + if (Projections.TryGetValue (type.Name, out info) && info.WinRTNamespace == type.Namespace) + treatment = TypeReferenceTreatment.UseProjectionInfo; + else + treatment = GetSpecialTypeReferenceTreatment (type); + + if (treatment != TypeReferenceTreatment.None) + ApplyProjection (type, new TypeReferenceProjection (type, treatment)); + } + + static TypeReferenceTreatment GetSpecialTypeReferenceTreatment (TypeReference type) + { + if (type.Namespace == "System") { + if (type.Name == "MulticastDelegate") + return TypeReferenceTreatment.SystemDelegate; + if (type.Name == "Attribute") + return TypeReferenceTreatment.SystemAttribute; + } + + return TypeReferenceTreatment.None; + } + + static bool IsAttribute (TypeReference type) + { + if (type.MetadataToken.TokenType != TokenType.TypeRef) + return false; + return type.Name == "Attribute" && type.Namespace == "System"; + } + + static bool IsEnum (TypeReference type) + { + if (type.MetadataToken.TokenType != TokenType.TypeRef) + return false; + return type.Name == "Enum" && type.Namespace == "System"; + } + + public static void ApplyProjection (TypeReference type, TypeReferenceProjection projection) + { + if (projection == null) + return; + + switch (projection.Treatment) + { + case TypeReferenceTreatment.SystemDelegate: + case TypeReferenceTreatment.SystemAttribute: + type.Scope = type.Module.Projections.GetAssemblyReference ("System.Runtime"); + break; + + case TypeReferenceTreatment.UseProjectionInfo: + var info = Projections [type.Name]; + type.Name = info.ClrName; + type.Namespace = info.ClrNamespace; + type.Scope = type.Module.Projections.GetAssemblyReference (info.ClrAssembly); + break; + } + + type.WindowsRuntimeProjection = projection; + } + + public static TypeReferenceProjection RemoveProjection (TypeReference type) + { + if (!type.IsWindowsRuntimeProjection) + return null; + + var projection = type.WindowsRuntimeProjection; + type.WindowsRuntimeProjection = null; + + type.Name = projection.Name; + type.Namespace = projection.Namespace; + type.Scope = projection.Scope; + + return projection; + } + + public static void Project (MethodDefinition method) + { + var treatment = MethodDefinitionTreatment.None; + var other = false; + var declaring_type = method.DeclaringType; + + if (declaring_type.IsWindowsRuntime) + { + if (IsClrImplementationType (declaring_type)) + treatment = MethodDefinitionTreatment.None; + else if (declaring_type.IsNested) + treatment = MethodDefinitionTreatment.None; + else if (declaring_type.IsInterface) + treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.InternalCall; + else if (declaring_type.Module.MetadataKind == MetadataKind.ManagedWindowsMetadata && !method.IsPublic) + treatment = MethodDefinitionTreatment.None; + else + { + other = true; + + var base_type = declaring_type.BaseType; + if (base_type != null && base_type.MetadataToken.TokenType == TokenType.TypeRef) + { + switch (GetSpecialTypeReferenceTreatment(base_type)) + { + case TypeReferenceTreatment.SystemDelegate: + treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.Public; + other = false; + break; + + case TypeReferenceTreatment.SystemAttribute: + treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.InternalCall; + other = false; + break; + } + } + } + } + + if (other) + { + var seen_redirected = false; + var seen_non_redirected = false; + var disposable = false; + + foreach (var @override in method.Overrides) + { + if (@override.MetadataToken.TokenType == TokenType.MemberRef && ImplementsRedirectedInterface (@override, out disposable)) + { + seen_redirected = true; + if (disposable) + break; + } + else + seen_non_redirected = true; + } + + if (disposable) + { + treatment = MethodDefinitionTreatment.Dispose; + other = false; + } + else if (seen_redirected && !seen_non_redirected) + { + treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.InternalCall | MethodDefinitionTreatment.Private; + other = false; + } + } + + if (other) + treatment |= GetMethodDefinitionTreatmentFromCustomAttributes(method); + + if (treatment != MethodDefinitionTreatment.None) + ApplyProjection (method, new MethodDefinitionProjection (method, treatment)); + } + + static MethodDefinitionTreatment GetMethodDefinitionTreatmentFromCustomAttributes(MethodDefinition method) + { + var treatment = MethodDefinitionTreatment.None; + + foreach (var attribute in method.CustomAttributes) + { + var type = attribute.AttributeType; + if (type.Namespace != "Windows.UI.Xaml") + continue; + if (type.Name == "TreatAsPublicMethodAttribute") + treatment |= MethodDefinitionTreatment.Public; + else if (type.Name == "TreatAsAbstractMethodAttribute") + treatment |= MethodDefinitionTreatment.Abstract; + } + + return treatment; + } + + public static void ApplyProjection (MethodDefinition method, MethodDefinitionProjection projection) + { + if (projection == null) + return; + + var treatment = projection.Treatment; + + if ((treatment & MethodDefinitionTreatment.Dispose) != 0) + method.Name = "Dispose"; + + if ((treatment & MethodDefinitionTreatment.Abstract) != 0) + method.Attributes |= MethodAttributes.Abstract; + + if ((treatment & MethodDefinitionTreatment.Private) != 0) + method.Attributes = (method.Attributes & ~MethodAttributes.MemberAccessMask) | MethodAttributes.Private; + + if ((treatment & MethodDefinitionTreatment.Public) != 0) + method.Attributes = (method.Attributes & ~MethodAttributes.MemberAccessMask) | MethodAttributes.Public; + + if ((treatment & MethodDefinitionTreatment.Runtime) != 0) + method.ImplAttributes |= MethodImplAttributes.Runtime; + + if ((treatment & MethodDefinitionTreatment.InternalCall) != 0) + method.ImplAttributes |= MethodImplAttributes.InternalCall; + + method.WindowsRuntimeProjection = projection; + } + + public static MethodDefinitionProjection RemoveProjection (MethodDefinition method) + { + if (!method.IsWindowsRuntimeProjection) + return null; + + var projection = method.WindowsRuntimeProjection; + method.WindowsRuntimeProjection = null; + + method.Attributes = projection.Attributes; + method.ImplAttributes = projection.ImplAttributes; + method.Name = projection.Name; + + return projection; + } + + public static void Project (FieldDefinition field) + { + var treatment = FieldDefinitionTreatment.None; + var declaring_type = field.DeclaringType; + + if (declaring_type.Module.MetadataKind == MetadataKind.WindowsMetadata && field.IsRuntimeSpecialName && field.Name == "value__") { + var base_type = declaring_type.BaseType; + if (base_type != null && IsEnum (base_type)) + treatment = FieldDefinitionTreatment.Public; + } + + if (treatment != FieldDefinitionTreatment.None) + ApplyProjection (field, new FieldDefinitionProjection (field, treatment)); + } + + public static void ApplyProjection (FieldDefinition field, FieldDefinitionProjection projection) + { + if (projection == null) + return; + + if (projection.Treatment == FieldDefinitionTreatment.Public) + field.Attributes = (field.Attributes & ~FieldAttributes.FieldAccessMask) | FieldAttributes.Public; + + field.WindowsRuntimeProjection = projection; + } + + public static FieldDefinitionProjection RemoveProjection (FieldDefinition field) + { + if (!field.IsWindowsRuntimeProjection) + return null; + + var projection = field.WindowsRuntimeProjection; + field.WindowsRuntimeProjection = null; + + field.Attributes = projection.Attributes; + + return projection; + } + + public static void Project (MemberReference member) + { + bool disposable; + if (!ImplementsRedirectedInterface (member, out disposable) || !disposable) + return; + + ApplyProjection (member, new MemberReferenceProjection (member, MemberReferenceTreatment.Dispose)); + } + + static bool ImplementsRedirectedInterface (MemberReference member, out bool disposable) + { + disposable = false; + + var declaring_type = member.DeclaringType; + TypeReference type; + switch (declaring_type.MetadataToken.TokenType) { + case TokenType.TypeRef: + type = declaring_type; + break; + + case TokenType.TypeSpec: + if (!declaring_type.IsGenericInstance) + return false; + + type = ((TypeSpecification) declaring_type).ElementType; + if (type.MetadataType != MetadataType.Class || type.MetadataToken.TokenType != TokenType.TypeRef) + return false; + + break; + + default: + return false; + } + + var projection = RemoveProjection (type); + + var found = false; + + ProjectionInfo info; + if (Projections.TryGetValue (type.Name, out info) && type.Namespace == info.WinRTNamespace) { + disposable = info.Disposable; + found = true; + } + + ApplyProjection (type, projection); + + return found; + } + + public static void ApplyProjection (MemberReference member, MemberReferenceProjection projection) + { + if (projection == null) + return; + + if (projection.Treatment == MemberReferenceTreatment.Dispose) + member.Name = "Dispose"; + + member.WindowsRuntimeProjection = projection; + } + + public static MemberReferenceProjection RemoveProjection (MemberReference member) + { + if (!member.IsWindowsRuntimeProjection) + return null; + + var projection = member.WindowsRuntimeProjection; + member.WindowsRuntimeProjection = null; + + member.Name = projection.Name; + + return projection; + } + + public void AddVirtualReferences (Collection references) + { + var corlib = GetCoreLibrary (references); + corlib_version = corlib.Version; + corlib.Version = version; + + if (virtual_references == null) { + var winrt_references = GetAssemblyReferences (corlib); + Interlocked.CompareExchange (ref virtual_references, winrt_references, null); + } + + foreach (var reference in virtual_references) + references.Add (reference); + } + + public void RemoveVirtualReferences (Collection references) + { + var corlib = GetCoreLibrary (references); + corlib.Version = corlib_version; + + foreach (var reference in VirtualReferences) + references.Remove (reference); + } + + static AssemblyNameReference[] GetAssemblyReferences (AssemblyNameReference corlib) + { + var system_runtime = new AssemblyNameReference ("System.Runtime", version); + var system_runtime_interopservices_windowsruntime = new AssemblyNameReference ("System.Runtime.InteropServices.WindowsRuntime", version); + var system_objectmodel = new AssemblyNameReference ("System.ObjectModel", version); + var system_runtime_windowsruntime = new AssemblyNameReference ("System.Runtime.WindowsRuntime", version); + var system_runtime_windowsruntime_ui_xaml = new AssemblyNameReference ("System.Runtime.WindowsRuntime.UI.Xaml", version); + var system_numerics_vectors = new AssemblyNameReference ("System.Numerics.Vectors", version); + + if (corlib.HasPublicKey) { + system_runtime_windowsruntime.PublicKey = + system_runtime_windowsruntime_ui_xaml.PublicKey = corlib.PublicKey; + + system_runtime.PublicKey = + system_runtime_interopservices_windowsruntime.PublicKey = + system_objectmodel.PublicKey = + system_numerics_vectors.PublicKey = contract_pk; + } + else { + system_runtime_windowsruntime.PublicKeyToken = + system_runtime_windowsruntime_ui_xaml.PublicKeyToken = corlib.PublicKeyToken; + + system_runtime.PublicKeyToken = + system_runtime_interopservices_windowsruntime.PublicKeyToken = + system_objectmodel.PublicKeyToken = + system_numerics_vectors.PublicKeyToken = contract_pk_token; + } + + return new[] { + system_runtime, + system_runtime_interopservices_windowsruntime, + system_objectmodel, + system_runtime_windowsruntime, + system_runtime_windowsruntime_ui_xaml, + system_numerics_vectors, + }; + } + + static AssemblyNameReference GetCoreLibrary (Collection references) + { + foreach (var reference in references) + if (reference.Name == "mscorlib") + return reference; + + throw new BadImageFormatException ("Missing mscorlib reference in AssemblyRef table."); + } + + AssemblyNameReference GetAssemblyReference (string name) + { + foreach (var assembly in VirtualReferences) + if (assembly.Name == name) + return assembly; + + throw new Exception (); + } + + public static void Project (ICustomAttributeProvider owner, CustomAttribute attribute) + { + if (!IsWindowsAttributeUsageAttribute (owner, attribute)) + return; + + var treatment = CustomAttributeValueTreatment.None; + var type = (TypeDefinition) owner; + + if (type.Namespace == "Windows.Foundation.Metadata") { + if (type.Name == "VersionAttribute") + treatment = CustomAttributeValueTreatment.VersionAttribute; + else if (type.Name == "DeprecatedAttribute") + treatment = CustomAttributeValueTreatment.DeprecatedAttribute; + } + + if (treatment == CustomAttributeValueTreatment.None) { + var multiple = HasAttribute (type, "Windows.Foundation.Metadata", "AllowMultipleAttribute"); + treatment = multiple ? CustomAttributeValueTreatment.AllowMultiple : CustomAttributeValueTreatment.AllowSingle; + } + + if (treatment != CustomAttributeValueTreatment.None) { + var attribute_targets = (AttributeTargets) attribute.ConstructorArguments [0].Value; + ApplyProjection (attribute, new CustomAttributeValueProjection (attribute_targets, treatment)); + } + } + + static bool IsWindowsAttributeUsageAttribute (ICustomAttributeProvider owner, CustomAttribute attribute) + { + if (owner.MetadataToken.TokenType != TokenType.TypeDef) + return false; + + var constructor = attribute.Constructor; + + if (constructor.MetadataToken.TokenType != TokenType.MemberRef) + return false; + + var declaring_type = constructor.DeclaringType; + + if (declaring_type.MetadataToken.TokenType != TokenType.TypeRef) + return false; + + // declaring type is already projected + return declaring_type.Name == "AttributeUsageAttribute" && declaring_type.Namespace == /*"Windows.Foundation.Metadata"*/"System"; + } + + static bool HasAttribute (TypeDefinition type, string @namespace, string name) + { + foreach (var attribute in type.CustomAttributes) { + var attribute_type = attribute.AttributeType; + if (attribute_type.Name == name && attribute_type.Namespace == @namespace) + return true; + } + return false; + } + + public static void ApplyProjection (CustomAttribute attribute, CustomAttributeValueProjection projection) + { + if (projection == null) + return; + + bool version_or_deprecated; + bool multiple; + + switch (projection.Treatment) { + case CustomAttributeValueTreatment.AllowSingle: + version_or_deprecated = false; + multiple = false; + break; + + case CustomAttributeValueTreatment.AllowMultiple: + version_or_deprecated = false; + multiple = true; + break; + + case CustomAttributeValueTreatment.VersionAttribute: + case CustomAttributeValueTreatment.DeprecatedAttribute: + version_or_deprecated = true; + multiple = true; + break; + + default: + throw new ArgumentException (); + } + + var attribute_targets = (AttributeTargets) attribute.ConstructorArguments [0].Value; + if (version_or_deprecated) + attribute_targets |= AttributeTargets.Constructor | AttributeTargets.Property; + attribute.ConstructorArguments [0] = new CustomAttributeArgument (attribute.ConstructorArguments [0].Type, attribute_targets); + + attribute.Properties.Add (new CustomAttributeNamedArgument ("AllowMultiple", new CustomAttributeArgument (attribute.Module.TypeSystem.Boolean, multiple))); + + attribute.projection = projection; + } + + public static CustomAttributeValueProjection RemoveProjection (CustomAttribute attribute) + { + if (attribute.projection == null) + return null; + + var projection = attribute.projection; + attribute.projection = null; + + attribute.ConstructorArguments [0] = new CustomAttributeArgument (attribute.ConstructorArguments [0].Type, projection.Targets); + attribute.Properties.Clear (); + + return projection; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs.meta new file mode 100644 index 0000000..9dd1e4d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Cecil/WindowsRuntimeProjections.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d214b991bbab9474bad3d203f9928a5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic.meta new file mode 100644 index 0000000..16872a6 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd0cd6352dec42c41a3a7e0e17af8240 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs new file mode 100644 index 0000000..015d271 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs @@ -0,0 +1,416 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections; +using System.Collections.Generic; + +using Mono.Cecil; + +namespace Mono.Collections.Generic { + + public class Collection : IList, IList { + + internal T [] items; + internal int size; + int version; + + public int Count { + get { return size; } + } + + public T this [int index] { + get { + if (index >= size) + throw new ArgumentOutOfRangeException (); + + return items [index]; + } + set { + CheckIndex (index); + if (index == size) + throw new ArgumentOutOfRangeException (); + + OnSet (value, index); + + items [index] = value; + } + } + + public int Capacity { + get { return items.Length; } + set { + if (value < 0 || value < size) + throw new ArgumentOutOfRangeException (); + + Resize (value); + } + } + + bool ICollection.IsReadOnly { + get { return false; } + } + + bool IList.IsFixedSize { + get { return false; } + } + + bool IList.IsReadOnly { + get { return false; } + } + + object IList.this [int index] { + get { return this [index]; } + set { + CheckIndex (index); + + try { + this [index] = (T) value; + return; + } catch (InvalidCastException) { + } catch (NullReferenceException) { + } + + throw new ArgumentException (); + } + } + + int ICollection.Count { + get { return Count; } + } + + bool ICollection.IsSynchronized { + get { return false; } + } + + object ICollection.SyncRoot { + get { return this; } + } + + public Collection () + { + items = Empty.Array; + } + + public Collection (int capacity) + { + if (capacity < 0) + throw new ArgumentOutOfRangeException (); + + items = new T [capacity]; + } + + public Collection (ICollection items) + { + if (items == null) + throw new ArgumentNullException ("items"); + + this.items = new T [items.Count]; + items.CopyTo (this.items, 0); + this.size = this.items.Length; + } + + public void Add (T item) + { + if (size == items.Length) + Grow (1); + + OnAdd (item, size); + + items [size++] = item; + version++; + } + + public bool Contains (T item) + { + return IndexOf (item) != -1; + } + + public int IndexOf (T item) + { + return Array.IndexOf (items, item, 0, size); + } + + public void Insert (int index, T item) + { + CheckIndex (index); + if (size == items.Length) + Grow (1); + + OnInsert (item, index); + + Shift (index, 1); + items [index] = item; + version++; + } + + public void RemoveAt (int index) + { + if (index < 0 || index >= size) + throw new ArgumentOutOfRangeException (); + + var item = items [index]; + + OnRemove (item, index); + + Shift (index, -1); + version++; + } + + public bool Remove (T item) + { + var index = IndexOf (item); + if (index == -1) + return false; + + OnRemove (item, index); + + Shift (index, -1); + version++; + + return true; + } + + public void Clear () + { + OnClear (); + + Array.Clear (items, 0, size); + size = 0; + version++; + } + + public void CopyTo (T [] array, int arrayIndex) + { + Array.Copy (items, 0, array, arrayIndex, size); + } + + public T [] ToArray () + { + var array = new T [size]; + Array.Copy (items, 0, array, 0, size); + return array; + } + + void CheckIndex (int index) + { + if (index < 0 || index > size) + throw new ArgumentOutOfRangeException (); + } + + void Shift (int start, int delta) + { + if (delta < 0) + start -= delta; + + if (start < size) + Array.Copy (items, start, items, start + delta, size - start); + + size += delta; + + if (delta < 0) + Array.Clear (items, size, -delta); + } + + protected virtual void OnAdd (T item, int index) + { + } + + protected virtual void OnInsert (T item, int index) + { + } + + protected virtual void OnSet (T item, int index) + { + } + + protected virtual void OnRemove (T item, int index) + { + } + + protected virtual void OnClear () + { + } + + internal virtual void Grow (int desired) + { + int new_size = size + desired; + if (new_size <= items.Length) + return; + + const int default_capacity = 4; + + new_size = System.Math.Max ( + System.Math.Max (items.Length * 2, default_capacity), + new_size); + + Resize (new_size); + } + + protected void Resize (int new_size) + { + if (new_size == size) + return; + if (new_size < size) + throw new ArgumentOutOfRangeException (); + + items = items.Resize (new_size); + } + + int IList.Add (object value) + { + try { + Add ((T) value); + return size - 1; + } catch (InvalidCastException) { + } catch (NullReferenceException) { + } + + throw new ArgumentException (); + } + + void IList.Clear () + { + Clear (); + } + + bool IList.Contains (object value) + { + return ((IList) this).IndexOf (value) > -1; + } + + int IList.IndexOf (object value) + { + try { + return IndexOf ((T) value); + } catch (InvalidCastException) { + } catch (NullReferenceException) { + } + + return -1; + } + + void IList.Insert (int index, object value) + { + CheckIndex (index); + + try { + Insert (index, (T) value); + return; + } catch (InvalidCastException) { + } catch (NullReferenceException) { + } + + throw new ArgumentException (); + } + + void IList.Remove (object value) + { + try { + Remove ((T) value); + } catch (InvalidCastException) { + } catch (NullReferenceException) { + } + } + + void IList.RemoveAt (int index) + { + RemoveAt (index); + } + + void ICollection.CopyTo (Array array, int index) + { + Array.Copy (items, 0, array, index, size); + } + + public Enumerator GetEnumerator () + { + return new Enumerator (this); + } + + IEnumerator IEnumerable.GetEnumerator () + { + return new Enumerator (this); + } + + IEnumerator IEnumerable.GetEnumerator () + { + return new Enumerator (this); + } + + public struct Enumerator : IEnumerator, IDisposable { + + Collection collection; + T current; + + int next; + readonly int version; + + public T Current { + get { return current; } + } + + object IEnumerator.Current { + get { + CheckState (); + + if (next <= 0) + throw new InvalidOperationException (); + + return current; + } + } + + internal Enumerator (Collection collection) + : this () + { + this.collection = collection; + this.version = collection.version; + } + + public bool MoveNext () + { + CheckState (); + + if (next < 0) + return false; + + if (next < collection.size) { + current = collection.items [next++]; + return true; + } + + next = -1; + return false; + } + + public void Reset () + { + CheckState (); + + next = 0; + } + + void CheckState () + { + if (collection == null) + throw new ObjectDisposedException (GetType ().FullName); + + if (version != collection.version) + throw new InvalidOperationException (); + } + + public void Dispose () + { + collection = null; + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs.meta new file mode 100644 index 0000000..281d6a7 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/Collection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0937b51b2f2164243b3a6b3baaffacb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs new file mode 100644 index 0000000..fe78414 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs @@ -0,0 +1,94 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Mono.Collections.Generic { + + public sealed class ReadOnlyCollection : Collection, ICollection, IList { + + static ReadOnlyCollection empty; + + public static ReadOnlyCollection Empty { + get { return empty ?? (empty = new ReadOnlyCollection ()); } + } + + bool ICollection.IsReadOnly { + get { return true; } + } + + bool IList.IsFixedSize { + get { return true; } + } + + bool IList.IsReadOnly { + get { return true; } + } + + ReadOnlyCollection () + { + } + + public ReadOnlyCollection (T [] array) + { + if (array == null) + throw new ArgumentNullException (); + + Initialize (array, array.Length); + } + + public ReadOnlyCollection (Collection collection) + { + if (collection == null) + throw new ArgumentNullException (); + + Initialize (collection.items, collection.size); + } + + void Initialize (T [] items, int size) + { + this.items = new T [size]; + Array.Copy (items, 0, this.items, 0, size); + this.size = size; + } + + internal override void Grow (int desired) + { + throw new InvalidOperationException (); + } + + protected override void OnAdd (T item, int index) + { + throw new InvalidOperationException (); + } + + protected override void OnClear () + { + throw new InvalidOperationException (); + } + + protected override void OnInsert (T item, int index) + { + throw new InvalidOperationException (); + } + + protected override void OnRemove (T item, int index) + { + throw new InvalidOperationException (); + } + + protected override void OnSet (T item, int index) + { + throw new InvalidOperationException (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs.meta new file mode 100644 index 0000000..1778f81 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Collections.Generic/ReadOnlyCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 519e0d48e6302264bbcf5c8bc27e152f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography.meta new file mode 100644 index 0000000..43f0f2c --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f6e47f0c50f45d42aba806425392331 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs new file mode 100644 index 0000000..51f4ca1 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs @@ -0,0 +1,253 @@ +// +// CryptoConvert.cs - Crypto Convertion Routines +// +// Author: +// Sebastien Pouliot +// +// (C) 2003 Motus Technologies Inc. (http://www.motus.com) +// Copyright (C) 2004-2006 Novell Inc. (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if !READ_ONLY + +#if !NET_CORE + +using System; +using System.Security.Cryptography; + +namespace Mono.Security.Cryptography { + + static class CryptoConvert { + + static private int ToInt32LE (byte [] bytes, int offset) + { + return (bytes [offset+3] << 24) | (bytes [offset+2] << 16) | (bytes [offset+1] << 8) | bytes [offset]; + } + + static private uint ToUInt32LE (byte [] bytes, int offset) + { + return (uint)((bytes [offset+3] << 24) | (bytes [offset+2] << 16) | (bytes [offset+1] << 8) | bytes [offset]); + } + + static private byte[] Trim (byte[] array) + { + for (int i=0; i < array.Length; i++) { + if (array [i] != 0x00) { + byte[] result = new byte [array.Length - i]; + Buffer.BlockCopy (array, i, result, 0, result.Length); + return result; + } + } + return null; + } + + static RSA FromCapiPrivateKeyBlob (byte[] blob, int offset) + { + RSAParameters rsap = new RSAParameters (); + try { + if ((blob [offset] != 0x07) || // PRIVATEKEYBLOB (0x07) + (blob [offset+1] != 0x02) || // Version (0x02) + (blob [offset+2] != 0x00) || // Reserved (word) + (blob [offset+3] != 0x00) || + (ToUInt32LE (blob, offset+8) != 0x32415352)) // DWORD magic = RSA2 + throw new CryptographicException ("Invalid blob header"); + + // ALGID (CALG_RSA_SIGN, CALG_RSA_KEYX, ...) + // int algId = ToInt32LE (blob, offset+4); + + // DWORD bitlen + int bitLen = ToInt32LE (blob, offset+12); + + // DWORD public exponent + byte[] exp = new byte [4]; + Buffer.BlockCopy (blob, offset+16, exp, 0, 4); + Array.Reverse (exp); + rsap.Exponent = Trim (exp); + + int pos = offset+20; + // BYTE modulus[rsapubkey.bitlen/8]; + int byteLen = (bitLen >> 3); + rsap.Modulus = new byte [byteLen]; + Buffer.BlockCopy (blob, pos, rsap.Modulus, 0, byteLen); + Array.Reverse (rsap.Modulus); + pos += byteLen; + + // BYTE prime1[rsapubkey.bitlen/16]; + int byteHalfLen = (byteLen >> 1); + rsap.P = new byte [byteHalfLen]; + Buffer.BlockCopy (blob, pos, rsap.P, 0, byteHalfLen); + Array.Reverse (rsap.P); + pos += byteHalfLen; + + // BYTE prime2[rsapubkey.bitlen/16]; + rsap.Q = new byte [byteHalfLen]; + Buffer.BlockCopy (blob, pos, rsap.Q, 0, byteHalfLen); + Array.Reverse (rsap.Q); + pos += byteHalfLen; + + // BYTE exponent1[rsapubkey.bitlen/16]; + rsap.DP = new byte [byteHalfLen]; + Buffer.BlockCopy (blob, pos, rsap.DP, 0, byteHalfLen); + Array.Reverse (rsap.DP); + pos += byteHalfLen; + + // BYTE exponent2[rsapubkey.bitlen/16]; + rsap.DQ = new byte [byteHalfLen]; + Buffer.BlockCopy (blob, pos, rsap.DQ, 0, byteHalfLen); + Array.Reverse (rsap.DQ); + pos += byteHalfLen; + + // BYTE coefficient[rsapubkey.bitlen/16]; + rsap.InverseQ = new byte [byteHalfLen]; + Buffer.BlockCopy (blob, pos, rsap.InverseQ, 0, byteHalfLen); + Array.Reverse (rsap.InverseQ); + pos += byteHalfLen; + + // ok, this is hackish but CryptoAPI support it so... + // note: only works because CRT is used by default + // http://bugzilla.ximian.com/show_bug.cgi?id=57941 + rsap.D = new byte [byteLen]; // must be allocated + if (pos + byteLen + offset <= blob.Length) { + // BYTE privateExponent[rsapubkey.bitlen/8]; + Buffer.BlockCopy (blob, pos, rsap.D, 0, byteLen); + Array.Reverse (rsap.D); + } + } + catch (Exception e) { + throw new CryptographicException ("Invalid blob.", e); + } + + RSA rsa = null; + try { + rsa = RSA.Create (); + rsa.ImportParameters (rsap); + } + catch (CryptographicException) { + // this may cause problem when this code is run under + // the SYSTEM identity on Windows (e.g. ASP.NET). See + // http://bugzilla.ximian.com/show_bug.cgi?id=77559 + bool throws = false; + try { + CspParameters csp = new CspParameters (); + csp.Flags = CspProviderFlags.UseMachineKeyStore; + rsa = new RSACryptoServiceProvider (csp); + rsa.ImportParameters (rsap); + } + catch { + throws = true; + } + + if (throws) { + // rethrow original, not the latter, exception if this fails + throw; + } + } + return rsa; + } + + static RSA FromCapiPublicKeyBlob (byte[] blob, int offset) + { + try { + if ((blob [offset] != 0x06) || // PUBLICKEYBLOB (0x06) + (blob [offset+1] != 0x02) || // Version (0x02) + (blob [offset+2] != 0x00) || // Reserved (word) + (blob [offset+3] != 0x00) || + (ToUInt32LE (blob, offset+8) != 0x31415352)) // DWORD magic = RSA1 + throw new CryptographicException ("Invalid blob header"); + + // ALGID (CALG_RSA_SIGN, CALG_RSA_KEYX, ...) + // int algId = ToInt32LE (blob, offset+4); + + // DWORD bitlen + int bitLen = ToInt32LE (blob, offset+12); + + // DWORD public exponent + RSAParameters rsap = new RSAParameters (); + rsap.Exponent = new byte [3]; + rsap.Exponent [0] = blob [offset+18]; + rsap.Exponent [1] = blob [offset+17]; + rsap.Exponent [2] = blob [offset+16]; + + int pos = offset+20; + // BYTE modulus[rsapubkey.bitlen/8]; + int byteLen = (bitLen >> 3); + rsap.Modulus = new byte [byteLen]; + Buffer.BlockCopy (blob, pos, rsap.Modulus, 0, byteLen); + Array.Reverse (rsap.Modulus); + + RSA rsa = null; + try { + rsa = RSA.Create (); + rsa.ImportParameters (rsap); + } + catch (CryptographicException) { + // this may cause problem when this code is run under + // the SYSTEM identity on Windows (e.g. ASP.NET). See + // http://bugzilla.ximian.com/show_bug.cgi?id=77559 + CspParameters csp = new CspParameters (); + csp.Flags = CspProviderFlags.UseMachineKeyStore; + rsa = new RSACryptoServiceProvider (csp); + rsa.ImportParameters (rsap); + } + return rsa; + } + catch (Exception e) { + throw new CryptographicException ("Invalid blob.", e); + } + } + + // PRIVATEKEYBLOB + // PUBLICKEYBLOB + static public RSA FromCapiKeyBlob (byte[] blob) + { + return FromCapiKeyBlob (blob, 0); + } + + static public RSA FromCapiKeyBlob (byte[] blob, int offset) + { + if (blob == null) + throw new ArgumentNullException ("blob"); + if (offset >= blob.Length) + throw new ArgumentException ("blob is too small."); + + switch (blob [offset]) { + case 0x00: + // this could be a public key inside an header + // like "sn -e" would produce + if (blob [offset + 12] == 0x06) { + return FromCapiPublicKeyBlob (blob, offset + 12); + } + break; + case 0x06: + return FromCapiPublicKeyBlob (blob, offset); + case 0x07: + return FromCapiPrivateKeyBlob (blob, offset); + } + throw new CryptographicException ("Unknown blob format."); + } + } +} + +#endif + +#endif + diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs.meta new file mode 100644 index 0000000..68e9489 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoConvert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b28b7ecf10bb91043b9aae588f5016ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs new file mode 100644 index 0000000..840276d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs @@ -0,0 +1,158 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +#if !READ_ONLY + +#if !NET_CORE + +using System; +using System.IO; +using System.Reflection; +using System.Security.Cryptography; +using System.Runtime.Serialization; + +using Mono.Security.Cryptography; + +using Mono.Cecil.PE; + +namespace Mono.Cecil { + + // Most of this code has been adapted + // from Jeroen Frijters' fantastic work + // in IKVM.Reflection.Emit. Thanks! + + static class CryptoService { + + public static void StrongName (Stream stream, ImageWriter writer, StrongNameKeyPair key_pair) + { + int strong_name_pointer; + + var strong_name = CreateStrongName (key_pair, HashStream (stream, writer, out strong_name_pointer)); + PatchStrongName (stream, strong_name_pointer, strong_name); + } + + static void PatchStrongName (Stream stream, int strong_name_pointer, byte [] strong_name) + { + stream.Seek (strong_name_pointer, SeekOrigin.Begin); + stream.Write (strong_name, 0, strong_name.Length); + } + + static byte [] CreateStrongName (StrongNameKeyPair key_pair, byte [] hash) + { + const string hash_algo = "SHA1"; + + using (var rsa = key_pair.CreateRSA ()) { + var formatter = new RSAPKCS1SignatureFormatter (rsa); + formatter.SetHashAlgorithm (hash_algo); + + byte [] signature = formatter.CreateSignature (hash); + Array.Reverse (signature); + + return signature; + } + } + + static byte [] HashStream (Stream stream, ImageWriter writer, out int strong_name_pointer) + { + const int buffer_size = 8192; + + var text = writer.text; + var header_size = (int) writer.GetHeaderSize (); + var text_section_pointer = (int) text.PointerToRawData; + var strong_name_directory = writer.GetStrongNameSignatureDirectory (); + + if (strong_name_directory.Size == 0) + throw new InvalidOperationException (); + + strong_name_pointer = (int) (text_section_pointer + + (strong_name_directory.VirtualAddress - text.VirtualAddress)); + var strong_name_length = (int) strong_name_directory.Size; + + var sha1 = new SHA1Managed (); + var buffer = new byte [buffer_size]; + using (var crypto_stream = new CryptoStream (Stream.Null, sha1, CryptoStreamMode.Write)) { + + stream.Seek (0, SeekOrigin.Begin); + CopyStreamChunk (stream, crypto_stream, buffer, header_size); + + stream.Seek (text_section_pointer, SeekOrigin.Begin); + CopyStreamChunk (stream, crypto_stream, buffer, (int) strong_name_pointer - text_section_pointer); + + stream.Seek (strong_name_length, SeekOrigin.Current); + CopyStreamChunk (stream, crypto_stream, buffer, (int) (stream.Length - (strong_name_pointer + strong_name_length))); + } + + return sha1.Hash; + } + + static void CopyStreamChunk (Stream stream, Stream dest_stream, byte [] buffer, int length) + { + while (length > 0) { + int read = stream.Read (buffer, 0, System.Math.Min (buffer.Length, length)); + dest_stream.Write (buffer, 0, read); + length -= read; + } + } + + public static byte [] ComputeHash (string file) + { + if (!File.Exists (file)) + return Empty.Array; + + const int buffer_size = 8192; + + var sha1 = new SHA1Managed (); + + using (var stream = new FileStream (file, FileMode.Open, FileAccess.Read, FileShare.Read)) { + + var buffer = new byte [buffer_size]; + + using (var crypto_stream = new CryptoStream (Stream.Null, sha1, CryptoStreamMode.Write)) + CopyStreamChunk (stream, crypto_stream, buffer, (int) stream.Length); + } + + return sha1.Hash; + } + } + + static partial class Mixin { + + public static RSA CreateRSA (this StrongNameKeyPair key_pair) + { + byte [] key; + string key_container; + + if (!TryGetKeyContainer (key_pair, out key, out key_container)) + return CryptoConvert.FromCapiKeyBlob (key); + + var parameters = new CspParameters { + Flags = CspProviderFlags.UseMachineKeyStore, + KeyContainerName = key_container, + KeyNumber = 2, + }; + + return new RSACryptoServiceProvider (parameters); + } + + static bool TryGetKeyContainer (ISerializable key_pair, out byte [] key, out string key_container) + { + var info = new SerializationInfo (typeof (StrongNameKeyPair), new FormatterConverter ()); + key_pair.GetObjectData (info, new StreamingContext ()); + + key = (byte []) info.GetValue ("_keyPairArray", typeof (byte [])); + key_container = info.GetString ("_keyPairContainer"); + return key_container != null; + } + } +} + +#endif + +#endif diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs.meta new file mode 100644 index 0000000..f692e30 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.Security.Cryptography/CryptoService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28f828161ccc58c4c935d65967c7ceb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.meta new file mode 100644 index 0000000..a88fdbe --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87516500b93d9ac4588ad532b379471d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs new file mode 100644 index 0000000..dc2b1a3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs @@ -0,0 +1,45 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; + +namespace Mono { + + static class Disposable { + + public static Disposable Owned (T value) where T : class, IDisposable + { + return new Disposable (value, owned: true); + } + + public static Disposable NotOwned (T value) where T : class, IDisposable + { + return new Disposable (value, owned: false); + } + } + + struct Disposable : IDisposable where T : class, IDisposable { + + internal readonly T value; + readonly bool owned; + + public Disposable (T value, bool owned) + { + this.value = value; + this.owned = owned; + } + + public void Dispose () + { + if (value != null && owned) + value.Dispose (); + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs.meta new file mode 100644 index 0000000..0399eb8 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Disposable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59a8cfe774b92fa44bdceac4eb9c75c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs new file mode 100644 index 0000000..de28e65 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs @@ -0,0 +1,62 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using Mono.Collections.Generic; + +namespace Mono { + + static class Empty { + + public static readonly T [] Array = new T [0]; + } + + class ArgumentNullOrEmptyException : ArgumentException { + + public ArgumentNullOrEmptyException (string paramName) + : base ("Argument null or empty", paramName) + { + } + } +} + +namespace Mono.Cecil { + + static partial class Mixin { + + public static bool IsNullOrEmpty (this T [] self) + { + return self == null || self.Length == 0; + } + + public static bool IsNullOrEmpty (this Collection self) + { + return self == null || self.size == 0; + } + + public static T [] Resize (this T [] self, int length) + { + Array.Resize (ref self, length); + return self; + } + + public static T [] Add (this T [] self, T item) + { + if (self == null) { + self = new [] { item }; + return self; + } + + self = self.Resize (self.Length + 1); + self [self.Length - 1] = item; + return self; + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs.meta new file mode 100644 index 0000000..6241563 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Empty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e62bad6bc56afed49bcd9fd7f353328c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs new file mode 100644 index 0000000..5d856ea --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs @@ -0,0 +1,66 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Collections.Generic; + +namespace Mono { + + class MergeSort { + private readonly T [] elements; + private readonly T [] buffer; + private readonly IComparer comparer; + + private MergeSort (T [] elements, IComparer comparer) + { + this.elements = elements; + this.buffer = new T [elements.Length]; + Array.Copy (this.elements, this.buffer, elements.Length); + this.comparer = comparer; + } + + public static void Sort (T [] source, IComparer comparer) + { + Sort (source, 0, source.Length, comparer); + } + + public static void Sort (T [] source, int start, int length, IComparer comparer) + { + new MergeSort (source, comparer).Sort (start, length); + } + + private void Sort (int start, int length) + { + TopDownSplitMerge (this.buffer, this.elements, start, length); + } + + private void TopDownSplitMerge (T [] a, T [] b, int start, int end) + { + if (end - start < 2) + return; + + int middle = (end + start) / 2; + TopDownSplitMerge (b, a, start, middle); + TopDownSplitMerge (b, a, middle, end); + TopDownMerge (a, b, start, middle, end); + } + + private void TopDownMerge (T [] a, T [] b, int start, int middle, int end) + { + for (int i = start, j = middle, k = start; k < end; k++) { + if (i < middle && (j >= end || comparer.Compare (a [i], a [j]) <= 0)) { + b [k] = a [i++]; + } else { + b [k] = a [j++]; + } + } + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs.meta new file mode 100644 index 0000000..e89f13d --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/MergeSort.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb179dfa16a3014428aa5ff036f05159 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs new file mode 100644 index 0000000..fd53f81 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs @@ -0,0 +1,137 @@ +// +// Author: +// Jb Evain (jbevain@gmail.com) +// +// Copyright (c) 2008 - 2015 Jb Evain +// Copyright (c) 2008 - 2011 Novell, Inc. +// +// Licensed under the MIT/X11 license. +// + +using System; +using System.Reflection; + +#if NET_CORE +using System.Collections.Generic; +#endif + +namespace Mono { + +#if NET_CORE + enum TypeCode { + Empty = 0, + Object = 1, + DBNull = 2, + Boolean = 3, + Char = 4, + SByte = 5, + Byte = 6, + Int16 = 7, + UInt16 = 8, + Int32 = 9, + UInt32 = 10, + Int64 = 11, + UInt64 = 12, + Single = 13, + Double = 14, + Decimal = 15, + DateTime = 16, + String = 18 + } +#endif + + static class TypeExtensions { + +#if NET_CORE + private static readonly Dictionary TypeCodeMap = new Dictionary + { + { typeof (bool), TypeCode.Boolean }, + { typeof (char), TypeCode.Char }, + { typeof (sbyte), TypeCode.SByte }, + { typeof (byte), TypeCode.Byte }, + { typeof (short), TypeCode.Int16 }, + { typeof (ushort), TypeCode.UInt16 }, + { typeof (int), TypeCode.Int32 }, + { typeof (uint), TypeCode.UInt32 }, + { typeof (long), TypeCode.Int64 }, + { typeof (ulong), TypeCode.UInt64 }, + { typeof (float), TypeCode.Single }, + { typeof (double), TypeCode.Double }, + { typeof (decimal), TypeCode.Decimal }, + { typeof (DateTime), TypeCode.DateTime }, + { typeof (string), TypeCode.String }, + }; +#endif + + public static TypeCode GetTypeCode (this Type type) + { +#if NET_CORE + if (type == null) + return TypeCode.Empty; + + TypeCode code; + if (!TypeCodeMap.TryGetValue (type, out code)) + return TypeCode.Object; + + return code; +#else + return Type.GetTypeCode (type); +#endif + } + + public static Assembly Assembly (this Type type) + { +#if NET_CORE + return type.GetTypeInfo ().Assembly; +#else + return type.Assembly; +#endif + } + + public static MethodBase DeclaringMethod (this Type type) + { +#if NET_CORE + return type.GetTypeInfo ().DeclaringMethod; +#else + return type.DeclaringMethod; +#endif + } + + public static Type [] GetGenericArguments (this Type type) + { +#if NET_CORE + var info = type.GetTypeInfo (); + return info.IsGenericTypeDefinition ? info.GenericTypeParameters : info.GenericTypeArguments; +#else + return type.GetGenericArguments (); +#endif + } + + public static bool IsGenericType (this Type type) + { +#if NET_CORE + return type.GetTypeInfo ().IsGenericType; +#else + return type.IsGenericType; +#endif + } + + public static bool IsGenericTypeDefinition (this Type type) + { +#if NET_CORE + return type.GetTypeInfo ().IsGenericTypeDefinition; +#else + return type.IsGenericTypeDefinition; +#endif + } + + public static bool IsValueType (this Type type) + { +#if NET_CORE + return type.GetTypeInfo ().IsValueType; +#else + return type.IsValueType; +#endif + } + } +} diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs.meta new file mode 100644 index 0000000..1c8d4c3 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/Mono/Type.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bcf2eb6100fdef4ea0618eb00eb6726 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md new file mode 100644 index 0000000..3ae656f --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md @@ -0,0 +1,23 @@ +Cecil +===== + +Mono.Cecil is a library to generate and inspect programs and libraries in the ECMA CIL form. + +To put it simply, you can use Cecil to: + +* Analyze .NET binaries using a simple and powerful object model, without having to load assemblies to use Reflection. +* Modify .NET binaries, add new metadata structures and alter the IL code. + +Cecil has been around since 2004 and is [widely used](https://github.com/jbevain/cecil/wiki/Users) in the .NET community. + +The best way to learn how to use Cecil is to dive into the [Cecil.Samples](https://github.com/jbevain/cecil.samples) repository. It's a growing collection of samples with the goal of showing how to get things done using Cecil, as IL manipulation can sometime get tricky. + +Read about the Cecil development on the [development log](http://cecil.pe). + +To discuss Cecil, the best place is the [mono-cecil](https://groups.google.com/group/mono-cecil) Google Group. + +Cecil is a project under the benevolent umbrella of the [.NET Foundation](http://www.dotnetfoundation.org/). + +[![.NET build status](https://ci.appveyor.com/api/projects/status/fmhutmhidy1fahl4?svg=true)](https://ci.appveyor.com/project/jbevain/cecil) +[![Mono build status](https://travis-ci.org/jbevain/cecil.svg?branch=master)](https://travis-ci.org/jbevain/cecil) +[![Join the chat at https://gitter.im/jbevain/cecil](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jbevain/cecil?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) diff --git a/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md.meta b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md.meta new file mode 100644 index 0000000..6df0118 --- /dev/null +++ b/Assets/Plugins/FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 912e8c6793ea3f640bb109aa54ea739d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FrameRateBooster/ThirdPartyNotices.txt b/Assets/Plugins/FrameRateBooster/ThirdPartyNotices.txt index a2f13f8..1ece51b 100644 --- a/Assets/Plugins/FrameRateBooster/ThirdPartyNotices.txt +++ b/Assets/Plugins/FrameRateBooster/ThirdPartyNotices.txt @@ -2,4 +2,4 @@ Asset is governed by the Asset Store EULA; however, the following third party co ==== Cecil ==== MIT License -Full license is available at the following file: FrameRateBooster/Mono.Cecil.0.10.0/LICENSE.txt +Full license is available at the following file: FrameRateBooster/ThirdParty/Editor/Mono.Cecil.0.10.3/LICENSE.txt