public OtpErlangFun read_fun()
{
int tag = read1skip_version();
if (tag == OtpExternal.funTag)
{
int nFreeVars = read4BE();
OtpErlangPid pid = read_pid();
String module = read_atom();
long index = read_long();
long uniq = read_long();
OtpErlangObject[] freeVars = new OtpErlangObject[nFreeVars];
for (int i = 0; i < nFreeVars; ++i)
{
freeVars[i] = read_any();
}
return new OtpErlangFun(pid, module, index, uniq, freeVars);
}
else if (tag == OtpExternal.newFunTag)
{
read4BE();
int arity = read1();
byte[] md5 = new byte[16];
readN(md5);
int index = read4BE();
int nFreeVars = read4BE();
String module = read_atom();
long oldIndex = read_long();
long uniq = read_long();
OtpErlangPid pid = read_pid();
OtpErlangObject[] freeVars = new OtpErlangObject[nFreeVars];
for (int i = 0; i < nFreeVars; ++i)
{
freeVars[i] = read_any();
}
return new OtpErlangFun(pid, module, arity, md5, index, oldIndex, uniq, freeVars);
}
else
{
throw new OtpErlangDecodeException("Wrong tag encountered, expected fun, got " + tag);
}
}