Skip to content

Commit

Permalink
feat(objectionary#540): fix the bug related to LDC type determination
Browse files Browse the repository at this point in the history
  • Loading branch information
volodya-lombrozo committed Oct 7, 2024
1 parent 029d4da commit 34afa42
Showing 1 changed file with 12 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,8 @@ public String testCode() {
}

public int stack() {
switch (Instruction.find(this.opcode)) {
final Instruction instruction = Instruction.find(this.opcode);
switch (instruction) {
case NOP:
return 0;
case ACONST_NULL:
Expand Down Expand Up @@ -392,42 +393,22 @@ public int stack() {
return 0;
case IINC:
return 0;
case LDC:
final Type ldcType = Type.getType(this.args.get(0).getClass());
if (ldcType == Type.DOUBLE_TYPE || ldcType == Type.LONG_TYPE) {
case LDC: {
final Class<?> clazz = this.args.get(0).getClass();
if (clazz == Long.class || clazz == Double.class) {
return 2;
} else {
return 1;
return this.typeSize(Type.getType(clazz));
}
}
case GETSTATIC:
final Type type = Type.getType(String.valueOf(this.args.get(2)));
if (type == Type.DOUBLE_TYPE || type == Type.LONG_TYPE) {
return 2;
} else {
return 1;
}
return this.typeSize(Type.getType(String.valueOf(this.args.get(2))));
case PUTSTATIC:
final Type putType = Type.getType(String.valueOf(this.args.get(2)));
if (putType == Type.DOUBLE_TYPE || putType == Type.LONG_TYPE) {
return -2;
} else {
return -1;
}
return this.typeSize(Type.getType(String.valueOf(this.args.get(2)))) * -1;
case GETFIELD:
final Type fieldType = Type.getType(String.valueOf(this.args.get(2)));
if (fieldType == Type.DOUBLE_TYPE || fieldType == Type.LONG_TYPE) {
return 1;
} else {
return 0;
}
return this.typeSize(Type.getType(String.valueOf(this.args.get(2)))) - 1;
case PUTFIELD:
final Type putFieldType = Type.getType(String.valueOf(this.args.get(2)));
if (putFieldType == Type.DOUBLE_TYPE || putFieldType == Type.LONG_TYPE) {
return -3;
} else {
return -2;
}
// Invoke method instructions
return (this.typeSize(Type.getType(String.valueOf(this.args.get(2)))) * -1) - 1;
case INVOKEVIRTUAL:
case INVOKESPECIAL:
case INVOKEINTERFACE: {
Expand All @@ -445,9 +426,8 @@ public int stack() {
return this.typeSize(ret) - args;
}
case INVOKEDYNAMIC: {
return 0;
return 0; //todo
}
// New object
case NEW:
return 1;
case NEWARRAY:
Expand Down

0 comments on commit 34afa42

Please sign in to comment.