88namespace DelegateDecompiler
99{
1010 class ProcessorState (
11+ bool isStatic ,
1112 Stack < Address > stack ,
1213 VariableInfo [ ] locals ,
1314 IList < Address > args ,
@@ -21,14 +22,22 @@ class ProcessorState(
2122 public IList < Address > Args { get ; } = args ;
2223 public Instruction Last { get ; } = last ;
2324 public Action RunNext { get ; set ; }
25+ public bool IsStatic { get ; } = isStatic ;
2426
2527 public Instruction Instruction { get ; set ; } = instruction ;
2628
2729 public ProcessorState Clone ( Instruction instruction , Instruction last = null )
2830 {
2931 var addressMap = new Dictionary < Address , Address > ( ) ;
3032 var buffer = Stack . Select ( address => address . Clone ( addressMap ) ) . Reverse ( ) ;
31- var state = new ProcessorState ( new Stack < Address > ( buffer ) , new VariableInfo [ Locals . Length ] , Args . ToArray ( ) , instruction , last , Delegates ) ;
33+
34+ var clonedArgs = new Address [ Args . Count ] ;
35+ for ( var i = 0 ; i < Args . Count ; i ++ )
36+ {
37+ clonedArgs [ i ] = Args [ i ] . Clone ( addressMap ) ;
38+ }
39+
40+ var state = new ProcessorState ( IsStatic , new Stack < Address > ( buffer ) , new VariableInfo [ Locals . Length ] , clonedArgs , instruction , last , Delegates ) ;
3241 for ( var i = 0 ; i < Locals . Length ; i ++ )
3342 {
3443 state . Locals [ i ] = new VariableInfo ( Locals [ i ] . Type )
@@ -48,6 +57,14 @@ public void Merge(Expression test, ProcessorState leftState, ProcessorState righ
4857 var rightLocal = rightState . Locals [ i ] ;
4958 Locals [ i ] . Address = Address . Merge ( test , leftLocal . Address , rightLocal . Address , addressMap ) ;
5059 }
60+
61+ for ( var i = 0 ; i < leftState . Args . Count ; i ++ )
62+ {
63+ var leftArg = leftState . Args [ i ] ;
64+ var rightArg = rightState . Args [ i ] ;
65+ Args [ i ] = Address . Merge ( test , leftArg , rightArg , addressMap ) ;
66+ }
67+
5168 var buffer = new List < Address > ( ) ;
5269 while ( leftState . Stack . Count > 0 || rightState . Stack . Count > 0 )
5370 {
0 commit comments