OSDN Git Service

save
authoriga <tosiki.iga@nifty.ne.jp>
Tue, 1 Apr 2014 21:33:54 +0000 (06:33 +0900)
committeriga <tosiki.iga@nifty.ne.jp>
Tue, 1 Apr 2014 21:33:54 +0000 (06:33 +0900)
jcfa/src/jp/igapyon/jcfa/JcfaParser.java
jcfa/testJavaClass/output/test/TestJavaClass031.jcfa

index 9a2009e..487f926 100644 (file)
@@ -172,47 +172,38 @@ public class JcfaParser {
                                                + Constants.OPCODE_NAMES[jcfaCode.getOpcode()]);
 
                short operands = Constants.NO_OF_OPERANDS[jcfaCode.getOpcode()];
-               if (operands < 0) {
-                       jcfaCode.getComment()
-                                       .getCommentList()
-                                       .add("FIXME NO_OF_OPERANDS has negative value:"
-                                                       + Constants.OPCODE_NAMES[jcfaCode.getOpcode()]
-                                                       + ": " + operands);
-                       return operands;
-               }
+               if (operands == Constants.UNPREDICTABLE) {
+                       switch (jcfaCode.getOpcode()) {
+                       case Constants.TABLESWITCH: {
+                               jcfaCode.getComment().getCommentList()
+                                               .add("  TODO no support opecode and operands");
+                               return Constants.UNPREDICTABLE;
+                       }
+                       case Constants.LOOKUPSWITCH: {
+                               int result = JcfaUtil.byte2Int(codes[pc + 1], codes[pc + 2],
+                                               codes[pc + 3], codes[pc + 4]);
 
-               switch (jcfaCode.getOpcode()) {
-               case Constants.RETURN:
-                       break;
-               case Constants.GETSTATIC:
-                       break;
-               case Constants.LDC:
-                       break;
-               case Constants.INVOKEVIRTUAL:
-               case Constants.INVOKESPECIAL:
-                       break;
-               case Constants.LOOKUPSWITCH: {
-                       int result = JcfaUtil.byte2Int(codes[pc + 1], codes[pc + 2],
-                                       codes[pc + 3], codes[pc + 4]);
-                       System.out.println("  TODO skipping bytes: " + (result));
-
-                       int lookupOp = pc + 5;
-
-                       short diff = JcfaUtil.byte2UnsignedByte(codes[lookupOp++]);
-                       System.out.println("  TODO skipping bytes: " + (diff));
-
-                       int loopCount = JcfaUtil.byte2Int(codes[lookupOp++],
-                                       codes[lookupOp++], codes[lookupOp++], codes[lookupOp++]);
-
-                       short diff2 = JcfaUtil.byte2UnsignedByte(codes[lookupOp++]);
-                       jcfaCode.getComment().getCommentList()
-                                       .add("  TODO skipping bytes: " + (diff2));
-
-                       operands += (lookupOp - pc);
-               }
-                       break;
-               default:
-                       break;
+                               int lookupOp = pc + 5;
+
+                               short diff = JcfaUtil.byte2UnsignedByte(codes[lookupOp++]);
+
+                               int loopCount = JcfaUtil
+                                               .byte2Int(codes[lookupOp++], codes[lookupOp++],
+                                                               codes[lookupOp++], codes[lookupOp++]);
+
+                               short diff2 = JcfaUtil.byte2UnsignedByte(codes[lookupOp++]);
+                               jcfaCode.getComment().getCommentList()
+                                               .add("  TODO skipping bytes: " + (diff2));
+
+                               operands += (lookupOp - pc);
+                               break;
+                       }
+                       case Constants.WIDE: {
+                               jcfaCode.getComment().getCommentList()
+                                               .add("  TODO no support opecode and operands");
+                               return Constants.UNPREDICTABLE;
+                       }
+                       }
                }
 
                {
index 0b03f55..0bf6f1e 100644 (file)
@@ -30,8 +30,8 @@ public class TestJavaClass031 {
                 */
 
                /*
-                * 3: tableswitch FIXME NO_OF_OPERANDS has negative value:tableswitch:
-                * -2 TODO unsupported opcode
+                * 3: tableswitch TODO no support opecode and operands TODO unsupported
+                * opcode
                 */
        }
 }
\ No newline at end of file