You've already forked linux-packaging-mono
Imported Upstream version 4.8.0.309
Former-commit-id: 5f9c6ae75f295e057a7d2971f3a6df4656fa8850
This commit is contained in:
parent
ee1447783b
commit
94b2861243
9
external/cecil/.gitattributes
vendored
9
external/cecil/.gitattributes
vendored
@@ -1 +1,8 @@
|
||||
* text=lf
|
||||
* text=auto
|
||||
|
||||
.md text
|
||||
.cs text
|
||||
|
||||
.sln text=crlf
|
||||
.*proj text=crlf
|
||||
.settings text=crlf
|
||||
|
5
external/cecil/.gitignore
vendored
5
external/cecil/.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
bin
|
||||
obj
|
||||
*.suo
|
||||
*.iml
|
||||
*.user
|
||||
*.pidb
|
||||
*.userprefs
|
||||
@@ -8,3 +9,7 @@ obj
|
||||
*.nupkg
|
||||
**/test-results/*
|
||||
*Resharper*
|
||||
Mono.Cecil.sln.ide*
|
||||
TestResults
|
||||
project.lock.json
|
||||
.vs/
|
||||
|
8
external/cecil/.travis.yml
vendored
Normal file
8
external/cecil/.travis.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
language: csharp
|
||||
solution: Mono.Cecil.sln
|
||||
install:
|
||||
- nuget restore Mono.Cecil.sln
|
||||
- nuget install NUnit.Runners -Version 2.6.4 -OutputDirectory testrunner
|
||||
script:
|
||||
- xbuild /p:Configuration=net_4_0_Debug Mono.Cecil.sln
|
||||
- mono ./testrunner/NUnit.Runners.2.6.4/tools/nunit-console.exe Mono.Cecil.nunit
|
21
external/cecil/LICENSE.txt
vendored
Normal file
21
external/cecil/LICENSE.txt
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
Copyright (c) 2008 - 2015 Jb Evain
|
||||
Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
|
||||
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.
|
24
external/cecil/Mono.Cecil.Cil/Code.cs
vendored
24
external/cecil/Mono.Cecil.Cil/Code.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// Code.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
241
external/cecil/Mono.Cecil.Cil/CodeReader.cs
vendored
241
external/cecil/Mono.Cecil.Cil/CodeReader.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// CodeReader.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
@@ -35,58 +17,53 @@ using RVA = System.UInt32;
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
||||
sealed class CodeReader : ByteBuffer {
|
||||
sealed class CodeReader : BinaryStreamReader {
|
||||
|
||||
readonly internal MetadataReader reader;
|
||||
|
||||
int start;
|
||||
Section code_section;
|
||||
|
||||
MethodDefinition method;
|
||||
MethodBody body;
|
||||
|
||||
int Offset {
|
||||
get { return base.position - start; }
|
||||
get { return Position - start; }
|
||||
}
|
||||
|
||||
public CodeReader (Section section, MetadataReader reader)
|
||||
: base (section.Data)
|
||||
public CodeReader (MetadataReader reader)
|
||||
: base (reader.image.Stream.value)
|
||||
{
|
||||
this.code_section = section;
|
||||
this.reader = reader;
|
||||
}
|
||||
|
||||
public int MoveTo (MethodDefinition method)
|
||||
{
|
||||
this.method = method;
|
||||
this.reader.context = method;
|
||||
var position = this.Position;
|
||||
this.Position = (int) reader.image.ResolveVirtualAddress ((uint) method.RVA);
|
||||
return position;
|
||||
}
|
||||
|
||||
void MoveBackTo (int position)
|
||||
{
|
||||
this.reader.context = null;
|
||||
this.Position = position;
|
||||
}
|
||||
|
||||
public MethodBody ReadMethodBody (MethodDefinition method)
|
||||
{
|
||||
this.method = method;
|
||||
var position = MoveTo (method);
|
||||
this.body = new MethodBody (method);
|
||||
|
||||
reader.context = method;
|
||||
|
||||
ReadMethodBody ();
|
||||
|
||||
MoveBackTo (position);
|
||||
return this.body;
|
||||
}
|
||||
|
||||
public void MoveTo (int rva)
|
||||
{
|
||||
if (!IsInSection (rva)) {
|
||||
code_section = reader.image.GetSectionAtVirtualAddress ((uint) rva);
|
||||
Reset (code_section.Data);
|
||||
}
|
||||
|
||||
base.position = rva - (int) code_section.VirtualAddress;
|
||||
}
|
||||
|
||||
bool IsInSection (int rva)
|
||||
{
|
||||
return code_section.VirtualAddress <= rva && rva < code_section.VirtualAddress + code_section.SizeOfRawData;
|
||||
}
|
||||
|
||||
void ReadMethodBody ()
|
||||
{
|
||||
MoveTo (method.RVA);
|
||||
|
||||
var flags = ReadByte ();
|
||||
switch (flags & 0x3) {
|
||||
case 0x2: // tiny
|
||||
@@ -95,7 +72,7 @@ namespace Mono.Cecil.Cil {
|
||||
ReadCode ();
|
||||
break;
|
||||
case 0x3: // fat
|
||||
base.position--;
|
||||
Advance (-1);
|
||||
ReadFatMethod ();
|
||||
break;
|
||||
default:
|
||||
@@ -104,12 +81,102 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
var symbol_reader = reader.module.symbol_reader;
|
||||
|
||||
if (symbol_reader != null) {
|
||||
var instructions = body.Instructions;
|
||||
symbol_reader.Read (body, offset => GetInstruction (instructions, offset));
|
||||
if (symbol_reader != null && method.debug_info == null)
|
||||
method.debug_info = symbol_reader.Read (method);
|
||||
|
||||
if (method.debug_info != null)
|
||||
ReadDebugInfo ();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
state_machine_scope.start = new InstructionOffset (GetInstruction (state_machine_scope.start.Offset));
|
||||
|
||||
var end_instruction = GetInstruction (state_machine_scope.end.Offset);
|
||||
state_machine_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<ScopeDebugInformation> scopes)
|
||||
{
|
||||
for (int i = 0; i < scopes.Count; i++)
|
||||
ReadScope (scopes [i]);
|
||||
}
|
||||
|
||||
void ReadScope (ScopeDebugInformation scope)
|
||||
{
|
||||
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);
|
||||
|
||||
if (!scope.variables.IsNullOrEmpty ()) {
|
||||
for (int i = 0; i < scope.variables.Count; i++) {
|
||||
var variable = scope.variables [i];
|
||||
variable.index = new VariableIndex (GetVariable (variable.Index));
|
||||
}
|
||||
}
|
||||
|
||||
if (!scope.scopes.IsNullOrEmpty ())
|
||||
ReadScopes (scope.scopes);
|
||||
}
|
||||
|
||||
void ReadFatMethod ()
|
||||
{
|
||||
var flags = ReadUInt16 ();
|
||||
@@ -138,17 +205,17 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
void ReadCode ()
|
||||
{
|
||||
start = position;
|
||||
start = Position;
|
||||
var code_size = body.code_size;
|
||||
|
||||
if (code_size < 0 || buffer.Length <= (uint) (code_size + position))
|
||||
if (code_size < 0 || Length <= (uint) (code_size + Position))
|
||||
code_size = 0;
|
||||
|
||||
var end = start + code_size;
|
||||
var instructions = body.instructions = new InstructionCollection ((code_size + 1) / 2);
|
||||
var instructions = body.instructions = new InstructionCollection (method, (code_size + 1) / 2);
|
||||
|
||||
while (position < end) {
|
||||
var offset = base.position - start;
|
||||
while (Position < end) {
|
||||
var offset = Position - start;
|
||||
var opcode = ReadOpCode ();
|
||||
var current = new Instruction (offset, opcode);
|
||||
|
||||
@@ -248,7 +315,9 @@ namespace Mono.Cecil.Cil {
|
||||
switch (instruction.opcode.OperandType) {
|
||||
case OperandType.ShortInlineBrTarget:
|
||||
case OperandType.InlineBrTarget:
|
||||
instruction.operand = GetInstruction ((int) instruction.operand);
|
||||
var targetInstruction = GetInstruction ((int) instruction.operand);
|
||||
if (targetInstruction != null)
|
||||
instruction.operand = targetInstruction;
|
||||
break;
|
||||
case OperandType.InlineSwitch:
|
||||
var offsets = (int []) instruction.operand;
|
||||
@@ -323,7 +392,7 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
void ReadFatSection ()
|
||||
{
|
||||
position--;
|
||||
Advance (-1);
|
||||
var count = (ReadInt32 () >> 8) / 24;
|
||||
|
||||
ReadExceptionHandlers (
|
||||
@@ -369,6 +438,7 @@ namespace Mono.Cecil.Cil {
|
||||
void Align (int align)
|
||||
{
|
||||
align--;
|
||||
var position = Position;
|
||||
Advance (((position + align) & ~align) - position);
|
||||
}
|
||||
|
||||
@@ -379,78 +449,57 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
#if !READ_ONLY
|
||||
|
||||
public ByteBuffer PatchRawMethodBody (MethodDefinition method, CodeWriter writer, out MethodSymbols symbols)
|
||||
public ByteBuffer PatchRawMethodBody (MethodDefinition method, CodeWriter writer, out int code_size, out MetadataToken local_var_token)
|
||||
{
|
||||
var position = MoveTo (method);
|
||||
|
||||
var buffer = new ByteBuffer ();
|
||||
symbols = new MethodSymbols (method.Name);
|
||||
|
||||
this.method = method;
|
||||
reader.context = method;
|
||||
|
||||
MoveTo (method.RVA);
|
||||
|
||||
var flags = ReadByte ();
|
||||
|
||||
MetadataToken local_var_token;
|
||||
|
||||
switch (flags & 0x3) {
|
||||
case 0x2: // tiny
|
||||
buffer.WriteByte (flags);
|
||||
local_var_token = MetadataToken.Zero;
|
||||
symbols.code_size = flags >> 2;
|
||||
PatchRawCode (buffer, symbols.code_size, writer);
|
||||
code_size = flags >> 2;
|
||||
PatchRawCode (buffer, code_size, writer);
|
||||
break;
|
||||
case 0x3: // fat
|
||||
base.position--;
|
||||
|
||||
PatchRawFatMethod (buffer, symbols, writer, out local_var_token);
|
||||
Advance (-1);
|
||||
PatchRawFatMethod (buffer, writer, out code_size, out local_var_token);
|
||||
break;
|
||||
default:
|
||||
throw new NotSupportedException ();
|
||||
}
|
||||
|
||||
var symbol_reader = reader.module.symbol_reader;
|
||||
if (symbol_reader != null && writer.metadata.write_symbols) {
|
||||
symbols.method_token = GetOriginalToken (writer.metadata, method);
|
||||
symbols.local_var_token = local_var_token;
|
||||
symbol_reader.Read (symbols);
|
||||
}
|
||||
MoveBackTo (position);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void PatchRawFatMethod (ByteBuffer buffer, MethodSymbols symbols, CodeWriter writer, out MetadataToken local_var_token)
|
||||
void PatchRawFatMethod (ByteBuffer buffer, CodeWriter writer, out int code_size, out MetadataToken local_var_token)
|
||||
{
|
||||
var flags = ReadUInt16 ();
|
||||
buffer.WriteUInt16 (flags);
|
||||
buffer.WriteUInt16 (ReadUInt16 ());
|
||||
symbols.code_size = ReadInt32 ();
|
||||
buffer.WriteInt32 (symbols.code_size);
|
||||
code_size = ReadInt32 ();
|
||||
buffer.WriteInt32 (code_size);
|
||||
local_var_token = ReadToken ();
|
||||
|
||||
if (local_var_token.RID > 0) {
|
||||
var variables = symbols.variables = ReadVariables (local_var_token);
|
||||
var variables = ReadVariables (local_var_token);
|
||||
buffer.WriteUInt32 (variables != null
|
||||
? writer.GetStandAloneSignature (symbols.variables).ToUInt32 ()
|
||||
? writer.GetStandAloneSignature (variables).ToUInt32 ()
|
||||
: 0);
|
||||
} else
|
||||
buffer.WriteUInt32 (0);
|
||||
|
||||
PatchRawCode (buffer, symbols.code_size, writer);
|
||||
PatchRawCode (buffer, code_size, writer);
|
||||
|
||||
if ((flags & 0x8) != 0)
|
||||
PatchRawSection (buffer, writer.metadata);
|
||||
}
|
||||
|
||||
static MetadataToken GetOriginalToken (MetadataBuilder metadata, MethodDefinition method)
|
||||
{
|
||||
MetadataToken original;
|
||||
if (metadata.TryGetOriginalMethodToken (method.token, out original))
|
||||
return original;
|
||||
|
||||
return MetadataToken.Zero;
|
||||
}
|
||||
|
||||
void PatchRawCode (ByteBuffer buffer, int code_size, CodeWriter writer)
|
||||
{
|
||||
var metadata = writer.metadata;
|
||||
@@ -519,9 +568,9 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
void PatchRawSection (ByteBuffer buffer, MetadataBuilder metadata)
|
||||
{
|
||||
var position = base.position;
|
||||
var position = Position;
|
||||
Align (4);
|
||||
buffer.WriteBytes (base.position - position);
|
||||
buffer.WriteBytes (Position - position);
|
||||
|
||||
const byte fat_format = 0x40;
|
||||
const byte more_sects = 0x80;
|
||||
@@ -552,7 +601,7 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
void PatchRawFatSection (ByteBuffer buffer, MetadataBuilder metadata)
|
||||
{
|
||||
position--;
|
||||
Advance (-1);
|
||||
var length = ReadInt32 ();
|
||||
buffer.WriteInt32 (length);
|
||||
|
||||
|
71
external/cecil/Mono.Cecil.Cil/CodeWriter.cs
vendored
71
external/cecil/Mono.Cecil.Cil/CodeWriter.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// CodeWriter.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
@@ -93,31 +75,23 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
void WriteUnresolvedMethodBody (MethodDefinition method)
|
||||
{
|
||||
var code_reader = metadata.module.Read (method, (_, reader) => reader.code);
|
||||
var code_reader = metadata.module.reader.code;
|
||||
|
||||
MethodSymbols symbols;
|
||||
var buffer = code_reader.PatchRawMethodBody (method, this, out symbols);
|
||||
int code_size;
|
||||
MetadataToken local_var_token;
|
||||
var buffer = code_reader.PatchRawMethodBody (method, this, out code_size, out local_var_token);
|
||||
|
||||
WriteBytes (buffer);
|
||||
|
||||
if (symbols.instructions.IsNullOrEmpty ())
|
||||
if (method.debug_info == null)
|
||||
return;
|
||||
|
||||
symbols.method_token = method.token;
|
||||
symbols.local_var_token = GetLocalVarToken (buffer, symbols);
|
||||
|
||||
var symbol_writer = metadata.symbol_writer;
|
||||
if (symbol_writer != null)
|
||||
symbol_writer.Write (symbols);
|
||||
}
|
||||
|
||||
static MetadataToken GetLocalVarToken (ByteBuffer buffer, MethodSymbols symbols)
|
||||
{
|
||||
if (symbols.variables.IsNullOrEmpty ())
|
||||
return MetadataToken.Zero;
|
||||
|
||||
buffer.position = 8;
|
||||
return new MetadataToken (buffer.ReadUInt32 ());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void WriteResolvedMethodBody (MethodDefinition method)
|
||||
@@ -135,8 +109,11 @@ namespace Mono.Cecil.Cil {
|
||||
WriteExceptionHandlers ();
|
||||
|
||||
var symbol_writer = metadata.symbol_writer;
|
||||
if (symbol_writer != null)
|
||||
symbol_writer.Write (body);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void WriteFatHeader ()
|
||||
@@ -202,13 +179,11 @@ namespace Mono.Cecil.Cil {
|
||||
break;
|
||||
}
|
||||
case OperandType.ShortInlineBrTarget: {
|
||||
var target = (Instruction) operand;
|
||||
WriteSByte ((sbyte) (GetTargetOffset (target) - (instruction.Offset + opcode.Size + 1)));
|
||||
WriteSByte ((sbyte) (GetTargetOffset (operand) - (instruction.Offset + opcode.Size + 1)));
|
||||
break;
|
||||
}
|
||||
case OperandType.InlineBrTarget: {
|
||||
var target = (Instruction) operand;
|
||||
WriteInt32 (GetTargetOffset (target) - (instruction.Offset + opcode.Size + 4));
|
||||
WriteInt32 (GetTargetOffset (operand) - (instruction.Offset + opcode.Size + 4));
|
||||
break;
|
||||
}
|
||||
case OperandType.ShortInlineVar:
|
||||
@@ -261,8 +236,12 @@ namespace Mono.Cecil.Cil {
|
||||
}
|
||||
}
|
||||
|
||||
int GetTargetOffset (Instruction instruction)
|
||||
int GetTargetOffset (object o)
|
||||
{
|
||||
if (o is int)
|
||||
return (int) o;
|
||||
|
||||
Instruction instruction = o as Instruction;
|
||||
if (instruction == null) {
|
||||
var last = body.instructions [body.instructions.size - 1];
|
||||
return last.offset + last.GetSize ();
|
||||
|
28
external/cecil/Mono.Cecil.Cil/Document.cs
vendored
28
external/cecil/Mono.Cecil.Cil/Document.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// Document.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
@@ -39,6 +21,7 @@ namespace Mono.Cecil.Cil {
|
||||
None,
|
||||
MD5,
|
||||
SHA1,
|
||||
SHA256,
|
||||
}
|
||||
|
||||
public enum DocumentLanguage {
|
||||
@@ -62,7 +45,7 @@ namespace Mono.Cecil.Cil {
|
||||
Microsoft,
|
||||
}
|
||||
|
||||
public sealed class Document {
|
||||
public sealed class Document : DebugInformation {
|
||||
|
||||
string url;
|
||||
|
||||
@@ -107,6 +90,7 @@ namespace Mono.Cecil.Cil {
|
||||
{
|
||||
this.url = url;
|
||||
this.hash = Empty<byte>.Array;
|
||||
this.token = new MetadataToken (TokenType.Document);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// ExceptionHandler.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
24
external/cecil/Mono.Cecil.Cil/ILProcessor.cs
vendored
24
external/cecil/Mono.Cecil.Cil/ILProcessor.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// ILProcessor.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
42
external/cecil/Mono.Cecil.Cil/Instruction.cs
vendored
42
external/cecil/Mono.Cecil.Cil/Instruction.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// Instruction.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
@@ -40,8 +22,6 @@ namespace Mono.Cecil.Cil {
|
||||
internal Instruction previous;
|
||||
internal Instruction next;
|
||||
|
||||
SequencePoint sequence_point;
|
||||
|
||||
public int Offset {
|
||||
get { return offset; }
|
||||
set { offset = value; }
|
||||
@@ -67,11 +47,6 @@ namespace Mono.Cecil.Cil {
|
||||
set { next = value; }
|
||||
}
|
||||
|
||||
public SequencePoint SequencePoint {
|
||||
get { return sequence_point; }
|
||||
set { sequence_point = value; }
|
||||
}
|
||||
|
||||
internal Instruction (int offset, OpCode opCode)
|
||||
{
|
||||
this.offset = offset;
|
||||
@@ -134,7 +109,7 @@ namespace Mono.Cecil.Cil {
|
||||
switch (opcode.OperandType) {
|
||||
case OperandType.ShortInlineBrTarget:
|
||||
case OperandType.InlineBrTarget:
|
||||
AppendLabel (instruction, (Instruction) operand);
|
||||
AppendLabel (instruction, operand);
|
||||
break;
|
||||
case OperandType.InlineSwitch:
|
||||
var labels = (Instruction []) operand;
|
||||
@@ -158,10 +133,15 @@ namespace Mono.Cecil.Cil {
|
||||
return instruction.ToString ();
|
||||
}
|
||||
|
||||
static void AppendLabel (StringBuilder builder, Instruction instruction)
|
||||
static void AppendLabel (StringBuilder builder, object o)
|
||||
{
|
||||
builder.Append ("IL_");
|
||||
builder.Append (instruction.offset.ToString ("x4"));
|
||||
if (o is Instruction)
|
||||
builder.Append ((o as Instruction).offset.ToString ("x4"));
|
||||
else if (o is int) {
|
||||
builder.Append (((int)o).ToString ("x4"));
|
||||
builder.Append (" (invalid)");
|
||||
}
|
||||
}
|
||||
|
||||
public static Instruction Create (OpCode opcode)
|
||||
|
97
external/cecil/Mono.Cecil.Cil/MethodBody.cs
vendored
97
external/cecil/Mono.Cecil.Cil/MethodBody.cs
vendored
@@ -1,38 +1,21 @@
|
||||
//
|
||||
// MethodBody.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
using Mono.Collections.Generic;
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
||||
public sealed class MethodBody : IVariableDefinitionProvider {
|
||||
public sealed class MethodBody {
|
||||
|
||||
readonly internal MethodDefinition method;
|
||||
|
||||
@@ -45,7 +28,6 @@ namespace Mono.Cecil.Cil {
|
||||
internal Collection<Instruction> instructions;
|
||||
internal Collection<ExceptionHandler> exceptions;
|
||||
internal Collection<VariableDefinition> variables;
|
||||
Scope scope;
|
||||
|
||||
public MethodDefinition Method {
|
||||
get { return method; }
|
||||
@@ -71,7 +53,7 @@ namespace Mono.Cecil.Cil {
|
||||
}
|
||||
|
||||
public Collection<Instruction> Instructions {
|
||||
get { return instructions ?? (instructions = new InstructionCollection ()); }
|
||||
get { return instructions ?? (instructions = new InstructionCollection (method)); }
|
||||
}
|
||||
|
||||
public bool HasExceptionHandlers {
|
||||
@@ -90,11 +72,6 @@ namespace Mono.Cecil.Cil {
|
||||
get { return variables ?? (variables = new VariableDefinitionCollection ()); }
|
||||
}
|
||||
|
||||
public Scope Scope {
|
||||
get { return scope; }
|
||||
set { scope = value; }
|
||||
}
|
||||
|
||||
public ParameterDefinition ThisParameter {
|
||||
get {
|
||||
if (method == null || method.DeclaringType == null)
|
||||
@@ -103,18 +80,32 @@ namespace Mono.Cecil.Cil {
|
||||
if (!method.HasThis)
|
||||
return null;
|
||||
|
||||
if (this_parameter != null)
|
||||
return this_parameter;
|
||||
if (this_parameter == null)
|
||||
Interlocked.CompareExchange (ref this_parameter, CreateThisParameter (method), null);
|
||||
|
||||
var declaring_type = method.DeclaringType;
|
||||
var type = declaring_type.IsValueType || declaring_type.IsPrimitive
|
||||
? new PointerType (declaring_type)
|
||||
: declaring_type as TypeReference;
|
||||
|
||||
return this_parameter = new ParameterDefinition (type, method);
|
||||
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;
|
||||
@@ -126,12 +117,7 @@ namespace Mono.Cecil.Cil {
|
||||
}
|
||||
}
|
||||
|
||||
public interface IVariableDefinitionProvider {
|
||||
bool HasVariables { get; }
|
||||
Collection<VariableDefinition> Variables { get; }
|
||||
}
|
||||
|
||||
class VariableDefinitionCollection : Collection<VariableDefinition> {
|
||||
sealed class VariableDefinitionCollection : Collection<VariableDefinition> {
|
||||
|
||||
internal VariableDefinitionCollection ()
|
||||
{
|
||||
@@ -171,13 +157,17 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
class InstructionCollection : Collection<Instruction> {
|
||||
|
||||
internal InstructionCollection ()
|
||||
readonly MethodDefinition method;
|
||||
|
||||
internal InstructionCollection (MethodDefinition method)
|
||||
{
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
internal InstructionCollection (int capacity)
|
||||
internal InstructionCollection (MethodDefinition method, int capacity)
|
||||
: base (capacity)
|
||||
{
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
protected override void OnAdd (Instruction item, int index)
|
||||
@@ -234,8 +224,25 @@ namespace Mono.Cecil.Cil {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
28
external/cecil/Mono.Cecil.Cil/OpCode.cs
vendored
28
external/cecil/Mono.Cecil.Cil/OpCode.cs
vendored
@@ -1,31 +1,15 @@
|
||||
//
|
||||
// OpCode.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
||||
public enum FlowControl {
|
||||
@@ -104,7 +88,7 @@ namespace Mono.Cecil.Cil {
|
||||
Varpush,
|
||||
}
|
||||
|
||||
public struct OpCode {
|
||||
public struct OpCode : IEquatable<OpCode> {
|
||||
|
||||
readonly byte op1;
|
||||
readonly byte op2;
|
||||
|
24
external/cecil/Mono.Cecil.Cil/OpCodes.cs
vendored
24
external/cecil/Mono.Cecil.Cil/OpCodes.cs
vendored
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// OpCodes.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
409
external/cecil/Mono.Cecil.Cil/PortablePdb.cs
vendored
Normal file
409
external/cecil/Mono.Cecil.Cil/PortablePdb.cs
vendored
Normal file
@@ -0,0 +1,409 @@
|
||||
//
|
||||
// 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 Mono.Cecil.Metadata;
|
||||
using Mono.Cecil.PE;
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
||||
public sealed class PortablePdbReaderProvider : ISymbolReaderProvider {
|
||||
|
||||
#if !PCL
|
||||
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);
|
||||
}
|
||||
#endif
|
||||
|
||||
public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream)
|
||||
{
|
||||
Mixin.CheckModule (module);
|
||||
Mixin.CheckStream (symbolStream);
|
||||
|
||||
return GetSymbolReader (module, Disposable.NotOwned (symbolStream), "");
|
||||
}
|
||||
|
||||
ISymbolReader GetSymbolReader (ModuleDefinition module, Disposable<Stream> 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);
|
||||
}
|
||||
|
||||
public bool ProcessDebugHeader (ImageDebugDirectory directory, byte [] header)
|
||||
{
|
||||
if (image == module.Image)
|
||||
return true;
|
||||
|
||||
if (header.Length < 24)
|
||||
return false;
|
||||
|
||||
var magic = ReadInt32 (header, 0);
|
||||
if (magic != 0x53445352)
|
||||
return false;
|
||||
|
||||
var buffer = new byte [16];
|
||||
Buffer.BlockCopy (header, 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);
|
||||
|
||||
return module_guid == pdb_guid;
|
||||
}
|
||||
|
||||
static int ReadInt32 (byte [] bytes, int start)
|
||||
{
|
||||
return (bytes [start]
|
||||
| (bytes [start + 1] << 8)
|
||||
| (bytes [start + 2] << 16)
|
||||
| (bytes [start + 3] << 24));
|
||||
}
|
||||
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
|
||||
#if !READ_ONLY
|
||||
|
||||
public sealed class PortablePdbWriterProvider : ISymbolWriterProvider
|
||||
{
|
||||
#if !PCL
|
||||
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));
|
||||
}
|
||||
#endif
|
||||
|
||||
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> stream)
|
||||
{
|
||||
var metadata = new MetadataBuilder (module, this);
|
||||
var writer = ImageWriter.CreateDebugWriter (module, metadata, stream);
|
||||
|
||||
return new PortablePdbWriter (metadata, module, writer);
|
||||
}
|
||||
}
|
||||
|
||||
sealed class PortablePdbWriter : ISymbolWriter {
|
||||
|
||||
readonly MetadataBuilder pdb_metadata;
|
||||
readonly ModuleDefinition module;
|
||||
readonly ImageWriter writer;
|
||||
|
||||
MetadataBuilder module_metadata;
|
||||
|
||||
bool IsEmbedded { get { return writer == null; } }
|
||||
|
||||
public PortablePdbWriter (MetadataBuilder pdb_metadata, ModuleDefinition module)
|
||||
{
|
||||
this.pdb_metadata = pdb_metadata;
|
||||
this.module = module;
|
||||
}
|
||||
|
||||
public PortablePdbWriter (MetadataBuilder pdb_metadata, ModuleDefinition module, ImageWriter writer)
|
||||
: this (pdb_metadata, module)
|
||||
{
|
||||
this.writer = writer;
|
||||
}
|
||||
|
||||
public void SetModuleMetadata (MetadataBuilder metadata)
|
||||
{
|
||||
this.module_metadata = metadata;
|
||||
|
||||
if (module_metadata != pdb_metadata)
|
||||
this.pdb_metadata.metadata_builder = metadata;
|
||||
}
|
||||
|
||||
public bool GetDebugHeader (out ImageDebugDirectory directory, out byte [] header)
|
||||
{
|
||||
if (IsEmbedded) {
|
||||
directory = new ImageDebugDirectory ();
|
||||
header = Empty<byte>.Array;
|
||||
return false;
|
||||
}
|
||||
|
||||
directory = new ImageDebugDirectory () {
|
||||
MajorVersion = 256,
|
||||
MinorVersion = 20577,
|
||||
Type = 2,
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
header = new byte [buffer.length];
|
||||
Buffer.BlockCopy (buffer.buffer, 0, header, 0, buffer.length);
|
||||
directory.SizeOfData = header.Length;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Write (MethodDebugInformation info)
|
||||
{
|
||||
CheckMethodDebugInformationTable ();
|
||||
|
||||
pdb_metadata.AddMethodDebugInformation (info);
|
||||
}
|
||||
|
||||
void CheckMethodDebugInformationTable ()
|
||||
{
|
||||
var mdi = pdb_metadata.table_heap.GetTable<MethodDebugInformationTable> (Table.MethodDebugInformation);
|
||||
if (mdi.length > 0)
|
||||
return;
|
||||
|
||||
// The MethodDebugInformation table has the same length as the Method table
|
||||
mdi.rows = new Row<uint, uint> [module_metadata.method_rid - 1];
|
||||
mdi.length = mdi.rows.Length;
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
if (IsEmbedded)
|
||||
return;
|
||||
|
||||
WritePdbHeap ();
|
||||
WriteTableHeap ();
|
||||
|
||||
writer.BuildMetadataTextMap ();
|
||||
writer.WriteMetadataHeader ();
|
||||
writer.WriteMetadata ();
|
||||
|
||||
writer.stream.Dispose ();
|
||||
}
|
||||
|
||||
void WritePdbHeap ()
|
||||
{
|
||||
var pdb_heap = pdb_metadata.pdb_heap;
|
||||
|
||||
pdb_heap.WriteBytes (module.Mvid.ToByteArray ());
|
||||
pdb_heap.WriteUInt32 (module_metadata.time_stamp);
|
||||
|
||||
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.WriteTableHeap ();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static class PdbGuidMapping {
|
||||
|
||||
static readonly Dictionary<Guid, DocumentLanguage> guid_language = new Dictionary<Guid, DocumentLanguage> ();
|
||||
static readonly Dictionary<DocumentLanguage, Guid> language_guid = new Dictionary<DocumentLanguage, Guid> ();
|
||||
|
||||
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;
|
||||
|
||||
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 ();
|
||||
}
|
||||
}
|
||||
}
|
50
external/cecil/Mono.Cecil.Cil/SequencePoint.cs
vendored
50
external/cecil/Mono.Cecil.Cil/SequencePoint.cs
vendored
@@ -1,35 +1,20 @@
|
||||
//
|
||||
// SequencePoint.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
||||
public sealed class SequencePoint {
|
||||
|
||||
internal InstructionOffset offset;
|
||||
Document document;
|
||||
|
||||
int start_line;
|
||||
@@ -37,6 +22,10 @@ namespace Mono.Cecil.Cil {
|
||||
int end_line;
|
||||
int end_column;
|
||||
|
||||
public int Offset {
|
||||
get { return offset.Offset; }
|
||||
}
|
||||
|
||||
public int StartLine {
|
||||
get { return start_line; }
|
||||
set { start_line = value; }
|
||||
@@ -57,13 +46,30 @@ namespace Mono.Cecil.Cil {
|
||||
set { end_column = value; }
|
||||
}
|
||||
|
||||
public bool IsHidden {
|
||||
get { return start_line == 0xfeefee && start_line == start_column; }
|
||||
}
|
||||
|
||||
public Document Document {
|
||||
get { return document; }
|
||||
set { document = value; }
|
||||
}
|
||||
|
||||
public SequencePoint (Document document)
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
675
external/cecil/Mono.Cecil.Cil/Symbols.cs
vendored
675
external/cecil/Mono.Cecil.Cil/Symbols.cs
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,29 +1,11 @@
|
||||
//
|
||||
// VariableDefinition.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
@@ -39,11 +21,6 @@ namespace Mono.Cecil.Cil {
|
||||
{
|
||||
}
|
||||
|
||||
public VariableDefinition (string name, TypeReference variableType)
|
||||
: base (name, variableType)
|
||||
{
|
||||
}
|
||||
|
||||
public override VariableDefinition Resolve ()
|
||||
{
|
||||
return this;
|
||||
|
@@ -1,44 +1,20 @@
|
||||
//
|
||||
// VariableReference.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace Mono.Cecil.Cil {
|
||||
|
||||
public abstract class VariableReference {
|
||||
|
||||
string name;
|
||||
internal int index = -1;
|
||||
protected TypeReference variable_type;
|
||||
|
||||
public string Name {
|
||||
get { return name; }
|
||||
set { name = value; }
|
||||
}
|
||||
|
||||
public TypeReference VariableType {
|
||||
get { return variable_type; }
|
||||
set { variable_type = value; }
|
||||
@@ -49,13 +25,7 @@ namespace Mono.Cecil.Cil {
|
||||
}
|
||||
|
||||
internal VariableReference (TypeReference variable_type)
|
||||
: this (string.Empty, variable_type)
|
||||
{
|
||||
}
|
||||
|
||||
internal VariableReference (string name, TypeReference variable_type)
|
||||
{
|
||||
this.name = name;
|
||||
this.variable_type = variable_type;
|
||||
}
|
||||
|
||||
@@ -63,9 +33,6 @@ namespace Mono.Cecil.Cil {
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
if (!string.IsNullOrEmpty (name))
|
||||
return name;
|
||||
|
||||
if (index >= 0)
|
||||
return "V_" + index;
|
||||
|
||||
|
53
external/cecil/Mono.Cecil.Metadata/BlobHeap.cs
vendored
53
external/cecil/Mono.Cecil.Metadata/BlobHeap.cs
vendored
@@ -1,59 +1,54 @@
|
||||
//
|
||||
// BlobHeap.cs
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2011 Jb Evain
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// 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.
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
using Mono.Cecil.PE;
|
||||
|
||||
namespace Mono.Cecil.Metadata {
|
||||
|
||||
sealed class BlobHeap : Heap {
|
||||
|
||||
public BlobHeap (Section section, uint start, uint size)
|
||||
: base (section, start, size)
|
||||
public BlobHeap (byte [] data)
|
||||
: base (data)
|
||||
{
|
||||
}
|
||||
|
||||
public byte [] Read (uint index)
|
||||
{
|
||||
if (index == 0 || index > Size - 1)
|
||||
if (index == 0 || index > this.data.Length - 1)
|
||||
return Empty<byte>.Array;
|
||||
|
||||
var data = Section.Data;
|
||||
|
||||
int position = (int) (index + Offset);
|
||||
int position = (int) index;
|
||||
int length = (int) data.ReadCompressedUInt32 (ref position);
|
||||
|
||||
if (length > data.Length - position)
|
||||
return Empty<byte>.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user