Example #1
0
void MiniPS::dump(GenBuffer::Writable& out_, VALUE v, unsigned indent) {
  if (v==Qnull) out_ << "null";
  else if (v==Qtrue) out_ << "true";
  else if (v==Qfalse) out_ << "false";
  else if ((v&1)!=0) out_ << (v/2); /* prints a signed integer */
  else {
    Value *vp=RVALUE(v);
    unsigned ty=vp->getType();
    if (ty==T_STRING) {
      SimBuffer::Static s((char*)vp->begin_(), vp->getLength());
      SimBuffer::B b;
      b.appendDumpPS(s, true);
      out_ << b;
    } else if (ty==T_SNAME || ty==T_ENAME) {
      out_.vi_write((char*)vp->begin_(), vp->getLength());
    } else if (ty==T_REAL) {
      RREAL(v)->dump(out_);
    } else if (ty==T_ARRAY) {
      if (!vp->isDumping()) { /* Imp: thread-safe locking */
        RARRAY(v)->dump(out_, indent);
      } else out_ << "[...]";
    } else if (ty==T_DICT) {
      if (!vp->isDumping()) { /* Imp: thread-safe locking */
        RDICT(v)->dump(out_, indent);
      } else out_ << "<<...>>";
    } else assert(0 && "unknown MiniPS type");
  }
}
Example #2
0
UniqueRange AllocateVM(size_t size, vm::PageType pageType, int prot)
{
	const UniqueRange::pointer p = vm::Allocate(size, pageType, prot);

	static volatile IdxDeleter idxDeleter;
	if(idxDeleter == 0)	// (optional optimization)
		RegisterUniqueRangeDeleter(vm::Free, &idxDeleter);

	return RVALUE(UniqueRange(p, size, idxDeleter));
}
Example #3
0
void MiniPS::delete0(VALUE v) {
  if (isDirect(v)) return;
  Value *vp=RVALUE(v);
  unsigned ty=vp->getType();
  if (ty==T_DICT) RDICT(v)->free();
  else if (ty==T_ARRAY) RARRAY(v)->free();
  else if (ty==T_VOID) ;
  else if (vp->hasPtr()) delete [] vp->begin_();
  delete vp; /* BUGFIX at Sat Sep  7 12:50:13 CEST 2002 */
}
Example #4
0
UniqueRange Allocate(size_t size, size_t alignment)
{
	ENSURE(is_pow2(alignment));
	if(alignment <= (size_t)idxDeleterBits)
		alignment = idxDeleterBits+1;

	const size_t alignedSize = round_up(size, alignment);
	const UniqueRange::pointer p = rtl_AllocateAligned(alignedSize, alignment);
	return RVALUE(UniqueRange(p, size, idxDeleterAligned));
}
Example #5
0
UniqueRange AllocateAligned(size_t size, size_t alignment)
{
	ENSURE(is_pow2(alignment));
	alignment = std::max(alignment, allocationAlignment);

	const size_t alignedSize = round_up(size, alignment);
	const UniqueRange::pointer p = rtl_AllocateAligned(alignedSize, alignment);

	static volatile IdxDeleter idxDeleterAligned;
	if(idxDeleterAligned == 0)	// (optional optimization)
		RegisterUniqueRangeDeleter(FreeAligned, &idxDeleterAligned);

	return RVALUE(UniqueRange(p, size, idxDeleterAligned));
}
Example #6
0
unsigned MiniPS::getType(VALUE v) {
  return (v&1)!=0 ? T_INTEGER
       : v+0U>Qmax_+0U ? RVALUE(v)->getType()
       : v==Qnull ? T_NULL+0/*avoid gcc-3.0 ld bug*/
       : T_BOOLEAN;
}