Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/MsgPack.Net45/MsgPack.Net45.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,9 @@
<Compile Include="..\MsgPack\Serialization\NilImplicationHandler`4.cs">
<Link>Serialization\NilImplicationHandler`4.cs</Link>
</Compile>
<Compile Include="..\MsgPack\Serialization\NullTextWriter.cs">
<Link>Serialization\NullTextWriter.cs</Link>
</Compile>
<Compile Include="..\MsgPack\Serialization\PackHelpers.cs">
<Link>Serialization\PackHelpers.cs</Link>
</Compile>
Expand Down
9 changes: 9 additions & 0 deletions src/MsgPack/MsgPack.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,11 @@
<Compile Include="Serialization\ReflectionSerializers\ReflectionSerializerNilImplicationHandlerOnUnpackedParameter.cs" />
<Compile Include="Serialization\ReflectionSerializers\ReflectionSerializerNilImplicationHandlerParameter.cs" />
<Compile Include="Serialization\ReflectionSerializers\ReflectionTupleMessagePackSerializer`1.cs" />
<Compile Include="Serialization\NullTextWriter.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>NullTextWriter.tt</DependentUpon>
</Compile>
<Compile Include="Serialization\ResolveSerializerEventArgs.cs" />
<Compile Include="Serialization\SerializationContext.ExtTypeCodes.cs" />
<Compile Include="Serialization\SerializationTarget.cs" />
Expand Down Expand Up @@ -613,6 +618,10 @@
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>PackerUnpackerExtensions.cs</LastGenOutput>
</Content>
<Content Include="Serialization\NullTextWriter.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>NullTextWriter.cs</LastGenOutput>
</Content>
<Content Include="Serialization\UnpackHelpers.facade.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>UnpackHelpers.facade.cs</LastGenOutput>
Expand Down
60 changes: 60 additions & 0 deletions src/MsgPack/Serialization/NullTextWriter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// <auto-generated>
// This code was generated by a NullTextWriter.tt.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>

using System.IO;
using System.Text;

namespace MsgPack.Serialization
{
internal sealed class NullTextWriter : TextWriter
{
internal static NullTextWriter Instance = new NullTextWriter();

public override Encoding Encoding
{
get { return Encoding.UTF8; }
}

public override void Close() { }
public override void Flush() { }
public override void Write(char value) { }
public override void Write(char[] buffer) { }
public override void Write(char[] buffer, int index, int count) { }
public override void Write(bool value) { }
public override void Write(int value) { }
public override void Write(uint value) { }
public override void Write(long value) { }
public override void Write(ulong value) { }
public override void Write(float value) { }
public override void Write(double value) { }
public override void Write(decimal value) { }
public override void Write(string value) { }
public override void Write(object value) { }
public override void Write(string format, object arg0) { }
public override void Write(string format, object arg0, object arg1) { }
public override void Write(string format, object arg0, object arg1, object arg2) { }
public override void Write(string format, object[] arg) { }
public override void WriteLine() { }
public override void WriteLine(char value) { }
public override void WriteLine(char[] buffer) { }
public override void WriteLine(char[] buffer, int index, int count) { }
public override void WriteLine(bool value) { }
public override void WriteLine(int value) { }
public override void WriteLine(uint value) { }
public override void WriteLine(long value) { }
public override void WriteLine(ulong value) { }
public override void WriteLine(float value) { }
public override void WriteLine(double value) { }
public override void WriteLine(decimal value) { }
public override void WriteLine(string value) { }
public override void WriteLine(object value) { }
public override void WriteLine(string format, object arg0) { }
public override void WriteLine(string format, object arg0, object arg1) { }
public override void WriteLine(string format, object arg0, object arg1, object arg2) { }
public override void WriteLine(string format, object[] arg) { }
}
}
59 changes: 59 additions & 0 deletions src/MsgPack/Serialization/NullTextWriter.tt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.CodeDom" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="Microsoft.CSharp" #>
<#@ output extension=".cs" #>
// <auto-generated>
// This code was generated by a NullTextWriter.tt.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>

using System.IO;
using System.Text;

namespace MsgPack.Serialization
{
internal sealed class NullTextWriter : TextWriter
{
internal static NullTextWriter Instance = new NullTextWriter();

public override Encoding Encoding
{
get { return Encoding.UTF8; }
}

<#
using (var provider = new CSharpCodeProvider())
{
IEnumerable<MethodInfo> methods =
typeof(System.IO.TextWriter).GetMethods()
.Where(m => !m.IsFinal && m.IsVirtual) // A method we can override
.Where(m => m.ReturnType == typeof(void)) // We're generating empty methods only
.Where(m => !m.IsSpecialName); // Exclude properties

foreach (MethodInfo method in methods)
{
Write("\t\tpublic override void {0}(", method.Name);

foreach (ParameterInfo parameter in method.GetParameters())
{
if (parameter.Position != 0)
{
Write(", ");
}

var typeRef = new CodeTypeReference(parameter.ParameterType);
Write("{0} {1}", provider.GetTypeOutput(typeRef), parameter.Name);
}

WriteLine(") { }");
}
}
#>
}
}
61 changes: 12 additions & 49 deletions src/MsgPack/Serialization/Reflection/TracingILGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ namespace MsgPack.Serialization.Reflection
internal sealed partial class TracingILGenerator : IDisposable
{
private readonly ILGenerator _underlying;
private readonly TextWriter _realTrace;
private readonly TextWriter _trace;
private readonly StringBuilder _traceBuffer;
private readonly Dictionary<LocalBuilder, string> _localDeclarations = new Dictionary<LocalBuilder, string>();
private readonly Dictionary<Label, string> _labels = new Dictionary<Label, string>();

Expand Down Expand Up @@ -244,9 +242,7 @@ public TracingILGenerator( ConstructorBuilder constructorBuilder, TextWriter tra
private TracingILGenerator( ILGenerator underlying, bool isInDynamicMethod, TextWriter traceWriter, bool isDebuggable )
{
this._underlying = underlying;
this._realTrace = traceWriter ?? TextWriter.Null;
this._traceBuffer = traceWriter != null ? new StringBuilder() : null;
this._trace = traceWriter != null ? new StringWriter( this._traceBuffer, CultureInfo.InvariantCulture ) : TextWriter.Null;
this._trace = traceWriter ?? NullTextWriter.Instance;
this._isInDynamicMethod = isInDynamicMethod;
this._endOfMethod = underlying == null ? default( Label ) : underlying.DefineLabel();
this._isDebuggable = isDebuggable;
Expand Down Expand Up @@ -276,13 +272,7 @@ public void EmitRet()

public void FlushTrace()
{
if ( this._traceBuffer != null && this._traceBuffer.Length > 0 )
{
this.TraceLocals();
this._trace.Flush();
this._realTrace.Write( this._traceBuffer );
this._traceBuffer.Clear();
}
this._trace.Flush();
}

#region -- Locals --
Expand Down Expand Up @@ -399,39 +389,6 @@ private LocalBuilder DeclareLocalCore( Type localType, string name, bool pinned
}
#endif // DEBUG

private void TraceLocals()
{
Contract.Assert( this._realTrace != null );
// TOOD: without init?
this._realTrace.WriteLine( ".locals init (" );

foreach ( var local in this._localDeclarations )
{
this.WriteIndent( this._realTrace, 1 );

this._realTrace.Write( "[" );
this._realTrace.Write( local.Key.LocalIndex );
this._realTrace.Write( "] " );

WriteType( this._realTrace, local.Key.LocalType );

if ( local.Key.IsPinned )
{
this._realTrace.Write( "(pinned)" );
}

if ( local.Value != null )
{
this._realTrace.Write( " " );
this._realTrace.Write( local.Value );
}

this._realTrace.WriteLine();
}

this._realTrace.WriteLine( ")" );
}

#endregion

#region -- Exceptions --
Expand Down Expand Up @@ -1037,6 +994,10 @@ private void TraceType( Type type )
private static void WriteType( TextWriter writer, Type type )
{
Contract.Assert( writer != null );
if ( writer == NullTextWriter.Instance )
{
return;
}

if ( type == null || type == typeof( void ) )
{
Expand Down Expand Up @@ -1281,6 +1242,10 @@ private void TraceMethod( MethodBase method )
private static void WriteCallingConventions( TextWriter writer, CallingConventions? managedCallingConverntions, CallingConvention? unamangedCallingConvention )
{
Contract.Assert( writer != null );
if ( writer == NullTextWriter.Instance )
{
return;
}

bool needsSpace = false;
if ( managedCallingConverntions != null )
Expand Down Expand Up @@ -1360,7 +1325,7 @@ private void TraceOperand( double value )
private void TraceOperand( string value )
{
// QSTRING
this._trace.Write( String.Format( CultureInfo.InvariantCulture, "\"{0:L}\"", value ) );
this._trace.Write( "\"{0:L}\"", value );
}

private void TraceOperand( Label value )
Expand Down Expand Up @@ -1427,9 +1392,7 @@ private void TraceOperandToken( MethodBase target )
#if !NETSTANDARD1_1 && !NETSTANDARD1_3
private void TraceOperandTokenValue( int value )
{
this._trace.Write( "<" );
this._trace.Write( value.ToString( "x8", CultureInfo.InvariantCulture ) );
this._trace.Write( ">" );
this._trace.Write( "<{0:x8}>", value );
}
#endif // !NETSTANDARD1_1 && !NETSTANDARD1_3

Expand Down
2 changes: 1 addition & 1 deletion src/MsgPack/Serialization/SerializerDebugging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public static TextWriter ILTraceWriter
{
if ( !_traceEnabled )
{
return TextWriter.Null;
return NullTextWriter.Instance;
}

if ( _ilTraceWriter == null )
Expand Down