implemented AttrGen(DataInput)
authoradam <adam@megacz.com>
Fri, 3 Jun 2005 01:09:55 +0000 (01:09 +0000)
committeradam <adam@megacz.com>
Fri, 3 Jun 2005 01:09:55 +0000 (01:09 +0000)
darcs-hash:20050603010955-5007d-5507654ae2015576911f0b4f678b82b0e82d254a.gz

src/org/ibex/classgen/ClassGen.java

index 99436e2..47b67ea 100644 (file)
@@ -181,7 +181,7 @@ public class ClassGen implements CGConst {
         for(int j=0; j<numFields; j++) fields.add(new FieldGen(i));
         int numMethods = i.readShort();
         for(int j=0; j<numMethods; j++) methods.add(new MethodGen(i));
         for(int j=0; j<numFields; j++) fields.add(new FieldGen(i));
         int numMethods = i.readShort();
         for(int j=0; j<numMethods; j++) methods.add(new MethodGen(i));
-        attributes = new AttrGen(i);
+        attributes = new AttrGen(cp, i);
     }
     
     /** Thrown when class generation fails for a reason not under the control of the user
     }
     
     /** Thrown when class generation fails for a reason not under the control of the user
@@ -219,11 +219,25 @@ public class ClassGen implements CGConst {
         private final CPGen cp;
         private final Hashtable ht = new Hashtable();
         
         private final CPGen cp;
         private final Hashtable ht = new Hashtable();
         
-        public AttrGen(DataInput in) {
-            throw new Error("Brian is superlame");
-        }
-        public AttrGen(CPGen cp) {
-            this.cp = cp;
+        public AttrGen(CPGen cp) { this.cp = cp; }
+        public AttrGen(CPGen cp, DataInput in) throws IOException {
+            this(cp);
+            while(true) {
+                String name = null;
+                try {
+                    name = ((CPGen.Utf8Ent)cp.getByIndex(in.readShort())).s;
+                } catch (EOFException _) {
+                    return;
+                }
+                int length = in.readInt();
+                if (length==2) {   // FIXME might be wrong assumption
+                    ht.put(name, cp.getByIndex(in.readShort()));
+                } else {
+                    byte[] buf = new byte[length];
+                    in.readFully(buf);
+                    ht.put(name, buf);
+                }
+            }
         }
         
         public void add(String s, Object data) {
         }
         
         public void add(String s, Object data) {