==== Patch <constant-pool> level 1
Source: [No source]
Target: 737f8f2c-97f8-0310-ac9b-cfac8cc1a2f5:/eng/third-party/janino/trunk:72828
        (svn+ssh://svn.streambase.com/repos/sb)
Log:
 r74818@spiceweasel (orig r72993):  fowles | 2008-05-28 13:01:23 -0400
 Allow constant pool to contain items between [16K, and 32K] (also know as unsigned short)
 
 r74836@spiceweasel (orig r73011):  fowles | 2008-05-28 14:12:08 -0400
 Fix wider constants to work correctly
 
 r74883@spiceweasel (orig r73058):  fowles | 2008-05-29 10:48:06 -0400
 Fix a stupid mistake with signed bytes
 

=== tests/src/EvaluatorTests.java
==================================================================
--- tests/src/EvaluatorTests.java	(revision 72828)
+++ tests/src/EvaluatorTests.java	(patch constant-pool level 1)
@@ -38,6 +38,7 @@
 import java.io.StringReader;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Properties;
@@ -74,6 +75,7 @@
 //        s.addTest(new EvaluatorTests("testStaticInitAccessProtected"));
         s.addTest(new EvaluatorTests("testDivByZero"));
         s.addTest(new EvaluatorTests("test32kBranchLimit"));
+        s.addTest(new EvaluatorTests("test32kConstantPool"));
         return s;
     }
 
@@ -494,4 +496,32 @@
         }
         
     }
+    
+    public void test32kConstantPool() throws Exception {
+        String preamble =
+            "package test;\n" +
+            "public class Test {\n";
+        String postamble =
+            "}";
+        
+        
+        int[] tests = new int[] { 1, 100, 13020 };
+        for(int i = 0; i < tests.length; ++i) {
+            int repititions = tests[i];
+            
+            StringBuffer sb = new StringBuffer();
+            sb.append(preamble);
+            for(int j = 0; j < repititions; ++j) {
+                sb.append("boolean _v").append(Integer.toString(j)).append(" = false;\n");
+            }
+            sb.append(postamble);
+            
+            SimpleCompiler sc = new SimpleCompiler();
+            sc.cook(sb.toString());
+            
+            Class c = sc.getClassLoader().loadClass("test.Test");
+            Object o = c.newInstance();
+            assertNotNull(o);
+        }
+    }
 }
=== src/org/codehaus/janino/UnitCompiler.java
==================================================================
--- src/org/codehaus/janino/UnitCompiler.java	(revision 72828)
+++ src/org/codehaus/janino/UnitCompiler.java	(patch constant-pool level 1)
@@ -6915,7 +6915,7 @@
 
     }
     private void writeLDC(Locatable l, short index) {
-        if (index <= 255) {
+        if (0 <= index && index <= 255) {
             this.writeOpcode(l, Opcode.LDC);
             this.writeByte((byte) index);
         } else {
=== src/org/codehaus/janino/util/ClassFile.java
==================================================================
--- src/org/codehaus/janino/util/ClassFile.java	(revision 72828)
+++ src/org/codehaus/janino/util/ClassFile.java	(patch constant-pool level 1)
@@ -426,7 +426,7 @@
     }
 
     public ConstantPoolInfo getConstantPoolInfo(short index) {
-        return (ConstantPoolInfo) this.constantPool.get(index);
+        return (ConstantPoolInfo) this.constantPool.get(0xffff & index);
     }
 
     /**
@@ -480,7 +480,7 @@
             ConstantPoolInfo cpi = ConstantPoolInfo.loadConstantPoolInfo(dis);
             this.constantPool.add(cpi);
             this.constantPoolMap.put(cpi, new Short(i));
-            if (cpi instanceof ConstantLongInfo || cpi instanceof ConstantDoubleInfo) {
+            if (cpi.isWide()) {
                 this.constantPool.add(null);
                 ++i;
             }

==== BEGIN SVK PATCH BLOCK ====
Version: svk v2.0.2 (linux)

eJyFVs9v3EQU9qWXiFaocOMyhG3ZiG52fvjnhqxSRY1UKkpRWypUqmg8ft44cTwrezabqI7UTSRE
pRKknkBcEOLAEf4BxIEr5x64cOn/wbM3u03oprEsj2fmzfd98+bNm1nL7y2tsLLbpWWD0fLuF7c6
nTvSqI0rWGu4JUSJ0XnDKVPYgbQhylT3GnaZyW3AXiPzHphul+Fgfzz4Rj1gAmJXGKE0OisaQQ22
bnKABi8ZW2G8XBHVu95gQVkA9tV46znsJEWiM6T1bN8XaNJgJUME3YdsPdfaVF2COv4Kr0bTUqW6
gPWKoIJ0KnveYPZ4QJTkoFDVHo4yUJiiRpsg1MbODGNRFrk6ZVpLdY7JXhmiCeoYA4kZQMGYtT2G
4+fD8SmcPZl0nKTothNI7Rs7Mh2ga/N7VdPiptyRNf+56GKMXvfKfj/dWzewayJIjawZBS89Pwqk
DW7MqaIAth0FjmfLKAg9FUAADUfYuN63LWv0qzP67foHh2AdvW89t769e3T5d2v07OGPD54cvGMd
vD36efUPa7Q/+uXLJ59XNIufQlHIHqzpfFuibBlFlf5mBkNyekbN+Wqugm+tYvQYmZk7WqcEn4tz
1bc/CNNEkR2dRGSGYXOBmI1cDwtyY1dB32A4kcfjkdVz1+RJ1iP9HOR2mAJZftVVPfN9qbZQZY28
9FU2Tz76v8GYXqWyKEillzxGs6XXGTRKmkmxf9J61l+SmYePagUFWSaVg8Ytjwm7Rhil+BGU0/kQ
pwsyI+s78wuLuKCQRc2bmYEe5ItGj3U0NxemffOIFsu0gGpin4WbGBhEY5taRI6btQsVNBeWTuvF
eUJubmtze5CmTX2ye3/8iwW+K/bJHVmH7XFQgVReEHBmK0oD15auryLF3JDzwI6k50+D3p2xh7xq
M7Z13qs367kx7kzBvBlgzJ2gtZWOYEMOipr2XFh3CuvPgOXiNdj2psySTNc6zkX3prkrOLXtbXYW
bvt+lphVvd1Hs3ySAvyTqQ0zLZ0l1T8TcmCS9BTKmXr9NyaSoF5zO+axiKgE4YSUxg4TwqPCCwQo
UA6mXVyLOpF8/VP1Xqh/jiuv6s/+PF1//u9x/eIl6/Cf2DqyDv56C38o+XgZd0kEu+TqVfLDE+sF
fdG9cOkIS6tKAfskiYnOgOiZYVpLtoW0HRkKFjoQS8ocL/JCKT2X+ir0/Eluro6w06t05urXLm2v
VqliDS3H61QvzDkurmze4ONaAir2beFFLvO5cGzmRyDiCCJhh0p4KmKA5xcb+/jw5SeHL99797I1
+ua+9dT67kMsn1oHf18cfb9Md2N8yFWymBQPkggTwAwXTRgRm3Mv8gMaOsz1uQfAwKZcSEkh4FCf
msIPSpLjCc78laKfKBiCLCAlTZ0nPezgQSAWOoTEephCQUrCKfVb1GlxHzNbh7IOF6RFbUrnyPU0
1UOijhM8ZlU8CoyuGoxMMpIY2C5ICGYIkJGHzL11jcgsIoLfekSamOs02coQQBZkkBVJL4OIFBs6
NwtzZK7WKNyZGgVl7EyNdofxDvUnGteSXTJEz+VTnUWlcajzLWzJq0VN9yZ8eKuZzef4s/kCTPkd
2+9Q9ySfJIUZ9PEI3E6QcQtQgNkgxzMM9/DwQMIGE+VEUqtyXbfLMYD5+MZ2r750dTqYSnYgL2R6
xS3xiteXZgOvQHgXw8pgkETV7aMNWa9tNpI8avVlbvYmAW7yQbZVRTP3ud8QLoa1F/sxV60AyxYV
jLakCsKWiqXylWKSx85/uA9Rqw==
==== END SVK PATCH BLOCK ====

