[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SourceFile attribute patch



Hi,

The attached files add support for the "SourceFile" attribute to Soot.
I've found a need for this and thought others might too. I hope that
the way I've implemented it is correct. Please commit to CVS if desired.

The patch also includes a couple of other minor additions & fixes.
The patch was generated vs. soot-2.0.1.

Thanks,
-Archie

__________________________________________________________________________
Archie Cobbs     *    Halloo Communications    *     http://www.halloo.com

Attachment: SourceFileTag.java
Description: application/java

diff -ur xx/soot-2.0.1/soot/src/soot/coffi/Util.java soot-2.0.1/soot/src/soot/coffi/Util.java
--- xx/soot-2.0.1/soot/src/soot/coffi/Util.java	Wed Jun 18 07:17:17 2003
+++ soot-2.0.1/soot/src/soot/coffi/Util.java	Sun Nov 30 14:45:49 2003
@@ -36,6 +36,7 @@
 import java.util.*;
 import java.io.*;
 import soot.baf.*;
+import soot.tagkit.*;
 import soot.*;
 
 
@@ -508,6 +509,16 @@
                 methodInfo.jmethod.setSource(new CoffiMethodSource(coffiClass, methodInfo));
             }
         
+	// Set "SourceFile" attribute tag
+	for(int i = 0; i < coffiClass.attributes_count; i++)
+	    {
+		if(!(coffiClass.attributes[i] instanceof SourceFile_attribute))
+		    continue;
+		SourceFile_attribute attr = (SourceFile_attribute)coffiClass.attributes[i];
+		bclass.addTag(new SourceFileTag(
+		    ((CONSTANT_Utf8_info)(coffiClass.constant_pool[attr.sourcefile_index])).convert()));
+		break;
+	    }
     }
     
 
diff -ur xx/soot-2.0.1/soot/src/soot/tagkit/BytecodeOffsetTag.java soot-2.0.1/soot/src/soot/tagkit/BytecodeOffsetTag.java
--- xx/soot-2.0.1/soot/src/soot/tagkit/BytecodeOffsetTag.java	Wed Jun 18 07:17:17 2003
+++ soot-2.0.1/soot/src/soot/tagkit/BytecodeOffsetTag.java	Sun Nov 30 14:17:45 2003
@@ -49,7 +49,7 @@
     return "BytecodeOffsetTag";
   }
 
-  /** Returns the offset in a two byte array.
+  /** Returns the offset in a four byte array.
    */
   public byte [] getValue() {
     byte [] v = new byte[4];
@@ -58,6 +58,12 @@
     v[2] = (byte) ((offset >> 8) % 256);;
     v[3] = (byte) (offset % 256);
     return v;
+  }
+
+  /** Returns the offset as an int.
+   */
+  public int getBytecodeOffset() {
+    return offset;
   }
 
   /** Returns the offset in a string.
diff -ur xx/soot-2.0.1/soot/src/soot/tagkit/LineNumberTag.java soot-2.0.1/soot/src/soot/tagkit/LineNumberTag.java
--- xx/soot-2.0.1/soot/src/soot/tagkit/LineNumberTag.java	Wed Jun 18 07:17:17 2003
+++ soot-2.0.1/soot/src/soot/tagkit/LineNumberTag.java	Sun Nov 30 14:17:08 2003
@@ -49,6 +49,11 @@
 	return v;
     }
 
+    public int getLineNumber()
+    {
+	return line_number;
+    }
+
     public String toString()
     {
    	return ""+line_number;