@ -118,6 +98,7 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -118,6 +98,7 @@ public class CodeEmitter extends LocalVariablesSorter {
this.state=wrap.state;
}
publicbooleanisStaticHook(){
returnfalse;
}
@ -156,9 +137,17 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -156,9 +137,17 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -172,8 +161,12 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -172,8 +161,12 @@ public class CodeEmitter extends LocalVariablesSorter {
intintOp=-1;
intjumpmode=mode;
switch(mode){
caseGE:jumpmode=LT;break;
caseLE:jumpmode=GT;break;
caseGE:
jumpmode=LT;
break;
caseLE:
jumpmode=GT;
break;
}
switch(type.getSort()){
caseType.LONG:
@ -198,12 +191,22 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -198,12 +191,22 @@ public class CodeEmitter extends LocalVariablesSorter {
thrownewIllegalArgumentException("Bad comparison for type "+type);
default:
switch(mode){
caseEQ:intOp=Constants.IF_ICMPEQ;break;
caseNE:intOp=Constants.IF_ICMPNE;break;
caseGE:swap();/* fall through */
caseLT:intOp=Constants.IF_ICMPLT;break;
caseLE:swap();/* fall through */
caseGT:intOp=Constants.IF_ICMPGT;break;
caseEQ:
intOp=Constants.IF_ICMPEQ;
break;
caseNE:
intOp=Constants.IF_ICMPNE;
break;
caseGE:
swap();/* fall through */
caseLT:
intOp=Constants.IF_ICMPLT;
break;
caseLE:
swap();/* fall through */
caseGT:
intOp=Constants.IF_ICMPGT;
break;
}
mv.visitJumpInsn(intOp,label);
return;
@ -211,43 +214,87 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -211,43 +214,87 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -257,42 +304,56 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -257,42 +304,56 @@ public class CodeEmitter extends LocalVariablesSorter {
if(from==Type.DOUBLE_TYPE){
if(to==Type.FLOAT_TYPE){
mv.visitInsn(Constants.D2F);
}elseif(to==Type.LONG_TYPE){
}
elseif(to==Type.LONG_TYPE){
mv.visitInsn(Constants.D2L);
}else{
}
else{
mv.visitInsn(Constants.D2I);
cast_numeric(Type.INT_TYPE,to);
}
}elseif(from==Type.FLOAT_TYPE){
}
elseif(from==Type.FLOAT_TYPE){
if(to==Type.DOUBLE_TYPE){
mv.visitInsn(Constants.F2D);
}elseif(to==Type.LONG_TYPE){
}
elseif(to==Type.LONG_TYPE){
mv.visitInsn(Constants.F2L);
}else{
}
else{
mv.visitInsn(Constants.F2I);
cast_numeric(Type.INT_TYPE,to);
}
}elseif(from==Type.LONG_TYPE){
}
elseif(from==Type.LONG_TYPE){
if(to==Type.DOUBLE_TYPE){
mv.visitInsn(Constants.L2D);
}elseif(to==Type.FLOAT_TYPE){
}
elseif(to==Type.FLOAT_TYPE){
mv.visitInsn(Constants.L2F);
}else{
}
else{
mv.visitInsn(Constants.L2I);
cast_numeric(Type.INT_TYPE,to);
}
}else{
}
else{
if(to==Type.BYTE_TYPE){
mv.visitInsn(Constants.I2B);
}elseif(to==Type.CHAR_TYPE){
}
elseif(to==Type.CHAR_TYPE){
mv.visitInsn(Constants.I2C);
}elseif(to==Type.DOUBLE_TYPE){
}
elseif(to==Type.DOUBLE_TYPE){
mv.visitInsn(Constants.I2D);
}elseif(to==Type.FLOAT_TYPE){
}
elseif(to==Type.FLOAT_TYPE){
mv.visitInsn(Constants.I2F);
}elseif(to==Type.LONG_TYPE){
}
elseif(to==Type.LONG_TYPE){
mv.visitInsn(Constants.I2L);
}elseif(to==Type.SHORT_TYPE){
}
elseif(to==Type.SHORT_TYPE){
mv.visitInsn(Constants.I2S);
}
}
@ -302,13 +363,17 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -302,13 +363,17 @@ public class CodeEmitter extends LocalVariablesSorter {
publicvoidpush(inti){
if(i<-1){
mv.visitLdcInsn(i);
}elseif(i<=5){
}
elseif(i<=5){
mv.visitInsn(TypeUtils.ICONST(i));
}elseif(i<=Byte.MAX_VALUE){
}
elseif(i<=Byte.MAX_VALUE){
mv.visitIntInsn(Constants.BIPUSH,i);
}elseif(i<=Short.MAX_VALUE){
}
elseif(i<=Short.MAX_VALUE){
mv.visitIntInsn(Constants.SIPUSH,i);
}else{
}
else{
mv.visitLdcInsn(i);
}
}
@ -316,7 +381,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -316,7 +381,8 @@ public class CodeEmitter extends LocalVariablesSorter {
publicvoidpush(longvalue){
if(value==0L||value==1L){
mv.visitInsn(TypeUtils.LCONST(value));
}else{
}
else{
mv.visitLdcInsn(value);
}
}
@ -324,14 +390,17 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -324,14 +390,17 @@ public class CodeEmitter extends LocalVariablesSorter {
publicvoidpush(floatvalue){
if(value==0f||value==1f||value==2f){
mv.visitInsn(TypeUtils.FCONST(value));
}else{
}
else{
mv.visitLdcInsn(value);
}
}
publicvoidpush(doublevalue){
if(value==0d||value==1d){
mv.visitInsn(TypeUtils.DCONST(value));
}else{
}
else{
mv.visitLdcInsn(value);
}
}
@ -347,7 +416,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -347,7 +416,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -557,7 +628,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -557,7 +628,8 @@ public class CodeEmitter extends LocalVariablesSorter {
Stringdesc;
if(TypeUtils.isArray(type)){
desc=type.getDescriptor();
}else{
}
else{
desc=type.getInternalName();
}
mv.visitTypeInsn(opcode,desc);
@ -568,9 +640,17 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -568,9 +640,17 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -640,7 +721,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -640,7 +721,8 @@ public class CodeEmitter extends LocalVariablesSorter {
callback.processCase(i+min,end);
}
}
}else{
}
else{
Label[]labels=newLabel[len];
for(inti=0;i<len;i++){
labels[i]=make_label();
@ -657,9 +739,11 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -657,9 +739,11 @@ public class CodeEmitter extends LocalVariablesSorter {
callback.processDefault();
mark(end);
}catch(RuntimeException|Errore){
}
catch(RuntimeException|Errore){
throwe;
}catch(Exceptione){
}
catch(Exceptione){
thrownewCodeGenerationException(e);
}
}
@ -705,16 +789,45 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -705,16 +789,45 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -722,12 +835,13 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -722,12 +835,13 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -769,7 +884,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -769,7 +884,8 @@ public class CodeEmitter extends LocalVariablesSorter {
if(sig==null){
checkcast(type);
}else{
}
else{
checkcast(t);
invoke_virtual(t,sig);
}
@ -817,7 +933,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -817,7 +933,8 @@ public class CodeEmitter extends LocalVariablesSorter {
default:
push(0);
}
}else{
}
else{
aconst_null();
}
}
@ -840,7 +957,8 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -840,7 +957,8 @@ public class CodeEmitter extends LocalVariablesSorter {
unbox(type);
mark(end);
}
}else{
}
else{
checkcast(type);
}
}
@ -858,11 +976,14 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -858,11 +976,14 @@ public class CodeEmitter extends LocalVariablesSorter {
@ -870,4 +991,50 @@ public class CodeEmitter extends LocalVariablesSorter {
@@ -870,4 +991,50 @@ public class CodeEmitter extends LocalVariablesSorter {