예제 #1
0
파일: ProxyMaker.java 프로젝트: int3/jython
  public void getArgs(Code code, Class<?>[] parameters) throws Exception {
    if (parameters.length == 0) {
      code.getstatic("org/python/core/Py", "EmptyObjects", $pyObjArr);
    } else {
      code.iconst(parameters.length);
      code.anewarray("java/lang/Object");

      int array = code.getLocal("[org/python/core/PyObject");
      code.astore(array);

      int local_index;
      int i;
      for (i = 0, local_index = 1; i < parameters.length; i++) {
        code.aload(array);
        code.iconst(i);

        switch (getType(parameters[i])) {
          case tBoolean:
          case tByte:
          case tShort:
          case tInteger:
            code.iload(local_index);
            local_index += 1;
            code.invokestatic("org/python/core/Py", "newInteger", "(I)" + $pyInteger);
            break;
          case tLong:
            code.lload(local_index);
            local_index += 2;
            code.invokestatic("org/python/core/Py", "newInteger", "(J)" + $pyObj);
            break;
          case tFloat:
            code.fload(local_index);
            local_index += 1;
            code.invokestatic("org/python/core/Py", "newFloat", "(F)" + $pyFloat);
            break;
          case tDouble:
            code.dload(local_index);
            local_index += 2;
            code.invokestatic("org/python/core/Py", "newFloat", "(D)" + $pyFloat);
            break;
          case tCharacter:
            code.iload(local_index);
            local_index += 1;
            code.invokestatic("org/python/core/Py", "newString", "(C)" + $pyStr);
            break;
          default:
            code.aload(local_index);
            local_index += 1;
            break;
        }
        code.aastore();
      }
      code.aload(array);
    }
  }
예제 #2
0
파일: ProxyMaker.java 프로젝트: int3/jython
  public void callSuper(
      Code code, String name, String superclass, Class<?>[] parameters, Class<?> ret, String sig)
      throws Exception {

    code.aload(0);
    int local_index;
    int i;
    for (i = 0, local_index = 1; i < parameters.length; i++) {
      switch (getType(parameters[i])) {
        case tCharacter:
        case tBoolean:
        case tByte:
        case tShort:
        case tInteger:
          code.iload(local_index);
          local_index += 1;
          break;
        case tLong:
          code.lload(local_index);
          local_index += 2;
          break;
        case tFloat:
          code.fload(local_index);
          local_index += 1;
          break;
        case tDouble:
          code.dload(local_index);
          local_index += 2;
          break;
        default:
          code.aload(local_index);
          local_index += 1;
          break;
      }
    }
    code.invokespecial(superclass, name, sig);

    doReturn(code, ret);
  }