Skip to content

Commit 7a9f5fc

Browse files
committed
Remove sequential coupling in LocalReference
1 parent 4cb2e89 commit 7a9f5fc

File tree

3 files changed

+11
-24
lines changed

3 files changed

+11
-24
lines changed

src/Castle.Core/DynamicProxy/Generators/Emitters/CodeBuilder.cs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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);

src/Castle.Core/DynamicProxy/Generators/Emitters/SimpleAST/LocalReference.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff 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
}

src/Castle.Core/DynamicProxy/Generators/Emitters/SimpleAST/Reference.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)