]> source.dussan.org Git - javassist.git/commitdiff
fixed a bug of CtBehavior.insertAt (and a few other minor fixes)
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Wed, 2 Mar 2005 03:42:10 +0000 (03:42 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Wed, 2 Mar 2005 03:42:10 +0000 (03:42 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@162 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

Readme.html
src/main/javassist/CtBehavior.java
src/main/javassist/compiler/Javac.java
tutorial/tutorial.html
tutorial/tutorial2.html
tutorial/tutorial3.html

index a707843a6fd8ec1b2594172255162947e5cfa833..913f8f84ee91b6b708a0fccc2d2de4e95b0e366b 100644 (file)
@@ -255,6 +255,11 @@ see javassist.Dump.
 
 <h2>Changes</h2>
 
+<p>- version 3.1
+
+<ul>
+</ul>
+
 <p>- version 3.0 in January 18, 2005
 
 <ul>
@@ -578,7 +583,7 @@ Denis Taye, Colin Sampaleanu, Robert Bialek, Asato Shimotaki,
 Howard Lewis Ship, Richard Jones, Marjan Sterjev,
 Bruce McDonald, Mark Brennan, Vlad Skarzhevskyy,
 Brett Randall, Tsuyoshi Murakami, Nathan Meyers, Yoshiyuki Usui
-Yutaka Sunaga, and Arjan van der Meer
+Yutaka Sunaga, Arjan van der Meer, and Bruce Eckel
 for their contributions.
 
 <p><br>
index 92759e6fbb782335f86d8b95fc70323babcaab6f..7bde7ae6ef7e24bd2cd924e9f771a0c3461e389f 100644 (file)
@@ -799,10 +799,12 @@ public abstract class CtBehavior extends CtMember {
             jv.recordLocalVariables(ca, index);
             jv.recordParams(getParameterTypes(),
                             Modifier.isStatic(getModifiers()));
+            jv.setMaxLocals(ca.getMaxLocals());
             jv.compileStmnt(src);
             Bytecode b = jv.getBytecode();
-            int stack = b.getMaxStack();
             int locals = b.getMaxLocals();
+            int stack = b.getMaxStack();
+            ca.setMaxLocals(locals);
 
             /* We assume that there is no values in the operand stack
              * at the position where the bytecode is inserted.
@@ -810,9 +812,6 @@ public abstract class CtBehavior extends CtMember {
             if (stack > ca.getMaxStack())
                 ca.setMaxStack(stack);
 
-            if (locals > ca.getMaxLocals())
-                ca.setMaxLocals(locals);
-
             iterator.insert(index, b.get());
             iterator.insert(b.getExceptionTable(), index);
             return lineNum;
index abeb82902b50217b0688d91c7b85cc76e3699484..88ed0ab55819e427a759b5bc921703982ec7b375 100644 (file)
@@ -201,6 +201,10 @@ public class Javac {
                 Parser p = new Parser(new Lex(src));
                 SymbolTable stb = new SymbolTable(stable);
                 Stmnt s = p.parseStatement(stb);
+                if (p.hasMore())
+                    throw new CompileError(
+                        "the method/constructor body must be surrounded by {}");
+
                 boolean callSuper = false;
                 if (method instanceof CtConstructor)
                     callSuper = !((CtConstructor)method).isClassInitializer();
@@ -311,6 +315,7 @@ public class Javac {
      * <p>This must be called before calling <code>compileStmnt()</code> and
      * <code>compileExpr()</code>.  The correct value of
      * <code>isStatic</code> must be recorded before compilation.
+     * <code>maxLocals</code> is updated to include $0,...
      */
     public int recordParams(CtClass[] params, boolean isStatic)
         throws CompileError
@@ -328,6 +333,7 @@ public class Javac {
      * <p>This must be called before calling <code>compileStmnt()</code> and
      * <code>compileExpr()</code>.  The correct value of
      * <code>isStatic</code> must be recorded before compilation.
+     * <code>maxLocals</code> is updated to include $0,...
      *
      * @paaram use0     true if $0 is used.
      * @param varNo     the register number of $0 (use0 is true)
@@ -346,6 +352,19 @@ public class Javac {
                                 use0, varNo, target, stable);
     }
 
+    /**
+     * Sets <code>maxLocals</code> to <code>max</code>.
+     * This method tells the compiler the local variables that have been
+     * allocated for the rest of the code.  When the compiler needs
+     * new local variables, the local variables at the index <code>max</code>,
+     * <code>max + 1</code>, ... are assigned.
+     *
+     * <p>This method is indirectly called by <code>recordParams</code>.
+     */
+    public void setMaxLocals(int max) {
+        gen.setMaxLocals(max);
+    }
+
     /**
      * Prepares to use cast $r, $w, $_, and $type.
      * $type is made to represent the specified return type.
index 9e27fe28959885086b4154fd4c2890be35de5e47..4cbf682183cedd1c025a7e74fe4e7f5466bbd091 100644 (file)
@@ -130,6 +130,8 @@ example, the data of method bodies.  Thus, after a
 <code>CtClass</code> object is pruned, the bytecode of a method is not
 accessible although method names and signatures are accessible.
 
+<p>(Note: the current version of Javassist turns pruning off by default.)
+
 <p>To disallow pruning a <code>CtClass</code>, <code>stopPruning()</code>
 must be called in advance:
 
@@ -1001,6 +1003,6 @@ binary code license.</i>
 
 <hr>
 Java(TM) is a trademark of Sun Microsystems, Inc.<br>
-Copyright (C) 2000-2004 by Shigeru Chiba, All rights reserved.
+Copyright (C) 2000-2005 by Shigeru Chiba, All rights reserved.
 </body>
 </html>
index abac129a3584a44db44dc939762974d805b6d095..6bc3d50b0b63eae3ee2bb47016a9da8ba648b5d3 100644 (file)
@@ -1466,6 +1466,6 @@ write:
 
 <hr>
 Java(TM) is a trademark of Sun Microsystems, Inc.<br>
-Copyright (C) 2000-2004 by Shigeru Chiba, All rights reserved.
+Copyright (C) 2000-2005 by Shigeru Chiba, All rights reserved.
 </body>
 </html>
index 635e01b6d76cb8c6fd58ab8b1532659de3f7b5dd..f19e5c0d01ccdcce650f1cdc48962668c9c79599 100644 (file)
@@ -18,6 +18,7 @@
 <br><li><a href="#member">Adding and removing a member</a>
 <br><li><a href="#traverse">Traversing a method body</a>
 <br><li><a href="#bytecode">Producing a bytecode sequence</a>
+<br><li><a href="#annotation">Annotations (Meta tags)</a>
 
 </ul>
 
@@ -190,12 +191,27 @@ constructed from the <code>Bytecode</code> object.
 To recompute the maximum stack depth of a method body,
 call <code>computeMaxStack()</code> in <code>CodeAttribute</code>.
 
+<p><br>
+
+<a name="annotation">
+<h3>5.5 Annotations (Meta tags)</h3>
+
+<p>Annotations are stored in a class file
+as runtime invisible (or visible) annotations attribute.
+These attributes can be obtained from <code>ClassFile</code>,
+<code>MethodInfo</code>, or <code>FieldInfo</code> objects.
+Call <code>getAttribute(AnnotationsAttribute.invisibleTag)</code>
+on those objects.  For more details, see the javadoc manual
+of <code>javassist.bytecode.AnnotationsAttribute</code> class
+and the <code>javassist.bytecode.annotation</code> package.
+
+
 <p><br>
 
 <a href="tutorial2.html">Previous page</a>
 
 <hr>
 Java(TM) is a trademark of Sun Microsystems, Inc.<br>
-Copyright (C) 2000-2004 by Shigeru Chiba, All rights reserved.
+Copyright (C) 2000-2005 by Shigeru Chiba, All rights reserved.
 </body>
 </html>