File tree Expand file tree Collapse file tree 3 files changed +11
-24
lines changed
src/Castle.Core/DynamicProxy/Generators/Emitters Expand file tree Collapse file tree 3 files changed +11
-24
lines changed Original file line number Diff line number Diff line change 1- // Copyright 2004-2021 Castle Project - http://www.castleproject.org/
1+ // Copyright 2004-2025 Castle Project - http://www.castleproject.org/
22//
33// Licensed under the Apache License, Version 2.0 (the "License");
44// you may not use this file except in compliance with the License.
@@ -22,14 +22,12 @@ namespace Castle.DynamicProxy.Generators.Emitters
2222
2323 internal sealed class CodeBuilder
2424 {
25- private readonly List < LocalReference > locals ;
2625 private readonly List < IStatement > statements ;
2726 private bool isEmpty ;
2827
2928 public CodeBuilder ( )
3029 {
3130 statements = new List < IStatement > ( ) ;
32- locals = new List < LocalReference > ( ) ;
3331 isEmpty = true ;
3432 }
3533
@@ -47,18 +45,11 @@ public CodeBuilder AddStatement(IStatement statement)
4745
4846 public LocalReference DeclareLocal ( Type type )
4947 {
50- var local = new LocalReference ( type ) ;
51- locals . Add ( local ) ;
52- return local ;
48+ return new LocalReference ( type ) ;
5349 }
5450
5551 internal void Generate ( ILGenerator il )
5652 {
57- foreach ( var local in locals )
58- {
59- local . Generate ( il ) ;
60- }
61-
6253 foreach ( var statement in statements )
6354 {
6455 statement . Emit ( il ) ;
Original file line number Diff line number Diff line change @@ -23,32 +23,32 @@ namespace Castle.DynamicProxy.Generators.Emitters.SimpleAST
2323 [ DebuggerDisplay ( "local {Type}" ) ]
2424 internal class LocalReference : Reference
2525 {
26- private LocalBuilder ? localBuilder ;
26+ private LocalBuilder ? local ;
2727
2828 public LocalReference ( Type type )
2929 : base ( type )
3030 {
3131 }
3232
33- public override void Generate ( ILGenerator gen )
34- {
35- localBuilder = gen . DeclareLocal ( base . Type ) ;
36- }
37-
3833 public override void EmitAddress ( ILGenerator gen )
3934 {
40- gen . Emit ( OpCodes . Ldloca , localBuilder ! ) ;
35+ gen . Emit ( OpCodes . Ldloca , GetInitializedLocal ( gen ) ) ;
4136 }
4237
4338 public override void Emit ( ILGenerator gen )
4439 {
45- gen . Emit ( OpCodes . Ldloc , localBuilder ! ) ;
40+ gen . Emit ( OpCodes . Ldloc , GetInitializedLocal ( gen ) ) ;
4641 }
4742
4843 public override void EmitStore ( IExpression value , ILGenerator gen )
4944 {
5045 value . Emit ( gen ) ;
51- gen . Emit ( OpCodes . Stloc , localBuilder ! ) ;
46+ gen . Emit ( OpCodes . Stloc , GetInitializedLocal ( gen ) ) ;
47+ }
48+
49+ private LocalBuilder GetInitializedLocal ( ILGenerator gen )
50+ {
51+ return local ??= gen . DeclareLocal ( Type ) ;
5252 }
5353 }
5454}
Original file line number Diff line number Diff line change @@ -38,9 +38,5 @@ public Type Type
3838 public abstract void Emit ( ILGenerator gen ) ;
3939
4040 public abstract void EmitStore ( IExpression value , ILGenerator gen ) ;
41-
42- public virtual void Generate ( ILGenerator gen )
43- {
44- }
4541 }
4642}
You can’t perform that action at this time.
0 commit comments