X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fiterators.cs;h=df43ff38e8e09f0387a6810ad441a6d56c5d8457;hb=23fbdb66437357ec6d50f498ed8e88590cd89196;hp=5dce0ed1593086082b897df277c32585ca7bd15e;hpb=468225a247b8897b2a4fa1e6bd7ffa32aa8c243b;p=mono.git diff --git a/mcs/mcs/iterators.cs b/mcs/mcs/iterators.cs index 5dce0ed1593..df43ff38e8e 100644 --- a/mcs/mcs/iterators.cs +++ b/mcs/mcs/iterators.cs @@ -202,7 +202,6 @@ namespace Mono.CSharp Field pc_field; StateMachineMethod method; - int local_name_idx; protected StateMachine (ParametersBlock block, TypeDefinition parent, MemberBase host, TypeParameters tparams, string name, MemberKind kind) : base (block, parent, host, tparams, name, kind) @@ -244,12 +243,19 @@ namespace Mono.CSharp return base.DoDefineMembers (); } - protected override string GetVariableMangledName (LocalVariable local_info) + protected override string GetVariableMangledName (ResolveContext rc, LocalVariable local_info) { if (local_info.IsCompilerGenerated) - return base.GetVariableMangledName (local_info); + return base.GetVariableMangledName (rc, local_info); - return "<" + local_info.Name + ">__" + local_name_idx++.ToString ("X"); + // + // Special format which encodes original variable name and + // it's scope to support lifted variables debugging. This + // is same what csc does and allows to correctly set fields + // scope information (like ambiguity, our of scope, etc). + // + var id = rc.CurrentBlock.Explicit.GetDebugSymbolScopeIndex (); + return "<" + local_info.Name + ">__" + id; } }