| Index: src/objects.cc
|
| ===================================================================
|
| --- src/objects.cc (revision 6074)
|
| +++ src/objects.cc (working copy)
|
| @@ -553,11 +553,11 @@
|
| }
|
|
|
|
|
| -void Object::ShortPrint() {
|
| +void Object::ShortPrint(FILE* out) {
|
| HeapStringAllocator allocator;
|
| StringStream accumulator(&allocator);
|
| ShortPrint(&accumulator);
|
| - accumulator.OutputToStdOut();
|
| + accumulator.OutputToFile(out);
|
| }
|
|
|
|
|
| @@ -572,8 +572,8 @@
|
| }
|
|
|
|
|
| -void Smi::SmiPrint() {
|
| - PrintF("%d", value());
|
| +void Smi::SmiPrint(FILE* out) {
|
| + PrintF(out, "%d", value());
|
| }
|
|
|
|
|
| @@ -587,8 +587,8 @@
|
| }
|
|
|
|
|
| -void Failure::FailurePrint() {
|
| - PrintF("Failure(%p)", reinterpret_cast<void*>(value()));
|
| +void Failure::FailurePrint(FILE* out) {
|
| + PrintF(out, "Failure(%p)", reinterpret_cast<void*>(value()));
|
| }
|
|
|
|
|
| @@ -1141,8 +1141,8 @@
|
| }
|
|
|
|
|
| -void HeapNumber::HeapNumberPrint() {
|
| - PrintF("%.16g", Number());
|
| +void HeapNumber::HeapNumberPrint(FILE* out) {
|
| + PrintF(out, "%.16g", Number());
|
| }
|
|
|
|
|
| @@ -5467,9 +5467,9 @@
|
| }
|
|
|
|
|
| -void JSFunction::PrintName() {
|
| +void JSFunction::PrintName(FILE* out) {
|
| SmartPointer<char> name = shared()->DebugName()->ToCString();
|
| - PrintF("%s", *name);
|
| + PrintF(out, "%s", *name);
|
| }
|
|
|
|
|
| @@ -5999,18 +5999,18 @@
|
|
|
| #ifdef ENABLE_DISASSEMBLER
|
|
|
| -#ifdef DEBUG
|
| +#ifdef OBJECT_PRINT
|
|
|
| -void DeoptimizationInputData::DeoptimizationInputDataPrint() {
|
| +void DeoptimizationInputData::DeoptimizationInputDataPrint(FILE* out) {
|
| disasm::NameConverter converter;
|
| int deopt_count = DeoptCount();
|
| - PrintF("Deoptimization Input Data (deopt points = %d)\n", deopt_count);
|
| + PrintF(out, "Deoptimization Input Data (deopt points = %d)\n", deopt_count);
|
| if (0 == deopt_count) return;
|
|
|
| - PrintF("%6s %6s %6s %12s\n", "index", "ast id", "argc", "commands");
|
| + PrintF(out, "%6s %6s %6s %12s\n", "index", "ast id", "argc", "commands");
|
| for (int i = 0; i < deopt_count; i++) {
|
| int command_count = 0;
|
| - PrintF("%6d %6d %6d",
|
| + PrintF(out, "%6d %6d %6d",
|
| i, AstId(i)->value(), ArgumentsStackHeight(i)->value());
|
| int translation_index = TranslationIndex(i)->value();
|
| TranslationIterator iterator(TranslationByteArray(), translation_index);
|
| @@ -6019,7 +6019,8 @@
|
| ASSERT(Translation::BEGIN == opcode);
|
| int frame_count = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF(" %s {count=%d}\n", Translation::StringFor(opcode), frame_count);
|
| + PrintF(out, " %s {count=%d}\n", Translation::StringFor(opcode),
|
| + frame_count);
|
| }
|
|
|
| for (int i = 0; i < frame_count; ++i) {
|
| @@ -6031,10 +6032,10 @@
|
| JSFunction::cast(LiteralArray()->get(function_id));
|
| unsigned height = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("%24s %s {ast_id=%d, function=",
|
| + PrintF(out, "%24s %s {ast_id=%d, function=",
|
| "", Translation::StringFor(opcode), ast_id);
|
| - function->PrintName();
|
| - PrintF(", height=%u}\n", height);
|
| + function->PrintName(out);
|
| + PrintF(out, ", height=%u}\n", height);
|
| }
|
|
|
| // Size of translation is height plus all incoming arguments including
|
| @@ -6044,13 +6045,13 @@
|
| for (int j = 0; j < size; ++j) {
|
| opcode = static_cast<Translation::Opcode>(iterator.Next());
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("%24s %s ", "", Translation::StringFor(opcode));
|
| + PrintF(out, "%24s %s ", "", Translation::StringFor(opcode));
|
| }
|
|
|
| if (opcode == Translation::DUPLICATE) {
|
| opcode = static_cast<Translation::Opcode>(iterator.Next());
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("%s ", Translation::StringFor(opcode));
|
| + PrintF(out, "%s ", Translation::StringFor(opcode));
|
| }
|
| --j; // Two commands share the same frame index.
|
| }
|
| @@ -6065,7 +6066,7 @@
|
| case Translation::REGISTER: {
|
| int reg_code = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{input=%s}", converter.NameOfCPURegister(reg_code));
|
| + PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
|
| }
|
| break;
|
| }
|
| @@ -6073,7 +6074,7 @@
|
| case Translation::INT32_REGISTER: {
|
| int reg_code = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{input=%s}", converter.NameOfCPURegister(reg_code));
|
| + PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
|
| }
|
| break;
|
| }
|
| @@ -6081,7 +6082,7 @@
|
| case Translation::DOUBLE_REGISTER: {
|
| int reg_code = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{input=%s}",
|
| + PrintF(out, "{input=%s}",
|
| DoubleRegister::AllocationIndexToString(reg_code));
|
| }
|
| break;
|
| @@ -6090,7 +6091,7 @@
|
| case Translation::STACK_SLOT: {
|
| int input_slot_index = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{input=%d}", input_slot_index);
|
| + PrintF(out, "{input=%d}", input_slot_index);
|
| }
|
| break;
|
| }
|
| @@ -6098,7 +6099,7 @@
|
| case Translation::INT32_STACK_SLOT: {
|
| int input_slot_index = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{input=%d}", input_slot_index);
|
| + PrintF(out, "{input=%d}", input_slot_index);
|
| }
|
| break;
|
| }
|
| @@ -6106,7 +6107,7 @@
|
| case Translation::DOUBLE_STACK_SLOT: {
|
| int input_slot_index = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{input=%d}", input_slot_index);
|
| + PrintF(out, "{input=%d}", input_slot_index);
|
| }
|
| break;
|
| }
|
| @@ -6114,7 +6115,7 @@
|
| case Translation::LITERAL: {
|
| unsigned literal_index = iterator.Next();
|
| if (FLAG_print_code_verbose) {
|
| - PrintF("{literal_id=%u}", literal_index);
|
| + PrintF(out, "{literal_id=%u}", literal_index);
|
| }
|
| break;
|
| }
|
| @@ -6122,16 +6123,16 @@
|
| case Translation::ARGUMENTS_OBJECT:
|
| break;
|
| }
|
| - if (FLAG_print_code_verbose) PrintF("\n");
|
| + if (FLAG_print_code_verbose) PrintF(out, "\n");
|
| }
|
| }
|
| - if (!FLAG_print_code_verbose) PrintF(" %12d\n", command_count);
|
| + if (!FLAG_print_code_verbose) PrintF(out, " %12d\n", command_count);
|
| }
|
| }
|
|
|
|
|
| -void DeoptimizationOutputData::DeoptimizationOutputDataPrint() {
|
| - PrintF("Deoptimization Output Data (deopt points = %d)\n",
|
| +void DeoptimizationOutputData::DeoptimizationOutputDataPrint(FILE* out) {
|
| + PrintF(out, "Deoptimization Output Data (deopt points = %d)\n",
|
| this->DeoptPoints());
|
| if (this->DeoptPoints() == 0) return;
|
|
|
| @@ -6202,56 +6203,56 @@
|
| }
|
|
|
|
|
| -void Code::Disassemble(const char* name) {
|
| - PrintF("kind = %s\n", Kind2String(kind()));
|
| +void Code::Disassemble(const char* name, FILE* out) {
|
| + PrintF(out, "kind = %s\n", Kind2String(kind()));
|
| if (is_inline_cache_stub()) {
|
| - PrintF("ic_state = %s\n", ICState2String(ic_state()));
|
| - PrintF("ic_in_loop = %d\n", ic_in_loop() == IN_LOOP);
|
| + PrintF(out, "ic_state = %s\n", ICState2String(ic_state()));
|
| + PrintF(out, "ic_in_loop = %d\n", ic_in_loop() == IN_LOOP);
|
| if (ic_state() == MONOMORPHIC) {
|
| - PrintF("type = %s\n", PropertyType2String(type()));
|
| + PrintF(out, "type = %s\n", PropertyType2String(type()));
|
| }
|
| }
|
| if ((name != NULL) && (name[0] != '\0')) {
|
| - PrintF("name = %s\n", name);
|
| + PrintF(out, "name = %s\n", name);
|
| }
|
| if (kind() == OPTIMIZED_FUNCTION) {
|
| - PrintF("stack_slots = %d\n", stack_slots());
|
| + PrintF(out, "stack_slots = %d\n", stack_slots());
|
| }
|
|
|
| - PrintF("Instructions (size = %d)\n", instruction_size());
|
| - Disassembler::Decode(NULL, this);
|
| - PrintF("\n");
|
| + PrintF(out, "Instructions (size = %d)\n", instruction_size());
|
| + Disassembler::Decode(out, this);
|
| + PrintF(out, "\n");
|
|
|
| #ifdef DEBUG
|
| if (kind() == FUNCTION) {
|
| DeoptimizationOutputData* data =
|
| DeoptimizationOutputData::cast(this->deoptimization_data());
|
| - data->DeoptimizationOutputDataPrint();
|
| + data->DeoptimizationOutputDataPrint(out);
|
| } else if (kind() == OPTIMIZED_FUNCTION) {
|
| DeoptimizationInputData* data =
|
| DeoptimizationInputData::cast(this->deoptimization_data());
|
| - data->DeoptimizationInputDataPrint();
|
| + data->DeoptimizationInputDataPrint(out);
|
| }
|
| PrintF("\n");
|
| #endif
|
|
|
| if (kind() == OPTIMIZED_FUNCTION) {
|
| SafepointTable table(this);
|
| - PrintF("Safepoints (size = %u)\n", table.size());
|
| + PrintF(out, "Safepoints (size = %u)\n", table.size());
|
| for (unsigned i = 0; i < table.length(); i++) {
|
| unsigned pc_offset = table.GetPcOffset(i);
|
| - PrintF("%p %4d ", (instruction_start() + pc_offset), pc_offset);
|
| + PrintF(out, "%p %4d ", (instruction_start() + pc_offset), pc_offset);
|
| table.PrintEntry(i);
|
| - PrintF(" (sp -> fp)");
|
| + PrintF(out, " (sp -> fp)");
|
| int deoptimization_index = table.GetDeoptimizationIndex(i);
|
| if (deoptimization_index != Safepoint::kNoDeoptimizationIndex) {
|
| - PrintF(" %6d", deoptimization_index);
|
| + PrintF(out, " %6d", deoptimization_index);
|
| } else {
|
| - PrintF(" <none>");
|
| + PrintF(out, " <none>");
|
| }
|
| - PrintF("\n");
|
| + PrintF(out, "\n");
|
| }
|
| - PrintF("\n");
|
| + PrintF(out, "\n");
|
| } else if (kind() == FUNCTION) {
|
| unsigned offset = stack_check_table_start();
|
| // If there is no stack check table, the "table start" will at or after
|
| @@ -6260,19 +6261,19 @@
|
| unsigned* address =
|
| reinterpret_cast<unsigned*>(instruction_start() + offset);
|
| unsigned length = address[0];
|
| - PrintF("Stack checks (size = %u)\n", length);
|
| - PrintF("ast_id pc_offset\n");
|
| + PrintF(out, "Stack checks (size = %u)\n", length);
|
| + PrintF(out, "ast_id pc_offset\n");
|
| for (unsigned i = 0; i < length; ++i) {
|
| unsigned index = (2 * i) + 1;
|
| - PrintF("%6u %9u\n", address[index], address[index + 1]);
|
| + PrintF(out, "%6u %9u\n", address[index], address[index + 1]);
|
| }
|
| - PrintF("\n");
|
| + PrintF(out, "\n");
|
| }
|
| }
|
|
|
| PrintF("RelocInfo (size = %d)\n", relocation_size());
|
| - for (RelocIterator it(this); !it.done(); it.next()) it.rinfo()->Print();
|
| - PrintF("\n");
|
| + for (RelocIterator it(this); !it.done(); it.next()) it.rinfo()->Print(out);
|
| + PrintF(out, "\n");
|
| }
|
| #endif // ENABLE_DISASSEMBLER
|
|
|
| @@ -7421,22 +7422,22 @@
|
| // class. This requires us to have the template functions put
|
| // together, so even though this function belongs in objects-debug.cc,
|
| // we keep it here instead to satisfy certain compilers.
|
| -#ifdef DEBUG
|
| +#ifdef OBJECT_PRINT
|
| template<typename Shape, typename Key>
|
| -void Dictionary<Shape, Key>::Print() {
|
| +void Dictionary<Shape, Key>::Print(FILE* out) {
|
| int capacity = HashTable<Shape, Key>::Capacity();
|
| for (int i = 0; i < capacity; i++) {
|
| Object* k = HashTable<Shape, Key>::KeyAt(i);
|
| if (HashTable<Shape, Key>::IsKey(k)) {
|
| - PrintF(" ");
|
| + PrintF(out, " ");
|
| if (k->IsString()) {
|
| - String::cast(k)->StringPrint();
|
| + String::cast(k)->StringPrint(out);
|
| } else {
|
| - k->ShortPrint();
|
| + k->ShortPrint(out);
|
| }
|
| - PrintF(": ");
|
| - ValueAt(i)->ShortPrint();
|
| - PrintF("\n");
|
| + PrintF(out, ": ");
|
| + ValueAt(i)->ShortPrint(out);
|
| + PrintF(out, "\n");
|
| }
|
| }
|
| }
|
|
|