You've already forked linux-packaging-mono
Imported Upstream version 5.2.0.175
Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
This commit is contained in:
parent
4bdbaf4a88
commit
966bba02bb
76
external/cecil/Mono.Cecil/AssemblyWriter.cs
vendored
76
external/cecil/Mono.Cecil/AssemblyWriter.cs
vendored
@ -72,7 +72,13 @@ namespace Mono.Cecil {
|
||||
|
||||
static class ModuleWriter {
|
||||
|
||||
public static void WriteModuleTo (ModuleDefinition module, Disposable<Stream> stream, WriterParameters parameters)
|
||||
public static void WriteModule (ModuleDefinition module, Disposable<Stream> stream, WriterParameters parameters)
|
||||
{
|
||||
using (stream)
|
||||
Write (module, stream, parameters);
|
||||
}
|
||||
|
||||
static void Write (ModuleDefinition module, Disposable<Stream> stream, WriterParameters parameters)
|
||||
{
|
||||
if ((module.Attributes & ModuleAttributes.ILOnly) == 0)
|
||||
throw new NotSupportedException ("Writing mixed-mode assemblies is not supported");
|
||||
@ -90,38 +96,32 @@ namespace Mono.Cecil {
|
||||
|
||||
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 !PCL && !NET_CORE
|
||||
|
||||
if (symbol_writer_provider == null && parameters.WriteSymbols)
|
||||
symbol_writer_provider = new DefaultSymbolWriterProvider ();
|
||||
#endif
|
||||
var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters);
|
||||
|
||||
#if !PCL && !NET_CORE
|
||||
#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, symbol_writer_provider, symbol_writer);
|
||||
using (var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters)) {
|
||||
var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider, symbol_writer);
|
||||
BuildMetadata (module, metadata);
|
||||
|
||||
BuildMetadata (module, metadata);
|
||||
var writer = ImageWriter.CreateWriter (module, metadata, stream);
|
||||
stream.value.SetLength (0);
|
||||
writer.WriteImage ();
|
||||
|
||||
var writer = ImageWriter.CreateWriter (module, metadata, stream);
|
||||
|
||||
stream.value.SetLength (0);
|
||||
writer.WriteImage ();
|
||||
|
||||
if (metadata.symbol_writer != null)
|
||||
metadata.symbol_writer.Dispose ();
|
||||
|
||||
#if !PCL && !NET_CORE
|
||||
if (parameters.StrongNameKeyPair != null)
|
||||
CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair);
|
||||
|
||||
stream.Dispose ();
|
||||
#if !NET_CORE
|
||||
if (parameters.StrongNameKeyPair != null)
|
||||
CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static void BuildMetadata (ModuleDefinition module, MetadataBuilder metadata)
|
||||
@ -145,11 +145,7 @@ namespace Mono.Cecil {
|
||||
if (parameters.SymbolStream != null)
|
||||
return symbol_writer_provider.GetSymbolWriter (module, parameters.SymbolStream);
|
||||
|
||||
#if !PCL
|
||||
return symbol_writer_provider.GetSymbolWriter (module, fq_name);
|
||||
#else
|
||||
return null;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -797,7 +793,7 @@ namespace Mono.Cecil {
|
||||
readonly internal ISymbolWriter symbol_writer;
|
||||
readonly internal TextMap text_map;
|
||||
readonly internal string fq_name;
|
||||
readonly internal uint time_stamp;
|
||||
readonly internal uint timestamp;
|
||||
|
||||
readonly Dictionary<TypeRefRow, MetadataToken> type_ref_map;
|
||||
readonly Dictionary<uint, MetadataToken> type_spec_map;
|
||||
@ -860,14 +856,12 @@ namespace Mono.Cecil {
|
||||
readonly Dictionary<ImportScopeRow, MetadataToken> import_scope_map;
|
||||
readonly Dictionary<string, MetadataToken> document_map;
|
||||
|
||||
readonly internal bool write_symbols;
|
||||
|
||||
public MetadataBuilder (ModuleDefinition module, string fq_name, ISymbolWriterProvider symbol_writer_provider, ISymbolWriter symbol_writer)
|
||||
public MetadataBuilder (ModuleDefinition module, string fq_name, uint timestamp, ISymbolWriterProvider symbol_writer_provider, ISymbolWriter symbol_writer)
|
||||
{
|
||||
this.module = module;
|
||||
this.text_map = CreateTextMap ();
|
||||
this.fq_name = fq_name;
|
||||
this.time_stamp = module.timestamp;
|
||||
this.timestamp = timestamp;
|
||||
this.symbol_writer_provider = symbol_writer_provider;
|
||||
|
||||
if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ()) {
|
||||
@ -875,12 +869,11 @@ namespace Mono.Cecil {
|
||||
}
|
||||
|
||||
this.symbol_writer = symbol_writer;
|
||||
this.write_symbols = symbol_writer != null;
|
||||
|
||||
var pdb_writer = symbol_writer as PortablePdbWriter;
|
||||
var pdb_writer = symbol_writer as IMetadataSymbolWriter;
|
||||
if (pdb_writer != null) {
|
||||
portable_pdb = true;
|
||||
pdb_writer.SetModuleMetadata (this);
|
||||
pdb_writer.SetMetadata (this);
|
||||
}
|
||||
|
||||
this.code = new CodeWriter (this);
|
||||
@ -1085,7 +1078,7 @@ namespace Mono.Cecil {
|
||||
if (module.IsMain)
|
||||
continue;
|
||||
|
||||
#if PCL || NET_CORE
|
||||
#if NET_CORE
|
||||
throw new NotSupportedException ();
|
||||
#else
|
||||
var parameters = new WriterParameters {
|
||||
@ -1105,7 +1098,7 @@ namespace Mono.Cecil {
|
||||
}
|
||||
}
|
||||
|
||||
#if !PCL && !NET_CORE
|
||||
#if !NET_CORE
|
||||
string GetModuleFileName (string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty (name))
|
||||
@ -1206,7 +1199,7 @@ namespace Mono.Cecil {
|
||||
var table = GetTable<FileTable> (Table.File);
|
||||
var hash = resource.Hash;
|
||||
|
||||
#if !PCL && !NET_CORE
|
||||
#if !NET_CORE
|
||||
if (hash.IsNullOrEmpty ())
|
||||
hash = CryptoService.ComputeHash (resource.File);
|
||||
#endif
|
||||
@ -2061,6 +2054,11 @@ namespace Mono.Cecil {
|
||||
return GetBlobIndex (GetMethodSignature (call_site));
|
||||
}
|
||||
|
||||
public uint GetConstantTypeBlobIndex (TypeReference constant_type)
|
||||
{
|
||||
return GetBlobIndex (GetConstantTypeSignature (constant_type));
|
||||
}
|
||||
|
||||
SignatureWriter GetVariablesSignature (Collection<VariableDefinition> variables)
|
||||
{
|
||||
var signature = CreateSignatureWriter ();
|
||||
@ -2071,6 +2069,14 @@ namespace Mono.Cecil {
|
||||
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 ();
|
||||
|
Reference in New Issue
Block a user