Exemple #1
0
void get_print_string(oop_t x, char* s, int size) {
  // toto unimplemented incomplete -- dmu 1/06
  switch (tag(x)) {
    default: fatal("???");
    case float_tag:  sprintf(s, "a float 0x%x", x);                return;
    case   smi_tag:  sprintf(s, "a smi %d", value_of_smiOop(x));   return;
    case  mark_tag:  sprintf(s, "a markOop 0x%x", x);              return;
    case   mem_tag:  break;
  }
  if (size < length_of_C_string(s))  fatal("string overflow");
  size -= length_of_C_string(s);
  if (is_byteVector(x)) {
    ByteVectorObj::from(x)->copy_to_C_string(s, size);
  }
  else if (is_method(x)) {
   printf_and_flush("object vector printing not implemented\n");
//  }else if (is_blockMethod(x)) {
//   printf_and_flush("block method printing not implemented\n");
  } else if (is_block(x)) {
   printf_and_flush("block printing not implemented\n");
  } else if (is_objVector(x)) {
    smi id =  Object_Table::index_for_oop(x);
    ObjVectorObj* x_ov = ObjVectorObj::from(x);
    printf_and_flush("object vector [ID: %d, size: %d], contents:\n", id , x_ov->indexableSize());
    //x_ov->print();
    printf_and_flush("done contents [ID: %d].\n", id);
  } else {
    printf_and_flush("printing not implemented for ??? object type\n");
  }
   
  
  if (size < length_of_C_string(s))  fatal("string overflow");
}
Exemple #2
0
//aaa todo check if can factor this and is_equal_to_C_string
bool ByteVectorObj::ends_with_C_string(const char* cString, int size) {
  // passing in a size is just an optimization
  // size should not include null character
  if (size == -1)            size  = length_of_C_string(cString);
  else               assert( size == length_of_C_string(cString));
    
  if (size > indexableSize())  return false; //optimization
  
  for (const char *sp = bytes() + indexableSize(),
                  *cp = cString +          size;
             cString <= cp; )  {
    if ( *cp-- != *sp-- )
      return false;
  }
  return true;
}
Exemple #3
0
oop_t ByteVectorObj::clone_for_C_string(char* cString, ByteVectorObj** addrp, fint length) {
  fint n = (length == -1) ? length_of_C_string(cString)
                          : length;
  
  ByteVectorObj* addr;
  oop_t new_bv = clone_and_resize(n, 0, &addr, false);
  if (addrp) *addrp = addr;
  
  char *srcp = cString, *dstp = addr->bytes(), *endp = cString + n;
  while (srcp != endp)
    *dstp++ = *srcp++;
  
  return new_bv;
}