ig.BeginFinallyBlock ();
}
- public void BeginScope ()
+ public void BeginScope (int scopeIndex)
{
if ((flags & Options.OmitDebugInfo) != 0)
return;
- methodSymbols.StartBlock (CodeBlockEntry.Type.Lexical, ig.ILOffset);
+ methodSymbols.StartBlock (CodeBlockEntry.Type.Lexical, ig.ILOffset, scopeIndex);
}
- public void BeginCompilerScope ()
+ public void BeginCompilerScope (int scopeIndex)
{
if ((flags & Options.OmitDebugInfo) != 0)
return;
- methodSymbols.StartBlock (CodeBlockEntry.Type.CompilerGenerated, ig.ILOffset);
+ methodSymbols.StartBlock (CodeBlockEntry.Type.CompilerGenerated, ig.ILOffset, scopeIndex);
}
public void EndExceptionBlock ()
if (conditionalAccess) {
if (!ec.ConditionalAccess.Statement) {
- if (ec.ConditionalAccess.Type.IsNullableType)
- Nullable.LiftedNull.Create (ec.ConditionalAccess.Type, Location.Null).Emit (ec);
- else
+ var t = ec.ConditionalAccess.Type;
+ if (t.IsNullableType)
+ Nullable.LiftedNull.Create (t, Location.Null).Emit (ec);
+ else {
ec.EmitNull ();
+
+ if (t.IsGenericParameter)
+ ec.Emit (OpCodes.Unbox_Any, t);
+ }
}
ec.Emit (OpCodes.Br, ec.ConditionalAccess.EndLabel);