You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/04/16 00:18:03 UTC
svn commit: r1092828 - in
/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic:
InstructionBuilderImpl.java SwitchBlockImpl.java TryCatchBlockImpl.java
Author: hlship
Date: Fri Apr 15 22:18:03 2011
New Revision: 1092828
URL: http://svn.apache.org/viewvc?rev=1092828&view=rev
Log:
TAP5-853: Use a single InstructionBuilderImpl instance for the entirety of changing a method implementation
Modified:
tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java
tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/SwitchBlockImpl.java
tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/TryCatchBlockImpl.java
Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java?rev=1092828&r1=1092827&r2=1092828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InstructionBuilderImpl.java Fri Apr 15 22:18:03 2011
@@ -106,15 +106,12 @@ public class InstructionBuilderImpl exte
InstructionBuilderImpl(MethodDescription description, MethodVisitor visitor, NameCache cache)
{
- this(new InstructionBuilderState(description, visitor, cache));
- }
-
- InstructionBuilderImpl(InstructionBuilderState state)
- {
+ InstructionBuilderState state = new InstructionBuilderState(description, visitor, cache);
this.state = state;
// These are conveniences for values stored inside the state. In fact,
// these fields predate the InstructionBuilderState type.
+
this.v = state.visitor;
this.cache = state.nameCache;
}
@@ -424,7 +421,7 @@ public class InstructionBuilderImpl exte
{
check();
- new TryCatchBlockImpl(state).doCallback(callback);
+ new TryCatchBlockImpl(this, state).doCallback(callback);
return this;
}
@@ -587,7 +584,7 @@ public class InstructionBuilderImpl exte
assert callback != null;
- new SwitchBlockImpl(state, min, max).doCallback(callback);
+ new SwitchBlockImpl(this, state, min, max).doCallback(callback);
return this;
}
@@ -598,13 +595,13 @@ public class InstructionBuilderImpl exte
final LocalVariable var = state.startVariable(type);
- runSubBuilder(new InstructionBuilderCallback()
+ new InstructionBuilderCallback()
{
public void doBuild(InstructionBuilder builder)
{
callback.doBuild(var, builder);
}
- });
+ }.doBuild(this);
state.stopVariable(var);
@@ -663,25 +660,25 @@ public class InstructionBuilderImpl exte
v.visitJumpInsn(conditionToOpcode.get(condition), ifFalseLabel);
- runSubBuilder(new InstructionBuilderCallback()
+ new InstructionBuilderCallback()
{
public void doBuild(InstructionBuilder builder)
{
callback.ifTrue(builder);
}
- });
+ }.doBuild(this);
v.visitJumpInsn(GOTO, endIfLabel);
v.visitLabel(ifFalseLabel);
- runSubBuilder(new InstructionBuilderCallback()
+ new InstructionBuilderCallback()
{
public void doBuild(InstructionBuilder builder)
{
callback.ifFalse(builder);
}
- });
+ }.doBuild(this);
v.visitLabel(endIfLabel);
@@ -699,23 +696,23 @@ public class InstructionBuilderImpl exte
Label exitLoop = new Label();
- runSubBuilder(new InstructionBuilderCallback()
+ new InstructionBuilderCallback()
{
public void doBuild(InstructionBuilder builder)
{
callback.buildTest(builder);
}
- });
+ }.doBuild(this);
v.visitJumpInsn(conditionToOpcode.get(condition), exitLoop);
- runSubBuilder(new InstructionBuilderCallback()
+ new InstructionBuilderCallback()
{
public void doBuild(InstructionBuilder builder)
{
callback.buildBody(builder);
}
- });
+ }.doBuild(this);
v.visitJumpInsn(GOTO, doCheck);
@@ -807,11 +804,6 @@ public class InstructionBuilderImpl exte
return this;
}
- private void runSubBuilder(InstructionBuilderCallback callback)
- {
- new InstructionBuilderImpl(state).doCallback(callback);
- }
-
void doCallback(InstructionBuilderCallback callback)
{
check();
Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/SwitchBlockImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/SwitchBlockImpl.java?rev=1092828&r1=1092827&r2=1092828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/SwitchBlockImpl.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/SwitchBlockImpl.java Fri Apr 15 22:18:03 2011
@@ -23,6 +23,8 @@ import org.apache.tapestry5.plastic.Swit
public class SwitchBlockImpl extends Lockable implements SwitchBlock, Opcodes
{
+ private final InstructionBuilder builder;
+
private final InstructionBuilderState state;
private final int min, max;
@@ -33,10 +35,11 @@ public class SwitchBlockImpl extends Loc
private boolean defaultAdded = false;
- SwitchBlockImpl(InstructionBuilderState state, int min, int max)
+ SwitchBlockImpl(InstructionBuilder builder, InstructionBuilderState state, int min, int max)
{
assert min <= max;
+ this.builder = builder;
this.state = state;
this.min = min;
this.max = max;
@@ -89,7 +92,7 @@ public class SwitchBlockImpl extends Loc
state.visitor.visitLabel(caseLabels[caseValue - min]);
- new InstructionBuilderImpl(state).doCallback(callback);
+ callback.doBuild(builder);
if (jumpToEnd)
state.visitor.visitJumpInsn(GOTO, endSwitchLabel);
@@ -102,7 +105,7 @@ public class SwitchBlockImpl extends Loc
state.visitor.visitLabel(defaultLabel);
- new InstructionBuilderImpl(state).doCallback(callback);
+ callback.doBuild(builder);
defaultAdded = true;
}
Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/TryCatchBlockImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/TryCatchBlockImpl.java?rev=1092828&r1=1092827&r2=1092828&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/TryCatchBlockImpl.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/TryCatchBlockImpl.java Fri Apr 15 22:18:03 2011
@@ -15,19 +15,24 @@
package org.apache.tapestry5.internal.plastic;
import org.apache.tapestry5.internal.plastic.asm.Label;
+import org.apache.tapestry5.plastic.InstructionBuilder;
import org.apache.tapestry5.plastic.InstructionBuilderCallback;
import org.apache.tapestry5.plastic.TryCatchBlock;
import org.apache.tapestry5.plastic.TryCatchCallback;
public class TryCatchBlockImpl extends Lockable implements TryCatchBlock
{
+ private final InstructionBuilder builder;
+
private final InstructionBuilderState state;
private final Label startLabel, endLabel;
- TryCatchBlockImpl(InstructionBuilderState state)
+ TryCatchBlockImpl(InstructionBuilder builder, InstructionBuilderState state)
{
+ this.builder = builder;
this.state = state;
+
this.startLabel = new Label();
this.endLabel = new Label();
}
@@ -36,7 +41,7 @@ public class TryCatchBlockImpl extends L
{
state.visitor.visitLabel(startLabel);
- new InstructionBuilderImpl(state).doCallback(callback);
+ callback.doBuild(builder);
state.visitor.visitLabel(endLabel);
}
@@ -54,7 +59,7 @@ public class TryCatchBlockImpl extends L
Label handler = state.newLabel();
- new InstructionBuilderImpl(state).doCallback(callback);
+ callback.doBuild(builder);
state.visitor.visitTryCatchBlock(startLabel, endLabel, handler, exceptionInternalName);
}