vm: readable feps for more types

Joe Groff 2011-11-06 20:26:10 -08:00
parent dadc8a3baa
commit 04a3c88227
2 changed files with 59 additions and 1 deletions

View File

@ -54,6 +54,46 @@ void factor_vm::print_array(array *array, cell nesting)
std::cout << "..."; std::cout << "...";
} }
void factor_vm::print_alien(alien *alien, cell nesting)
{
if (to_boolean(alien->expired))
std::cout << "#<expired alien>";
else if (to_boolean(alien->base))
{
std::cout << "#<displaced alien " << alien->displacement << "+";
print_nested_obj(alien->base, nesting);
std::cout << ">";
}
else
{
std::cout << "#<alien " << (void*)alien->address << ">";
}
}
void factor_vm::print_byte_array(byte_array *array, cell nesting)
{
cell length = array->capacity;
cell i;
bool trimmed;
unsigned char *data = array->data<unsigned char>();
if(length > 16 && !full_output)
{
trimmed = true;
length = 16;
}
else
trimmed = false;
for(i = 0; i < length; i++)
{
std::cout << " " << (unsigned)data[i];
}
if(trimmed)
std::cout << "...";
}
void factor_vm::print_tuple(tuple *tuple, cell nesting) void factor_vm::print_tuple(tuple *tuple, cell nesting)
{ {
tuple_layout *layout = untag<tuple_layout>(tuple->layout); tuple_layout *layout = untag<tuple_layout>(tuple->layout);
@ -96,6 +136,9 @@ void factor_vm::print_nested_obj(cell obj, fixnum nesting)
case FIXNUM_TYPE: case FIXNUM_TYPE:
std::cout << untag_fixnum(obj); std::cout << untag_fixnum(obj);
break; break;
case FLOAT_TYPE:
std::cout << untag_float(obj);
break;
case WORD_TYPE: case WORD_TYPE:
print_word(untag<word>(obj),nesting - 1); print_word(untag<word>(obj),nesting - 1);
break; break;
@ -110,6 +153,16 @@ void factor_vm::print_nested_obj(cell obj, fixnum nesting)
print_tuple(untag<tuple>(obj),nesting - 1); print_tuple(untag<tuple>(obj),nesting - 1);
std::cout << " }"; std::cout << " }";
break; break;
case WRAPPER_TYPE:
std::cout << "W{ ";
print_nested_obj(untag<wrapper>(obj)->object,nesting - 1);
std::cout << " }";
break;
case BYTE_ARRAY_TYPE:
std::cout << "B{";
print_byte_array(untag<byte_array>(obj),nesting - 1);
std::cout << " }";
break;
case ARRAY_TYPE: case ARRAY_TYPE:
std::cout << "{"; std::cout << "{";
print_array(untag<array>(obj),nesting - 1); print_array(untag<array>(obj),nesting - 1);
@ -121,8 +174,11 @@ void factor_vm::print_nested_obj(cell obj, fixnum nesting)
print_array(untag<array>(quot->array),nesting - 1); print_array(untag<array>(quot->array),nesting - 1);
std::cout << " ]"; std::cout << " ]";
break; break;
case ALIEN_TYPE:
print_alien(untag<alien>(obj), nesting - 1);
break;
default: default:
std::cout << "#<" << type_name(tagged<object>(obj).type()) << " "; std::cout << "#<" << type_name(tagged<object>(obj).type()) << " @ ";
std::cout << (void*)obj << ">"; std::cout << (void*)obj << ">";
break; break;
} }

View File

@ -394,7 +394,9 @@ struct factor_vm
void print_word(word* word, cell nesting); void print_word(word* word, cell nesting);
void print_factor_string(string* str); void print_factor_string(string* str);
void print_array(array* array, cell nesting); void print_array(array* array, cell nesting);
void print_byte_array(byte_array *array, cell nesting);
void print_tuple(tuple *tuple, cell nesting); void print_tuple(tuple *tuple, cell nesting);
void print_alien(alien *alien, cell nesting);
void print_nested_obj(cell obj, fixnum nesting); void print_nested_obj(cell obj, fixnum nesting);
void print_obj(cell obj); void print_obj(cell obj);
void print_objects(cell *start, cell *end); void print_objects(cell *start, cell *end);