Example #1
0
   //
   // Thread::saveState
   //
   void Thread::saveState(Serial &out) const
   {
      out.writeSign(Signature::Thread);

      env->writeModuleName(out, module->name);
      WriteVLN(out, codePtr - module->codeV.data());
      WriteVLN(out, scopeGbl->id);
      WriteVLN(out, scopeHub->id);
      WriteVLN(out, scopeMap->id);
      env->writeScript(out, script);
      WriteVLN(out, delay);
      WriteVLN(out, result);

      WriteVLN(out, callStk.size());
      for(auto &call : callStk)
         writeCallFrame(out, call);

      WriteVLN(out, dataStk.size());
      for(auto &data : dataStk)
         WriteVLN(out, data);

      WriteVLN(out, localArr.sizeFull());
      WriteVLN(out, localArr.size());
      for(auto itr = localArr.beginFull(), end = localArr.end(); itr != end; ++itr)
         itr->saveState(out);

      WriteVLN(out, localReg.sizeFull());
      WriteVLN(out, localReg.size());
      for(auto itr = localReg.beginFull(), end = localReg.end(); itr != end; ++itr)
         WriteVLN(out, *itr);

      WriteVLN(out, printBuf.sizeFull());
      WriteVLN(out, printBuf.size());
      out.out->write(printBuf.dataFull(), printBuf.sizeFull());

      WriteVLN<int>(out, state.state);
      WriteVLN(out, state.data);
      WriteVLN(out, state.type);

      out.writeSign(~Signature::Thread);
   }