コード例 #1
0
 LNumber loadNumber() throws IOException {
   if (luacNumberFormat == DumpState.NUMBER_FORMAT_INTS_ONLY) {
     return LInteger.valueOf(loadInt());
   } else {
     return longBitsToLuaNumber(loadInt64());
   }
 }
コード例 #2
0
  void loadConstants(LPrototype f) throws IOException {
    int n = loadInt();
    LValue[] values = new LValue[n];
    for (int i = 0; i < n; i++) {
      switch (is.readByte()) {
        case Lua.LUA_TNIL:
          values[i] = LNil.NIL;
          break;
        case Lua.LUA_TBOOLEAN:
          values[i] = (0 != is.readUnsignedByte() ? LBoolean.TRUE : LBoolean.FALSE);
          break;
        case Lua.LUA_TINT:
          values[i] = LInteger.valueOf(loadInt());
          break;
        case Lua.LUA_TNUMBER:
          values[i] = loadNumber();
          break;
        case Lua.LUA_TSTRING:
          values[i] = loadString();
          break;
        default:
          throw new IllegalStateException("bad constant");
      }
    }
    f.k = values;

    n = loadInt();
    LPrototype[] protos = new LPrototype[n];
    for (int i = 0; i < n; i++) protos[i] = loadFunction(f.source);
    f.p = protos;
  }
コード例 #3
0
  public static LNumber longBitsToLuaNumber(long bits) {
    if ((bits & ((1L << 63) - 1)) == 0L) {
      return LInteger.valueOf(0);
    }

    int e = (int) ((bits >> 52) & 0x7ffL) - 1023;

    if (e >= 0 && e < 31) {
      long f = bits & 0xFFFFFFFFFFFFFL;
      int shift = 52 - e;
      long intPrecMask = (1L << shift) - 1;
      if ((f & intPrecMask) == 0) {
        int intValue = (int) (f >> shift) | (1 << e);
        return LInteger.valueOf(((bits >> 63) != 0) ? -intValue : intValue);
      }
    }

    double value = Double.longBitsToDouble(bits);
    return LDouble.numberOf(value);
  }