@@ -63,6 +63,45 @@ public void InsertBeforeIssue697 ()
6363 }
6464 }
6565
66+ [ Test ]
67+ public void InsertBeforeIssue697bis ( )
68+ {
69+ var parameters = new ReaderParameters { SymbolReaderProvider = new MdbReaderProvider ( ) } ;
70+ using ( var module = GetResourceModule ( "Issue697.dll" , parameters ) ) {
71+ var pathGetterDef = module . GetTypes ( )
72+ . SelectMany ( t => t . Methods )
73+ . First ( m => m . Name . Equals ( "get_Defer" ) ) ;
74+
75+ var body = pathGetterDef . Body ;
76+ var worker = body . GetILProcessor ( ) ;
77+ var initialBody = body . Instructions . ToList ( ) ;
78+ Console . WriteLine ( initialBody . Sum ( i => i . GetSize ( ) ) ) ;
79+
80+ var head = initialBody . First ( ) ;
81+ var opcode = worker . Create ( OpCodes . Ldc_I4_1 ) ;
82+ worker . InsertBefore ( head , opcode ) ;
83+
84+ Assert . That ( pathGetterDef . DebugInformation . Scope . Start . IsEndOfMethod , Is . False ) ;
85+ foreach ( var subscope in pathGetterDef . DebugInformation . Scope . Scopes )
86+ Assert . That ( subscope . Start . IsEndOfMethod , Is . False ) ;
87+
88+ // big test -- we can write w/o crashing
89+ var unique = Guid . NewGuid ( ) . ToString ( ) ;
90+ var output = Path . GetTempFileName ( ) ;
91+ var outputdll = output + ".dll" ;
92+
93+ var writer = new WriterParameters ( ) {
94+ SymbolWriterProvider = new MdbWriterProvider ( ) ,
95+ WriteSymbols = true
96+ } ;
97+ using ( var sink = File . Open ( outputdll , FileMode . Create , FileAccess . ReadWrite ) ) {
98+ module . Write ( sink , writer ) ;
99+ }
100+
101+ Assert . Pass ( ) ;
102+ }
103+ }
104+
66105 [ Test ]
67106 public void InsertAfter ( )
68107 {
0 commit comments