コード例 #1
0
ファイル: ERT.java プロジェクト: trifork/erjang
  /**
   * @param add
   * @return
   */
  public static EInteger box(BigInteger res) {

    if (res.compareTo(INT_MIN_AS_BIG) < 0) return new EBig(res);

    if (res.compareTo(INT_MAX_AS_BIG) > 0) return new EBig(res);

    return ESmall.make(res.intValue());
  }
コード例 #2
0
ファイル: ERT.java プロジェクト: trifork/erjang
  public static EFun resolve_fun(EObject mod, EObject fun, int arity) {
    EAtom f = fun.testAtom();
    if (f == null) {
      throw ERT.badarg(mod, fun, ESmall.make(arity));
    }

    JavaObject jo;
    if ((jo = mod.testJavaObject()) != null) {
      return jo.resolve_fun(f, arity);
    }

    EAtom m = mod.testAtom();

    if (m == null) {
      final ETuple tup;
      EAtom pmod;
      if ((tup = mod.testTuple()) != null
          && tup.arity() > 0
          && (pmod = tup.elm(1).testAtom()) != null) {

        final EFun pfun = EModuleManager.resolve(new FunID(pmod, f, arity + 1));

        return EFunCG.get_fun_with_handler(
            pmod.getName(),
            f.getName(),
            arity,
            new EFunHandler() {
              @Override
              public EObject invoke(EProc proc, EObject[] args) throws Pausable {
                EObject[] real_args = new EObject[args.length + 1];
                System.arraycopy(args, 0, real_args, 0, args.length);
                real_args[args.length] = tup;
                return pfun.invoke(proc, real_args);
              }
            },
            ERT.class.getClassLoader());
      }

      throw ERT.badarg(mod, fun, ESmall.make(arity));
    }
    EFun efun = EModuleManager.resolve(new FunID(m, f, arity));

    return efun;
  }
コード例 #3
0
ファイル: ERT.java プロジェクト: trifork/erjang
  public static EInteger box(long longVal) {

    int intVal = (int) longVal;

    if (intVal == longVal) {
      return ESmall.make(intVal);
    } else {
      return new EBig(longVal);
    }
  }
コード例 #4
0
ファイル: ERT.java プロジェクト: trifork/erjang
  /**
   * Boxes a <code>long</code> value to an EInteger (EBig or ESmall)
   *
   * @param longValue
   * @return
   */
  public static EInteger box2(long longVal) {

    // very simple: see if the longValue can be converted
    // to an int and back again without loosing it's value

    int intVal = (int) longVal;
    if (longVal == (long) intVal) {
      return ESmall.make(intVal);
    } else {
      return new EBig(longVal);
    }
  }
コード例 #5
0
ファイル: ERT.java プロジェクト: trifork/erjang
 public static ESmall box(int v) {
   return ESmall.make(v);
 }