OSDN Git Service

バイトコードの定義ファイルをより細かくバイトコードを分類するように変更した.
authorHaruaki Tamada <tamada@cc.kyoto-su.ac.jp>
Thu, 1 Mar 2012 07:43:25 +0000 (16:43 +0900)
committerHaruaki Tamada <tamada@cc.kyoto-su.ac.jp>
Thu, 1 Mar 2012 07:47:37 +0000 (16:47 +0900)
pom.xml
src/main/java/jp/sourceforge/stigmata/cflib/ControlFlowGraph.java
src/main/java/jp/sourceforge/stigmata/cflib/ControlFlowGraphExtractVisitor.java
src/main/java/jp/sourceforge/stigmata/cflib/Opcode.java
src/main/java/jp/sourceforge/stigmata/cflib/OpcodeExtractMethodVisitor.java
src/main/java/jp/sourceforge/stigmata/cflib/OpcodeManager.java
src/main/resources/META-INF/bytecode.def
src/test/java/jp/sourceforge/stigmata/cflib/OpcodeTest.java

diff --git a/pom.xml b/pom.xml
index d9f5c46..f0ba268 100644 (file)
--- a/pom.xml
+++ b/pom.xml
 <?xml version="1.0" encoding="UTF-8"?>\r
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
+\r
+<project xmlns="http://maven.apache.org/POM/4.0.0"\r
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
   <modelVersion>4.0.0</modelVersion>\r
+\r
+  <parent>\r
+    <groupId>jp.sourceforge</groupId>\r
+    <artifactId>stigmata</artifactId>\r
+    <version>4.0-SNAPSHOT</version>\r
+  </parent>\r
+\r
   <groupId>jp.sourceforge.stigmata</groupId>\r
   <artifactId>cflib</artifactId>\r
-  <version>1.1.2-SNAPSHOT</version>\r
-  <name>Control Flow Library</name>\r
+  <version>2.0-SNAPSHOT</version>\r
+  <packaging>jar</packaging>\r
+\r
+  <name>CFLib: Control Flow Library</name>\r
+  <description>Parse bytecode, and build control flow.</description>\r
   <url>http://stigmata.sourceforge.jp/stigmata/cflib/</url>\r
   <inceptionYear>2009</inceptionYear>\r
 \r
-  <distributionManagement>\r
-    <repository>\r
-      <id>tamadalab-intra-repo</id>\r
-      <url>dav:http://diamond.cse.kyoto-su.ac.jp/maven2</url>\r
-    </repository>\r
-  </distributionManagement>\r
-\r
   <scm>\r
-    <connection>scm:git:git://diamond.cse.kyoto-su.ac.jp/var/gitroot/stigmata/cflib.git</connection>\r
-    <developerConnection>scm:git:ssh://git@diamond.cse.kyoto-su.ac.jp:/stigmata/cflib.git</developerConnection>\r
-    <url>http://diamond.cse.kyoto-su.ac.jp/redmine/projects/cflib/repository</url>\r
+    <connection>scm:git:git://git.sourceforge.jp/gitroot/stigmata/cflib.git</connection>\r
+    <developerConnection>scm:git:ssh://tama3@git.sourceforge.jp:/gitroot/stigmata/cflib.git</developerConnection>\r
+    <url>http://git.sourceforge.jp/view?p=stigmata/cflib.git</url>\r
   </scm>\r
 \r
-  <repositories>\r
-    <repository>\r
-      <id>tamadalab-intra-repo</id>\r
-      <url>http://diamond.cse.kyoto-su.ac.jp/maven2/</url>\r
-    </repository>\r
-    <repository>\r
-      <id>stigmata.sourceforge.jp</id>\r
-      <name>Stigmata Maven2 Repository in sourceforge.jp</name>\r
-      <url>http://stigmata.sourceforge.jp/maven2</url>\r
-    </repository>\r
-    <repository>\r
-      <id>talisman.sourceforge.jp</id>\r
-      <name>Talisman Maven2 Repository in sourceforge.jp</name>\r
-      <url>http://talisman.sourceforge.jp/maven2</url>\r
-    </repository>\r
-  </repositories>\r
+  <distributionManagement>\r
+    <site>\r
+      <id>shell.sourceforge.jp</id>\r
+      <url>scp://tama3@shell.sourceforge.jp/home/groups/s/st/stigmata/htdocs/cflib/</url>\r
+    </site>\r
+  </distributionManagement>\r
 \r
   <dependencies>\r
     <dependency>\r
-      <groupId>jp.sourceforge</groupId>\r
-      <artifactId>stigmata</artifactId>\r
-      <version>3.0.0-SNAPSHOT</version>\r
+      <groupId>jp.sourceforge.stigmata</groupId>\r
+      <artifactId>stigmata-core</artifactId>\r
+      <version>4.0-SNAPSHOT</version>\r
       <scope>provided</scope>\r
     </dependency>\r
     <dependency>\r
-      <groupId>junit</groupId>\r
-      <artifactId>junit</artifactId>\r
-      <version>4.8.1</version>\r
-      <scope>test</scope>\r
+      <groupId>jp.sourceforge.talisman</groupId>\r
+      <artifactId>csvio</artifactId>\r
+      <version>1.0.2</version>\r
+      <scope>compile</scope>\r
     </dependency>\r
   </dependencies>\r
 \r
-  <licenses>\r
-    <license>\r
-      <name>Apache License 2.0</name>\r
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\r
-      <distribution>repo</distribution>\r
-    </license>\r
-  </licenses>\r
-\r
   <build>\r
     <plugins>\r
       <plugin>\r
         <groupId>org.apache.maven.plugins</groupId>\r
-        <artifactId>maven-compiler-plugin</artifactId>\r
-        <version>2.3.2</version>\r
-        <configuration>\r
-          <source>1.6</source>\r
-          <target>1.6</target>\r
-          <encoding>utf-8</encoding>\r
-        </configuration>\r
-      </plugin>\r
-\r
-      <plugin>\r
-        <groupId>org.apache.maven.plugins</groupId>\r
         <artifactId>maven-release-plugin</artifactId>\r
         <version>2.1</version>\r
         <configuration>\r
           <tagBase>scm:git:ssh://git@diamond.cse.kyoto-su.ac.jp:/stigmata/cflib.git</tagBase>\r
         </configuration>\r
       </plugin>\r
-\r
-      <plugin>\r
-        <groupId>org.apache.maven.plugins</groupId>\r
-        <artifactId>maven-resources-plugin</artifactId>\r
-        <version>2.4.3</version>\r
-        <configuration>\r
-          <encoding>utf-8</encoding>\r
-        </configuration>\r
-      </plugin>\r
-\r
-      <plugin>\r
-        <groupId>org.apache.maven.plugins</groupId>\r
-        <artifactId>maven-dependency-plugin</artifactId>\r
-        <executions>\r
-          <execution>\r
-            <id>copy-dependencies</id>\r
-            <phase>compile</phase>\r
-            <goals>\r
-              <goal>copy-dependencies</goal>\r
-            </goals>\r
-            <configuration>\r
-              <outputDirectory>${project.build.directory}</outputDirectory>\r
-              <includeScope>runtime</includeScope>\r
-            </configuration>\r
-          </execution>\r
-        </executions>\r
-      </plugin>\r
     </plugins>\r
-\r
-    <extensions>\r
-      <extension>\r
-        <groupId>org.apache.maven.wagon</groupId>\r
-        <artifactId>wagon-ssh</artifactId>\r
-        <version>1.0-beta-6</version>\r
-      </extension>\r
-      <extension>\r
-        <groupId>org.apache.maven.wagon</groupId>\r
-        <artifactId>wagon-webdav-jackrabbit</artifactId>\r
-        <version>1.0-beta-7</version>\r
-      </extension>\r
-    </extensions>\r
   </build>\r
 </project>\r
index e43f2e9..ccaac3c 100644 (file)
@@ -5,6 +5,7 @@ import java.util.HashSet;
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Set;\r
+import jp.sourceforge.stigmata.utils.ArrayIterator;\r
 \r
 import org.objectweb.asm.Label;\r
 import org.objectweb.asm.Opcodes;\r
@@ -21,12 +22,18 @@ import org.objectweb.asm.tree.TryCatchBlockNode;
  * \r
  * @author tamada\r
  */\r
-public class ControlFlowGraph {\r
+public class ControlFlowGraph implements Iterable<BasicBlock>{\r
     private BasicBlock[] blocks;\r
     private boolean includeException;\r
     private MethodNode method;\r
     private String name;\r
 \r
+    public ControlFlowGraph(String name, BasicBlock[] initBlocks){\r
+        this.name = name;\r
+        blocks = new BasicBlock[initBlocks.length];\r
+        System.arraycopy(initBlocks, 0, blocks, 0, initBlocks.length);\r
+    }\r
+\r
     public ControlFlowGraph(String name, MethodNode node){\r
         this(name, node, false);\r
     }\r
@@ -111,6 +118,10 @@ public class ControlFlowGraph {
         return jumpTarget;\r
     }\r
 \r
+    public Iterator<BasicBlock> iterator(){\r
+        return new ArrayIterator<BasicBlock>(blocks);\r
+    }\r
+\r
     public int getBasicBlockSize(){\r
         return blocks.length;\r
     }\r
index a2ebbf6..f47a5c4 100644 (file)
@@ -19,11 +19,17 @@ import org.objectweb.asm.tree.MethodNode;
  */
 public class ControlFlowGraphExtractVisitor extends BirthmarkExtractVisitor{
     private Map<String, MethodNode> opcodesMap = new LinkedHashMap<String, MethodNode>();
+    private boolean includeExceptionFlows = false;
 
     public ControlFlowGraphExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context){
         super(visitor, birthmark, context);
     }
 
+    public ControlFlowGraphExtractVisitor(ClassVisitor visitor, Birthmark birthmark, BirthmarkContext context, boolean includeExceptionFlows){
+        super(visitor, birthmark, context);
+        this.includeExceptionFlows = includeExceptionFlows;
+    }
+
     /**
      * Constructor for JUnit.
      * @param visitor
@@ -50,6 +56,6 @@ public class ControlFlowGraphExtractVisitor extends BirthmarkExtractVisitor{
     }
 
     private ControlFlowGraph buildControlFlow(String methodName, MethodNode node){
-        return new ControlFlowGraph(methodName, node);
+        return new ControlFlowGraph(methodName, node, includeExceptionFlows);
     }
 }
index e5ea147..92c4dcf 100644 (file)
@@ -16,7 +16,9 @@ public class Opcode implements Serializable, Iterable<Label>{
     private static final long serialVersionUID = -2349834745416345564L;
 
     public static enum Category{
-        NORMAL, BRANCH, OBJECT, INVOKE, TARGETER,
+        CONSTANT, LOAD, STORE, ARRAY, STACK, ADD, SUBTRACT, MULTIPLY, DIVIDE, REMAIN,
+        NEGATE, SHIFT_LEFT, SHIFT_RIGHT, USHIFT_RIGHT, AND, OR, XOR, CAST, COMPARE,
+        BRANCH, RETURN, FIELD, INVOKE, NEW, THROW, TARGETER, OTHERS,
     };
     private int opcode;
     private String name;
@@ -98,7 +100,7 @@ public class Opcode implements Serializable, Iterable<Label>{
     }
 
     public void setAct(int act){
-        if(category != Category.OBJECT && category != Category.INVOKE){
+        if(category != Category.FIELD && category != Category.INVOKE){
             throw new IllegalStateException("setAct can be called only object and invoke category.");
         }
         this.act = act;
index 340b542..d97bb19 100644 (file)
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
@@ -13,7 +12,7 @@ import org.objectweb.asm.Type;
  *
  * @author Haruaki TAMADA
  */
-public class OpcodeExtractMethodVisitor extends MethodAdapter{
+public class OpcodeExtractMethodVisitor extends MethodVisitor{
     private List<Opcode> opcodes;
     private OpcodeManager manager = OpcodeManager.getInstance();
     private List<OpcodeExtractListener> listeners = new ArrayList<OpcodeExtractListener>();
@@ -23,7 +22,7 @@ public class OpcodeExtractMethodVisitor extends MethodAdapter{
     }
 
     public OpcodeExtractMethodVisitor(MethodVisitor visitor, List<Opcode> opcodes){
-        super(visitor);
+        super(Opcodes.ASM4, visitor);
         this.opcodes = opcodes;
     }
 
@@ -91,12 +90,18 @@ public class OpcodeExtractMethodVisitor extends MethodAdapter{
 
     @Override
     public void visitLdcInsn(Object value){
-        opcodes.add(manager.getOpcode(Opcodes.LDC));
+        if(value instanceof Double || value instanceof Long){
+            // 20 is opcode of LDC2_W
+            opcodes.add(manager.getOpcode(20));
+        }
+        else{
+            opcodes.add(manager.getOpcode(Opcodes.LDC));
+        }
         super.visitLdcInsn(value);
     }
 
     @Override
-    public void visitTableSwitchInsn(int min, int max, Label defaultLabel, Label[] labels){
+    public void visitTableSwitchInsn(int min, int max, Label defaultLabel, Label... labels){
         Opcode tableSwitch = new Opcode(manager.getOpcode(Opcodes.TABLESWITCH));
         tableSwitch.setLabels(labels);
         tableSwitch.addLabel(defaultLabel);
index beec58b..62721f4 100644 (file)
@@ -51,6 +51,7 @@ public class OpcodeManager{
                 }
             }
         } catch(Exception e){
+            e.printStackTrace();
             throw new InternalError(e.getMessage());
         }
     }
@@ -82,10 +83,16 @@ public class OpcodeManager{
             case INVOKE:
                 opcode = constructMethodOpcode(opcode, node);
                 break;
-            case OBJECT:
+            case FIELD:
                 opcode = constructObjectOpcode(opcode, node);
                 break;
-            case NORMAL:   // Not needs conversion.
+             // Not needs conversion.
+            case CONSTANT: case ARRAY:  case ADD:      case LOAD:
+            case SUBTRACT: case DIVIDE: case MULTIPLY: case SHIFT_RIGHT:
+            case AND:      case OR:     case XOR:      case SHIFT_LEFT:
+            case NEGATE:   case REMAIN: case STORE:    case USHIFT_RIGHT:
+            case NEW:      case CAST:   case COMPARE:  case RETURN:
+            case OTHERS:   case THROW:  case STACK:  
             case TARGETER: // Already convert above.
             default:
                 break;
index 4afb159..b8bcebb 100644 (file)
-0,nop,0,0,NORMAL\r
-1,aconst_null,0,1,NORMAL\r
-2,iconst_m1,0,1,NORMAL\r
-3,iconst_0,0,1,NORMAL\r
-4,iconst_1,0,1,NORMAL\r
-5,iconst_2,0,1,NORMAL\r
-6,iconst_3,0,1,NORMAL\r
-7,iconst_4,0,1,NORMAL\r
-8,iconst_5,0,1,NORMAL\r
-9,lconst_0,0,2,NORMAL\r
-10,lconst_1,0,2,NORMAL\r
-11,fconst_0,0,1,NORMAL\r
-12,fconst_1,0,1,NORMAL\r
-13,fconst_2,0,1,NORMAL\r
-14,dconst_0,0,2,NORMAL\r
-15,dconst_1,0,2,NORMAL\r
-16,bipush,1,1,NORMAL\r
-17,sipush,2,1,NORMAL\r
-18,ldc,1,1,NORMAL\r
-19,ldc_w,2,1,NORMAL\r
-20,ldc2_w,2,2,NORMAL\r
-21,iload,1,1,NORMAL\r
-22,lload,1,2,NORMAL\r
-23,fload,1,1,NORMAL\r
-24,dload,1,2,NORMAL\r
-25,aload,1,1,NORMAL\r
-26,iload_0,0,1,NORMAL\r
-27,iload_1,0,1,NORMAL\r
-28,iload_2,0,1,NORMAL\r
-29,iload_3,0,1,NORMAL\r
-30,lload_0,0,2,NORMAL\r
-31,lload_1,0,2,NORMAL\r
-32,lload_2,0,2,NORMAL\r
-33,lload_3,0,2,NORMAL\r
-34,fload_0,0,1,NORMAL\r
-35,fload_1,0,1,NORMAL\r
-36,fload_2,0,1,NORMAL\r
-37,fload_3,0,1,NORMAL\r
-38,dload_0,0,2,NORMAL\r
-39,dload_1,0,2,NORMAL\r
-40,dload_2,0,2,NORMAL\r
-41,dload_3,0,2,NORMAL\r
-42,aload_0,0,1,NORMAL\r
-43,aload_1,0,1,NORMAL\r
-44,aload_2,0,1,NORMAL\r
-45,aload_3,0,1,NORMAL\r
-46,iaload,0,-1,NORMAL\r
-47,laload,0,0,NORMAL\r
-48,faload,0,-1,NORMAL\r
-49,daload,0,0,NORMAL\r
-50,aaload,0,-1,NORMAL\r
-51,baload,0,-1,NORMAL\r
-52,caload,0,-1,NORMAL\r
-53,saload,0,-1,NORMAL\r
-54,istore,1,-1,NORMAL\r
-55,lstore,1,-2,NORMAL\r
-56,fstore,1,-1,NORMAL\r
-57,dstore,1,-2,NORMAL\r
-58,astore,1,-1,NORMAL\r
-59,istore_0,0,-1,NORMAL\r
-60,istore_1,0,-1,NORMAL\r
-61,istore_2,0,-1,NORMAL\r
-62,istore_3,0,-1,NORMAL\r
-63,lstore_0,0,-2,NORMAL\r
-64,lstore_1,0,-2,NORMAL\r
-65,lstore_2,0,-2,NORMAL\r
-66,lstore_3,0,-2,NORMAL\r
-67,fstore_0,0,-1,NORMAL\r
-68,fstore_1,0,-1,NORMAL\r
-69,fstore_2,0,-1,NORMAL\r
-70,fstore_3,0,-1,NORMAL\r
-71,dstore_0,0,-2,NORMAL\r
-72,dstore_1,0,-2,NORMAL\r
-73,dstore_2,0,-2,NORMAL\r
-74,dstore_3,0,-2,NORMAL\r
-75,astore_0,0,-1,NORMAL\r
-76,astore_1,0,-1,NORMAL\r
-77,astore_2,0,-1,NORMAL\r
-78,astore_3,0,-1,NORMAL\r
-79,iastore,0,-3,NORMAL\r
-80,lastore,0,-3,NORMAL\r
-81,fastore,0,-3,NORMAL\r
-82,dastore,0,-3,NORMAL\r
-83,aastore,0,-3,NORMAL\r
-84,bastore,0,-3,NORMAL\r
-85,castore,0,-3,NORMAL\r
-86,sastore,0,-3,NORMAL\r
-87,pop,0,-1,NORMAL\r
-88,pop2,0,-2,NORMAL\r
-89,dup,0,1,NORMAL\r
-90,dup_x1,0,1,NORMAL\r
-91,dup_x2,0,1,NORMAL\r
-92,dup2,0,2,NORMAL\r
-93,dup2_x1,0,2,NORMAL\r
-94,dup2_x2,0,2,NORMAL\r
-95,swap,0,0,NORMAL\r
-96,iadd,0,-1,NORMAL\r
-97,ladd,0,-2,NORMAL\r
-98,fadd,0,-1,NORMAL\r
-99,dadd,0,-2,NORMAL\r
-100,isub,0,-1,NORMAL\r
-101,lsub,0,-2,NORMAL\r
-102,fsub,0,-1,NORMAL\r
-103,dsub,0,-2,NORMAL\r
-104,imul,0,-1,NORMAL\r
-105,lmul,0,-2,NORMAL\r
-106,fmul,0,-1,NORMAL\r
-107,dmul,0,-2,NORMAL\r
-108,idiv,0,-1,NORMAL\r
-109,ldiv,0,-2,NORMAL\r
-110,fdiv,0,-1,NORMAL\r
-111,ddiv,0,-2,NORMAL\r
-112,irem,0,-1,NORMAL\r
-113,lrem,0,-2,NORMAL\r
-114,frem,0,-1,NORMAL\r
-115,drem,0,-2,NORMAL\r
-116,ineg,0,0,NORMAL\r
-117,lneg,0,0,NORMAL\r
-118,fneg,0,0,NORMAL\r
-119,dneg,0,0,NORMAL\r
-120,ishl,0,-1,NORMAL\r
-121,lshl,0,-1,NORMAL\r
-122,ishr,0,-1,NORMAL\r
-123,lshr,0,-1,NORMAL\r
-124,iushr,0,-1,NORMAL\r
-125,lushr,0,-2,NORMAL\r
-126,iand,0,-1,NORMAL\r
-127,land,0,-2,NORMAL\r
-128,ior,0,-1,NORMAL\r
-129,lor,0,-2,NORMAL\r
-130,ixor,0,-1,NORMAL\r
-131,lxor,0,-2,NORMAL\r
-132,iinc,2,0,NORMAL\r
-133,i2l,0,1,NORMAL\r
-134,i2f,0,0,NORMAL\r
-135,i2d,0,1,NORMAL\r
-136,l2i,0,-1,NORMAL\r
-137,l2f,0,-1,NORMAL\r
-138,l2d,0,0,NORMAL\r
-139,f2i,0,0,NORMAL\r
-140,f2l,0,1,NORMAL\r
-141,f2d,0,1,NORMAL\r
-142,d2i,0,-1,NORMAL\r
-143,d2l,0,0,NORMAL\r
-144,d2f,0,-1,NORMAL\r
-145,i2b,0,0,NORMAL\r
-146,i2c,0,0,NORMAL\r
-147,i2s,0,0,NORMAL\r
-148,lcmp,0,-3,NORMAL\r
-149,fcmpl,0,-1,NORMAL\r
-150,fcmpg,0,-1,NORMAL\r
-151,dcmpl,0,-3,NORMAL\r
-152,dcmpg,0,-3,NORMAL\r
+0,nop,0,0,STACK\r
+1,aconst_null,0,1,CONSTANT\r
+2,iconst_m1,0,1,CONSTANT\r
+3,iconst_0,0,1,CONSTANT\r
+4,iconst_1,0,1,CONSTANT\r
+5,iconst_2,0,1,CONSTANT\r
+6,iconst_3,0,1,CONSTANT\r
+7,iconst_4,0,1,CONSTANT\r
+8,iconst_5,0,1,CONSTANT\r
+9,lconst_0,0,2,CONSTANT\r
+10,lconst_1,0,2,CONSTANT\r
+11,fconst_0,0,1,CONSTANT\r
+12,fconst_1,0,1,CONSTANT\r
+13,fconst_2,0,1,CONSTANT\r
+14,dconst_0,0,2,CONSTANT\r
+15,dconst_1,0,2,CONSTANT\r
+16,bipush,1,1,CONSTANT\r
+17,sipush,2,1,CONSTANT\r
+18,ldc,1,1,CONSTANT\r
+19,ldc_w,2,1,CONSTANT\r
+20,ldc2_w,2,2,CONSTANT\r
+21,iload,1,1,LOAD\r
+22,lload,1,2,LOAD\r
+23,fload,1,1,LOAD\r
+24,dload,1,2,LOAD\r
+25,aload,1,1,LOAD\r
+26,iload_0,0,1,LOAD\r
+27,iload_1,0,1,LOAD\r
+28,iload_2,0,1,LOAD\r
+29,iload_3,0,1,LOAD\r
+30,lload_0,0,2,LOAD\r
+31,lload_1,0,2,LOAD\r
+32,lload_2,0,2,LOAD\r
+33,lload_3,0,2,LOAD\r
+34,fload_0,0,1,LOAD\r
+35,fload_1,0,1,LOAD\r
+36,fload_2,0,1,LOAD\r
+37,fload_3,0,1,LOAD\r
+38,dload_0,0,2,LOAD\r
+39,dload_1,0,2,LOAD\r
+40,dload_2,0,2,LOAD\r
+41,dload_3,0,2,LOAD\r
+42,aload_0,0,1,LOAD\r
+43,aload_1,0,1,LOAD\r
+44,aload_2,0,1,LOAD\r
+45,aload_3,0,1,LOAD\r
+46,iaload,0,-1,ARRAY\r
+47,laload,0,0,ARRAY\r
+48,faload,0,-1,ARRAY\r
+49,daload,0,0,ARRAY\r
+50,aaload,0,-1,ARRAY\r
+51,baload,0,-1,ARRAY\r
+52,caload,0,-1,ARRAY\r
+53,saload,0,-1,ARRAY\r
+54,istore,1,-1,STORE\r
+55,lstore,1,-2,STORE\r
+56,fstore,1,-1,STORE\r
+57,dstore,1,-2,STORE\r
+58,astore,1,-1,STORE\r
+59,istore_0,0,-1,STORE\r
+60,istore_1,0,-1,STORE\r
+61,istore_2,0,-1,STORE\r
+62,istore_3,0,-1,STORE\r
+63,lstore_0,0,-2,STORE\r
+64,lstore_1,0,-2,STORE\r
+65,lstore_2,0,-2,STORE\r
+66,lstore_3,0,-2,STORE\r
+67,fstore_0,0,-1,STORE\r
+68,fstore_1,0,-1,STORE\r
+69,fstore_2,0,-1,STORE\r
+70,fstore_3,0,-1,STORE\r
+71,dstore_0,0,-2,STORE\r
+72,dstore_1,0,-2,STORE\r
+73,dstore_2,0,-2,STORE\r
+74,dstore_3,0,-2,STORE\r
+75,astore_0,0,-1,STORE\r
+76,astore_1,0,-1,STORE\r
+77,astore_2,0,-1,STORE\r
+78,astore_3,0,-1,STORE\r
+79,iastore,0,-3,ARRAY\r
+80,lastore,0,-3,ARRAY\r
+81,fastore,0,-3,ARRAY\r
+82,dastore,0,-3,ARRAY\r
+83,aastore,0,-3,ARRAY\r
+84,bastore,0,-3,ARRAY\r
+85,castore,0,-3,ARRAY\r
+86,sastore,0,-3,ARRAY\r
+87,pop,0,-1,STACK\r
+88,pop2,0,-2,STACK\r
+89,dup,0,1,STACK\r
+90,dup_x1,0,1,STACK\r
+91,dup_x2,0,1,STACK\r
+92,dup2,0,2,STACK\r
+93,dup2_x1,0,2,STACK\r
+94,dup2_x2,0,2,STACK\r
+95,swap,0,0,STACK\r
+96,iadd,0,-1,ADD\r
+97,ladd,0,-2,ADD\r
+98,fadd,0,-1,ADD\r
+99,dadd,0,-2,ADD\r
+100,isub,0,-1,SUBTRACT\r
+101,lsub,0,-2,SUBTRACT\r
+102,fsub,0,-1,SUBTRACT\r
+103,dsub,0,-2,SUBTRACT\r
+104,imul,0,-1,MULTIPLY\r
+105,lmul,0,-2,MULTIPLY\r
+106,fmul,0,-1,MULTIPLY\r
+107,dmul,0,-2,MULTIPLY\r
+108,idiv,0,-1,DIVIDE\r
+109,ldiv,0,-2,DIVIDE\r
+110,fdiv,0,-1,DIVIDE\r
+111,ddiv,0,-2,DIVIDE\r
+112,irem,0,-1,REMAIN\r
+113,lrem,0,-2,REMAIN\r
+114,frem,0,-1,REMAIN\r
+115,drem,0,-2,REMAIN\r
+116,ineg,0,0,NEGATE\r
+117,lneg,0,0,NEGATE\r
+118,fneg,0,0,NEGATE\r
+119,dneg,0,0,NEGATE\r
+120,ishl,0,-1,SHIFT_LEFT\r
+121,lshl,0,-1,SHIFT_LEFT\r
+122,ishr,0,-1,SHIFT_RIGHT\r
+123,lshr,0,-1,SHIFT_RIGHT\r
+124,iushr,0,-1,USHIFT_RIGHT\r
+125,lushr,0,-2,USHIFT_RIGHT\r
+126,iand,0,-1,AND\r
+127,land,0,-2,AND\r
+128,ior,0,-1,OR\r
+129,lor,0,-2,OR\r
+130,ixor,0,-1,XOR\r
+131,lxor,0,-2,XOR\r
+132,iinc,2,0,ADD\r
+133,i2l,0,1,CAST\r
+134,i2f,0,0,CAST\r
+135,i2d,0,1,CAST\r
+136,l2i,0,-1,CAST\r
+137,l2f,0,-1,CAST\r
+138,l2d,0,0,CAST\r
+139,f2i,0,0,CAST\r
+140,f2l,0,1,CAST\r
+141,f2d,0,1,CAST\r
+142,d2i,0,-1,CAST\r
+143,d2l,0,0,CAST\r
+144,d2f,0,-1,CAST\r
+145,i2b,0,0,CAST\r
+146,i2c,0,0,CAST\r
+147,i2s,0,0,CAST\r
+148,lcmp,0,-3,COMPARE\r
+149,fcmpl,0,-1,COMPARE\r
+150,fcmpg,0,-1,COMPARE\r
+151,dcmpl,0,-3,COMPARE\r
+152,dcmpg,0,-3,COMPARE\r
 153,ifeq,2,-1,BRANCH\r
 154,ifne,2,-1,BRANCH\r
 155,iflt,2,-1,BRANCH\r
 166,if_acmpne,2,-2,BRANCH\r
 167,goto,2,0,BRANCH\r
 168,jsr,2,1,BRANCH\r
-169,ret,1,0,NORMAL\r
+169,ret,1,0,RETURN\r
 170,tableswitch,-1,-1,BRANCH\r
 171,lookupswitch,-1,-1,BRANCH\r
-172,ireturn,0,-1,NORMAL\r
-173,lreturn,0,-2,NORMAL\r
-174,freturn,0,-1,NORMAL\r
-175,dreturn,0,-2,NORMAL\r
-176,areturn,0,-1,NORMAL\r
-177,return,0,0,NORMAL\r
-178,getstatic,2,0,OBJECT\r
-179,putstatic,2,0,OBJECT\r
-180,getfield,2,0,OBJECT\r
-181,putfield,2,0,OBJECT\r
+172,ireturn,0,-1,RETURN\r
+173,lreturn,0,-2,RETURN\r
+174,freturn,0,-1,RETURN\r
+175,dreturn,0,-2,RETURN\r
+176,areturn,0,-1,RETURN\r
+177,return,0,0,RETURN\r
+178,getstatic,2,0,FIELD\r
+179,putstatic,2,0,FIELD\r
+180,getfield,2,0,FIELD\r
+181,putfield,2,0,FIELD\r
 182,invokevirtual,2,0,INVOKE\r
 183,invokespecial,2,0,INVOKE\r
 184,invokestatic,2,0,INVOKE\r
 185,invokeinterface,2,0,INVOKE\r
 186,__unused,0\r
-187,new,2,1,NORMAL\r
-188,newarray,1,0,NORMAL\r
-189,anewarray,2,0,NORMAL\r
-190,arraylength,0,0,NORMAL\r
-191,athrow,0,-1,NORMAL\r
-192,checkcast,2,0,NORMAL\r
-193,instanceof,2,0,NORMAL\r
-194,monitorenter,0,-1,NORMAL\r
-195,monitorexit,0,-1,NORMAL\r
-196,wide,-1,0,NORMAL\r
-197,multianewarray,3,-1,NORMAL\r
+187,new,2,1,NEW\r
+188,newarray,1,0,NEW\r
+189,anewarray,2,0,NEW\r
+190,arraylength,0,0,ARRAY\r
+191,athrow,0,-1,THROW\r
+192,checkcast,2,0,CAST\r
+193,instanceof,2,0,COMPARE\r
+194,monitorenter,0,-1,OTHERS\r
+195,monitorexit,0,-1,OTHERS\r
+196,wide,-1,0,OTHERS\r
+197,multianewarray,3,-1,ARRAY\r
 198,ifnull,2,-1,BRANCH\r
 199,ifnonnull,2,-1,BRANCH\r
 200,goto_w,4,0,BRANCH\r
index a50ab88..0ec9c90 100644 (file)
@@ -23,7 +23,7 @@ public class OpcodeTest{
 
     @Before
     public void setup(){
-        opcode = new Opcode(26, "iload_0", 0, 1, Opcode.Category.NORMAL);
+        opcode = new Opcode(26, "iload_0", 0, 1, Opcode.Category.LOAD);
     }
 
     @Test
@@ -32,7 +32,7 @@ public class OpcodeTest{
         Assert.assertEquals("iload_0", opcode.getName());
         Assert.assertEquals(0, opcode.getArgumentCount());
         Assert.assertEquals(1, opcode.getAct());
-        Assert.assertEquals(Opcode.Category.NORMAL, opcode.getCategory());
+        Assert.assertEquals(Opcode.Category.LOAD, opcode.getCategory());
     }
 
     @Test
@@ -42,7 +42,7 @@ public class OpcodeTest{
         Assert.assertEquals("iload_0", o.getName());
         Assert.assertEquals(0, o.getArgumentCount());
         Assert.assertEquals(1, o.getAct());
-        Assert.assertEquals(Opcode.Category.NORMAL, o.getCategory());
+        Assert.assertEquals(Opcode.Category.LOAD, o.getCategory());
     }
 
     @Test(expected=IllegalStateException.class)