code: private void object(Class<?> type, Object obj, int limit) {
          Class<?>[] types;
          Object[] objects;
          int i;
          CustomCompiler decl;
          int oldSize;
          int used;  // number of instructions actually generated
          int localLimit;
  
          int initialSize;
          int initialLimit;
  
          initialSize = dest.getSize();
          initialLimit = limit;
  
          decl = findDecl(obj.getClass());
          types = decl.getFieldTypes();
          objects = decl.getFieldObjects(obj);
          if (limit < MIN_INSTRUCTIONS + types.length * 1 + MIN_INSTRUCTIONS) {
              // I need the static type, not the dynamic type of the object
              pushMethod(type);
              object(type, obj, MAX_INSTRUCTIONS);
              popMethod();
              return;
          }
  
          oldSize = dest.getSize();
          decl.beginTranslation(obj, dest);
          used = dest.getSize() - oldSize;
          if (used > MIN_INSTRUCTIONS) {
              throw new IllegalStateException();
          }
          limit -= used;
          for (i = 0; i < types.length; i++) {
              localLimit = limit - (types.length - i - 1) - MIN_INSTRUCTIONS;
              oldSize = dest.getSize();
              run(types[i], objects[i], localLimit);
              used = dest.getSize() - oldSize;
              if (used > localLimit) {
                  throw new IllegalStateException("used:" + used + " localLimit:" + localLimit
                                          + " ele:" + objects[i]);
              }
              limit -= used;
          }
          if (limit < MIN_INSTRUCTIONS) {
              throw new IllegalStateException();
          }
          oldSize = dest.getSize();
          decl.endTranslation(obj, dest);
          if (dest.getSize() - oldSize > MIN_INSTRUCTIONS) {
              throw new IllegalStateException();
          }
  
          if (dest.getSize() - initialSize > initialLimit) {
              throw new IllegalStateException();
          }
      }
docs: -- non-null, non-String object