コード例 #1
0
ファイル: ControlUnit.java プロジェクト: adum/bitbath
 public JavaArray createMultiArray(int dims, int[] dimSizes, Descriptor tp)
     throws BadConversionE, OperandStackE, JavaException, LinkE, BadDescriptorE {
   String s = tp.getStringDescriptor();
   s = s.substring(tp.getNumDimensions() - dims + 1, s.length());
   Descriptor compClassDesc = new Descriptor(s);
   Descriptor arrayClassDesc = new Descriptor("[" + s);
   InternalClass componentClass = findClass(compClassDesc);
   InternalClass arrayClass = findClass(arrayClassDesc);
   int ds = dims - 1;
   JavaArray ja = new JavaArray(arrayClass, componentClass, dimSizes[ds]);
   if (dims == 1) {
     // basic array
     return ja;
   } else {
     // more dims to go
     // fill in all values of this array from sub-arrays
     for (int i = 0; i < dimSizes[ds]; i++) {
       JavaArray jasub = createMultiArray(dims - 1, dimSizes, tp);
       try {
         ja.store(i, new JavaNonnullReferenceValue(jasub));
       } catch (JavaArrayOutOfBoundsE e) {
         e.printStackTrace();
         throw new RuntimeException("illegal array size", e);
       }
     }
   }
   return ja;
 }