Skip to content

Commit 58a4bb8

Browse files
authored
Merge pull request #315 from kevmal/asmcustattrs
Support assembly attributes
2 parents 592d23a + 032d9ff commit 58a4bb8

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/ProvidedTypes.fs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8080,9 +8080,12 @@ namespace ProviderImplementation.ProvidedTypes
80808080

80818081

80828082

8083-
type ProvidedAssembly(isTgt: bool, assemblyName:AssemblyName, assemblyFileName: string) =
8083+
type ProvidedAssembly(isTgt: bool, assemblyName:AssemblyName, assemblyFileName: string, customAttributesData) =
80848084

80858085
inherit Assembly()
8086+
8087+
let customAttributesImpl = CustomAttributesImpl(isTgt, customAttributesData)
8088+
80868089
let theTypes = ResizeArray<ProvidedTypeDefinition[] * string list option>()
80878090

80888091
let addTypes (ptds:ProvidedTypeDefinition[], enclosingTypeNames: string list option) =
@@ -8093,6 +8096,8 @@ namespace ProviderImplementation.ProvidedTypes
80938096
theTypes.Add (ptds, enclosingTypeNames)
80948097

80958098
let theTypesArray = lazy (theTypes.ToArray() |> Array.collect (function (ptds, None) -> Array.map (fun ptd -> (ptd :> Type)) ptds | _ -> [| |]))
8099+
8100+
member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute)
80968101

80978102
override __.GetReferencedAssemblies() = [| |] //notRequired x "GetReferencedAssemblies" (assemblyName.ToString())
80988103

@@ -8128,7 +8133,7 @@ namespace ProviderImplementation.ProvidedTypes
81288133
ProvidedAssembly(AssemblyName(simpleName), assemblyFileName)
81298134

81308135
new (assemblyName, assemblyFileName) =
8131-
ProvidedAssembly(false, assemblyName, assemblyFileName)
8136+
ProvidedAssembly(false, assemblyName, assemblyFileName, K [||])
81328137

81338138
member __.BelongsToTargetModel = isTgt
81348139

@@ -8142,6 +8147,8 @@ namespace ProviderImplementation.ProvidedTypes
81428147
addTypes (types, enclosingGeneratedTypeNames)
81438148

81448149
member __.GetTheTypes () = theTypes.ToArray()
8150+
8151+
override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData()
81458152

81468153
//====================================================================================================
81478154
// ProvidedTypesContext
@@ -9236,9 +9243,9 @@ namespace ProviderImplementation.ProvidedTypes
92369243
match assemblyTableFwd.TryGetValue(assembly) with
92379244
| true, newT -> newT
92389245
| false, _ ->
9239-
let tgtAssembly = ProvidedAssembly(true, assembly.GetName(), assembly.Location)
9246+
let tgtAssembly = ProvidedAssembly(true, assembly.GetName(), assembly.Location, K(convCustomAttributesDataToTgt(assembly.GetCustomAttributesData())))
92409247

9241-
for (types, enclosingGeneratedTypeNames) in assembly.GetTheTypes() do
9248+
for (types, enclosingGeneratedTypeNames) in assembly.GetTheTypes() do
92429249
let typesT = Array.map convProvidedTypeDefToTgt types
92439250
tgtAssembly.AddTheTypes (typesT, enclosingGeneratedTypeNames)
92449251

@@ -13673,14 +13680,15 @@ namespace ProviderImplementation.ProvidedTypes
1367313680
}
1367413681
override __.ToString() = "builder for " + moduleName
1367513682

13676-
type ILAssemblyBuilder(assemblyName: AssemblyName, fileName, ilg) =
13683+
type ILAssemblyBuilder(assemblyName: AssemblyName, fileName, ilg, attrs : ILCustomAttribute seq) =
13684+
let cattrs = ResizeArray<ILCustomAttribute>(attrs)
1367713685
let manifest =
1367813686
{ Name = assemblyName.Name
1367913687
AuxModuleHashAlgorithm = 0x8004 // SHA1
1368013688
PublicKey = UNone
1368113689
Version = UNone
1368213690
Locale = UNone
13683-
CustomAttrs = emptyILCustomAttrs
13691+
CustomAttrs = { new ILCustomAttrs with member __.Entries = cattrs.ToArray() }
1368413692
//AssemblyLongevity=ILAssemblyLongevity.Unspecified
1368513693
DisableJitOptimizations = false
1368613694
JitTracking = true
@@ -14286,7 +14294,11 @@ namespace ProviderImplementation.ProvidedTypes
1428614294
let ilg = context.ILGlobals
1428714295
let assemblyName = targetAssembly.GetName()
1428814296
let assemblyFileName = targetAssembly.Location
14289-
let assemblyBuilder = ILAssemblyBuilder(assemblyName, assemblyFileName, ilg)
14297+
let assemblyBuilder =
14298+
let attrs = targetAssembly.GetCustomAttributesData()
14299+
let cattrs = ResizeArray()
14300+
defineCustomAttrs cattrs.Add attrs
14301+
ILAssemblyBuilder(assemblyName, assemblyFileName, ilg, cattrs)
1429014302
let assemblyMainModule = assemblyBuilder.MainModule
1429114303

1429214304
// Set the Assembly on the type definitions

0 commit comments

Comments
 (0)