178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include <stdarg.h> 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/prettyprinter.h" 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/scopes.h" 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/platform.h" 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 1471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifdef DEBUG 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 186d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.orgPrettyPrinter::PrettyPrinter(Zone* zone) { 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_ = NULL; 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen size_ = 0; 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos_ = 0; 226d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.org InitializeAstVisitor(zone); 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenPrettyPrinter::~PrettyPrinter() { 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DeleteArray(output_); 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitBlock(Block* node) { 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!node->is_initializer_block()) Print("{ "); 3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(node->statements()); 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->statements()->length() > 0) Print(" "); 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!node->is_initializer_block()) Print("}"); 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitVariableDeclaration(VariableDeclaration* node) { 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("var "); 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->proxy()->name(), false); 42812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(";"); 43812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 44812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 45812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 46812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid PrettyPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) { 47812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("function "); 48812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), false); 49812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(" = "); 50812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintFunctionLiteral(node->fun()); 5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleDeclaration(ModuleDeclaration* node) { 5678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print("module "); 5778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteral(node->proxy()->name(), false); 5878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print(" = "); 5978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Visit(node->module()); 6078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print(";"); 6178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 6278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 6378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 64812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid PrettyPrinter::VisitImportDeclaration(ImportDeclaration* node) { 65812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("import "); 66812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), false); 67812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(" from "); 68812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Visit(node->module()); 69812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(";"); 70812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 71812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 72812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 73812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid PrettyPrinter::VisitExportDeclaration(ExportDeclaration* node) { 74812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("export "); 75812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), false); 76812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(";"); 77812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 78812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 79812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 8078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleLiteral(ModuleLiteral* node) { 8178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org VisitBlock(node->body()); 8278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 8378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleVariable(ModuleVariable* node) { 86f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org Visit(node->proxy()); 8778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 8878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModulePath(ModulePath* node) { 9178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Visit(node->module()); 9278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print("."); 9378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteral(node->name(), false); 9478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 9578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleUrl(ModuleUrl* node) { 9878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print("at "); 9978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteral(node->url(), true); 10078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 10178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 10278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 1038e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgvoid PrettyPrinter::VisitModuleStatement(ModuleStatement* node) { 1048e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Print("module "); 1058e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org PrintLiteral(node->proxy()->name(), false); 1068e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Print(" "); 1078e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Visit(node->body()); 1088e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org} 1098e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 1108e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitExpressionStatement(ExpressionStatement* node) { 11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 11443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitEmptyStatement(EmptyStatement* node) { 11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitIfStatement(IfStatement* node) { 12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("if ("); 12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->condition()); 12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->then_statement()); 12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->HasElseStatement()) { 12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" else "); 12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->else_statement()); 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 13143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 13243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitContinueStatement(ContinueStatement* node) { 13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("continue"); 1363ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org ZoneStringList* labels = node->target()->labels(); 13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (labels != NULL) { 13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(labels->length() > 0); // guaranteed to have at least one entry 14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(labels->at(0), false); // any label from the list is fine 14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 14243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 14343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 14443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitBreakStatement(BreakStatement* node) { 14743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("break"); 1483ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org ZoneStringList* labels = node->target()->labels(); 14943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (labels != NULL) { 15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(labels->length() > 0); // guaranteed to have at least one entry 15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(labels->at(0), false); // any label from the list is fine 15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 15443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitReturnStatement(ReturnStatement* node) { 15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("return "); 16043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1654acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.orgvoid PrettyPrinter::VisitWithStatement(WithStatement* node) { 1664acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Print("with ("); 16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 1694acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Visit(node->statement()); 17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitSwitchStatement(SwitchStatement* node) { 17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLabels(node->labels()); 17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("switch ("); 17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->tag()); 17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") { "); 17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ZoneList<CaseClause*>* cases = node->cases(); 17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < cases->length(); i++) 180a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(cases->at(i)); 18143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("}"); 18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 185a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid PrettyPrinter::VisitCaseClause(CaseClause* clause) { 186a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (clause->is_default()) { 187a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print("default"); 188a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } else { 189a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print("case "); 190a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(clause->label()); 191a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } 192a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print(": "); 193a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org PrintStatements(clause->statements()); 194a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (clause->statements()->length() > 0) 195a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print(" "); 196a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 197a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 198a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 1999d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitDoWhileStatement(DoWhileStatement* node) { 20043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLabels(node->labels()); 2019d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("do "); 2029d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->body()); 2039d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(" while ("); 2049d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->cond()); 2059d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(");"); 2069d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2099d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitWhileStatement(WhileStatement* node) { 2109d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintLabels(node->labels()); 2119d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("while ("); 2129d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->cond()); 2139d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(") "); 2149d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->body()); 2159d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 2169d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 2179d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 2189d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitForStatement(ForStatement* node) { 2199d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintLabels(node->labels()); 2209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("for ("); 2219d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (node->init() != NULL) { 2229d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->init()); 2239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(" "); 2249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } else { 2259d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("; "); 2269d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 2279d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (node->cond() != NULL) Visit(node->cond()); 2289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("; "); 2299d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (node->next() != NULL) { 2309d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->next()); // prints extra ';', unfortunately 2319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // to fix: should use Expression for next 23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 2339d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(") "); 2349d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->body()); 23543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitForInStatement(ForInStatement* node) { 23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLabels(node->labels()); 24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("for ("); 24143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->each()); 24243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" in "); 24343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->enumerable()); 24443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 24543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->body()); 24643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 24743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 24843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgvoid PrettyPrinter::VisitForOfStatement(ForOfStatement* node) { 2501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintLabels(node->labels()); 2511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Print("for ("); 2521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Visit(node->each()); 2531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Print(" of "); 2541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Visit(node->iterable()); 2551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Print(") "); 2561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Visit(node->body()); 2571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2609d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitTryCatchStatement(TryCatchStatement* node) { 26143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("try "); 26243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->try_block()); 26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" catch ("); 2646d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org const bool quote = false; 2654f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org PrintLiteral(node->variable()->name(), quote); 26643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->catch_block()); 26843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 26943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2719d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { 27243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("try "); 27343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->try_block()); 27443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" finally "); 27543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->finally_block()); 27643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 27743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitDebuggerStatement(DebuggerStatement* node) { 28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("debugger "); 28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 28243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitFunctionLiteral(FunctionLiteral* node) { 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 28643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintFunctionLiteral(node); 28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 28843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 28943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 291fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgvoid PrettyPrinter::VisitNativeFunctionLiteral(NativeFunctionLiteral* node) { 29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 293fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org PrintLiteral(node->name(), false); 29443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 29543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 29643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitConditional(Conditional* node) { 29943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->condition()); 30043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" ? "); 30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->then_expression()); 30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" : "); 30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->else_expression()); 30443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 30543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitLiteral(Literal* node) { 3081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteral(node->value(), true); 30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitRegExpLiteral(RegExpLiteral* node) { 31343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" RegExp("); 31443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->pattern(), false); 31543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(","); 31643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->flags(), false); 31743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 31843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 31943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitObjectLiteral(ObjectLiteral* node) { 32243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("{ "); 32343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->properties()->length(); i++) { 32443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(","); 32543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ObjectLiteral::Property* property = node->properties()->at(i); 32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 32743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(property->key()); 32843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(": "); 32943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(property->value()); 33043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 33143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" }"); 33243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 33343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitArrayLiteral(ArrayLiteral* node) { 33643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("[ "); 33743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->values()->length(); i++) { 33843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(","); 33943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->values()->at(i)); 34043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 34143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" ]"); 34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 34343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitVariableProxy(VariableProxy* node) { 34643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->name(), false); 34743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 34843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitAssignment(Assignment* node) { 35143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->target()); 35243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" %s ", Token::String(node->op())); 35343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->value()); 35443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 35543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 357f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid PrettyPrinter::VisitYield(Yield* node) { 358f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org Print("yield "); 359f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org Visit(node->expression()); 360f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org} 361f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 362f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitThrow(Throw* node) { 36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("throw "); 36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->exception()); 36643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitProperty(Property* node) { 37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Expression* key = node->key(); 37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Literal* literal = key->AsLiteral(); 3721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (literal != NULL && literal->value()->IsInternalizedString()) { 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->obj()); 37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")."); 3761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteral(literal->value(), false); 37743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 37843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->obj()); 37943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("["); 38043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(key); 38143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("]"); 38243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 38343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 38443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 38643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCall(Call* node) { 38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 39043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCallNew(CallNew* node) { 39343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("new ("); 39443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 39543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 39643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 39743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 39843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCallRuntime(CallRuntime* node) { 40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("%%"); 40243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->name(), false); 40343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 40443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitUnaryOperation(UnaryOperation* node) { 40840cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Token::Value op = node->op(); 40940cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org bool needsSpace = 41040cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org op == Token::DELETE || op == Token::TYPEOF || op == Token::VOID; 41140cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Print("(%s%s", Token::String(op), needsSpace ? " " : ""); 41243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 41343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 41443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 41543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCountOperation(CountOperation* node) { 41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->is_prefix()) Print("%s", Token::String(node->op())); 42043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 42143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->is_postfix()) Print("%s", Token::String(node->op())); 42243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitBinaryOperation(BinaryOperation* node) { 42743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 42843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 42940cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Print(" %s ", Token::String(node->op())); 43043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 43143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 43243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 43343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCompareOperation(CompareOperation* node) { 43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 43743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 43840cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Print(" %s ", Token::String(node->op())); 43943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 44043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 44143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 44243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitThisFunction(ThisFunction* node) { 44543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("<this-function>"); 44643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 44743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4490b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.orgconst char* PrettyPrinter::Print(AstNode* node) { 45043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 45143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node); 45243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return output_; 45343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 45443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char* PrettyPrinter::PrintExpression(FunctionLiteral* program) { 45743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 45843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExpressionStatement* statement = 45943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen program->body()->at(0)->AsExpressionStatement(); 46043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(statement->expression()); 46143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return output_; 46243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 46343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 46443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 46543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char* PrettyPrinter::PrintProgram(FunctionLiteral* program) { 46643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 46743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(program->body()); 46843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("\n"); 46943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return output_; 47043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 47143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 47243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4736d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.orgvoid PrettyPrinter::PrintOut(Zone* zone, AstNode* node) { 4746d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.org PrettyPrinter printer(zone); 47543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintF("%s", printer.Print(node)); 47643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 47743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 47843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 47943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::Init() { 48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (size_ == 0) { 48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(output_ == NULL); 48243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const int initial_size = 256; 48343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_ = NewArray<char>(initial_size); 48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen size_ = initial_size; 48543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 48643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_[0] = '\0'; 48743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos_ = 0; 48843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 48943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::Print(const char* format, ...) { 49243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (;;) { 49343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen va_list arguments; 49443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen va_start(arguments, format); 49570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int n = VSNPrintF(Vector<char>(output_, size_) + pos_, 49670ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org format, 49770ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org arguments); 49843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen va_end(arguments); 49943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 500769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com if (n >= 0) { 50143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // there was enough space - we are done 50243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos_ += n; 50343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 50443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 50543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // there was not enough space - allocate more and try again 50643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const int slack = 32; 50743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int new_size = size_ + (size_ >> 1) + slack; 50843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen char* new_output = NewArray<char>(new_size); 509d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org MemCopy(new_output, output_, pos_); 51043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DeleteArray(output_); 51143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_ = new_output; 51243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen size_ = new_size; 51343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 51443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 51543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 51643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintStatements(ZoneList<Statement*>* statements) { 5197ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org if (statements == NULL) return; 52043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < statements->length(); i++) { 52143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(" "); 52243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(statements->at(i)); 52343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 52443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 52543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 52643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5273ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgvoid PrettyPrinter::PrintLabels(ZoneStringList* labels) { 52843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (labels != NULL) { 52943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < labels->length(); i++) { 53043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(labels->at(i), false); 53143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(": "); 53243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 53343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 53443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 53543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 53643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 53743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintArguments(ZoneList<Expression*>* arguments) { 53843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 53943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < arguments->length(); i++) { 54043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(", "); 54143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(arguments->at(i)); 54243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 54343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 54443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 54543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintLiteral(Handle<Object> value, bool quote) { 54843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Object* object = *value; 54943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (object->IsString()) { 55043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen String* string = String::cast(object); 55143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (quote) Print("\""); 552bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org for (int i = 0; i < string->length(); i++) { 553bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org Print("%c", string->Get(i)); 55443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 55543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (quote) Print("\""); 556ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsNull()) { 55743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("null"); 558ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsTrue()) { 55943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("true"); 560ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsFalse()) { 56143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("false"); 562ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsUndefined()) { 56343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("undefined"); 56443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsNumber()) { 56543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("%g", object->Number()); 56643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsJSObject()) { 56743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // regular expression 56843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (object->IsJSFunction()) { 56943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("JS-Function"); 57043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsJSArray()) { 57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("JS-array[%u]", JSArray::cast(object)->length()); 57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsJSObject()) { 57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("JS-Object"); 57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("?UNKNOWN?"); 57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 57743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsFixedArray()) { 57843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("FixedArray"); 57943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 58043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("<unknown literal %p>", object); 58143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 58243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 58343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 58543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintParameters(Scope* scope) { 58643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 58743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < scope->num_parameters(); i++) { 58843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i > 0) Print(", "); 58943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(scope->parameter(i)->name(), false); 59043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 59143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 59243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 59343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 59443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 59543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { 59643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < declarations->length(); i++) { 59743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i > 0) Print(" "); 59843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(declarations->at(i)); 59943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 60043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 60143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintFunctionLiteral(FunctionLiteral* function) { 60443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("function "); 60543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(function->name(), false); 60643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintParameters(function->scope()); 60743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" { "); 60843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintDeclarations(function->scope()->declarations()); 60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(function->body()); 61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" }"); 61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 61243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//----------------------------------------------------------------------------- 61543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass IndentedScope BASE_EMBEDDED { 61743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 61857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope(AstPrinter* printer, const char* txt) 6197979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org : ast_printer_(printer) { 62043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->PrintIndented(txt); 62143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->Print("\n"); 62243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->inc_indent(); 62343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 62443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~IndentedScope() { 62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->dec_indent(); 62743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 630ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org AstPrinter* ast_printer_; 63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//----------------------------------------------------------------------------- 63543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6376d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.orgAstPrinter::AstPrinter(Zone* zone) : PrettyPrinter(zone), indent_(0) { 63843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 63943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenAstPrinter::~AstPrinter() { 64243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(indent_ == 0); 64343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 64443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintIndented(const char* txt) { 64743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < indent_; i++) { 6482d18d10b30bbe822dcb5e2d6e90fd7863496243ckasperl@chromium.org Print(". "); 64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 65043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(txt); 65143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 65243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 65343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 65443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintLiteralIndented(const char* info, 65543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Object> value, 65643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool quote) { 65743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndented(info); 65843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 65943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(value, quote); 66043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("\n"); 66143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 66243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintLiteralWithModeIndented(const char* info, 66543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Variable* var, 66644bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org Handle<Object> value) { 66743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (var == NULL) { 66843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteralIndented(info, value, true); 66943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 670b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org EmbeddedVector<char, 256> buf; 67170ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int pos = SNPrintF(buf, "%s (mode = %s", info, 67270ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org Variable::Mode2String(var->mode())); 67370ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, ")"); 674b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org PrintLiteralIndented(buf.start(), value, true); 67543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 67643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 67743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 67843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6793ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgvoid AstPrinter::PrintLabelsIndented(ZoneStringList* labels) { 68057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (labels == NULL || labels->length() == 0) return; 68157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndented("LABELS "); 68257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabels(labels); 68357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Print("\n"); 68443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 68543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 68643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6870b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.orgvoid AstPrinter::PrintIndentedVisit(const char* s, AstNode* node) { 68857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, s); 68943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node); 69043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 69143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char* AstPrinter::PrintProgram(FunctionLiteral* program) { 69443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 6957979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org { IndentedScope indent(this, "FUNC"); 69643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteralIndented("NAME", program->name(), true); 697d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org PrintLiteralIndented("INFERRED NAME", program->inferred_name(), true); 69843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintParameters(program->scope()); 69943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintDeclarations(program->scope()->declarations()); 70043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(program->body()); 70143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 70243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Output(); 70343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 70443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 70543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 70643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { 70743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (declarations->length() > 0) { 7087979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "DECLS"); 70943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < declarations->length(); i++) { 71043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(declarations->at(i)); 71143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 71243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 71343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 71443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintParameters(Scope* scope) { 71743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (scope->num_parameters() > 0) { 7187979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "PARAMS"); 71943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < scope->num_parameters(); i++) { 7202d18d10b30bbe822dcb5e2d6e90fd7863496243ckasperl@chromium.org PrintLiteralWithModeIndented("VAR", scope->parameter(i), 72144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org scope->parameter(i)->name()); 72243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 72343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 72443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 72543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintStatements(ZoneList<Statement*>* statements) { 72843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < statements->length(); i++) { 72943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(statements->at(i)); 73043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 73143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 73243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintArguments(ZoneList<Expression*>* arguments) { 73543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < arguments->length(); i++) { 73643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(arguments->at(i)); 73743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 73843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 73943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitBlock(Block* node) { 74243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* block_txt = node->is_initializer_block() ? "BLOCK INIT" : "BLOCK"; 7437979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, block_txt); 74443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(node->statements()); 74543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 74643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 74978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitVariableDeclaration(VariableDeclaration* node) { 750812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), 751812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org node->proxy()->var(), 752812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org node->proxy()->name()); 753812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 754812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 755812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 75657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 757812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid AstPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) { 758812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintIndented("FUNCTION "); 759812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), true); 760812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(" = function "); 761812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->fun()->name(), false); 762812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("\n"); 76343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 76443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleDeclaration(ModuleDeclaration* node) { 76778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org IndentedScope indent(this, "MODULE"); 76878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteralIndented("NAME", node->proxy()->name(), true); 76978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Visit(node->module()); 77078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 77178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 77278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 773812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid AstPrinter::VisitImportDeclaration(ImportDeclaration* node) { 774812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org IndentedScope indent(this, "IMPORT"); 775812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteralIndented("NAME", node->proxy()->name(), true); 776812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Visit(node->module()); 777812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 778812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 779812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 780812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid AstPrinter::VisitExportDeclaration(ExportDeclaration* node) { 781812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org IndentedScope indent(this, "EXPORT "); 782812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), true); 783812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 784812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 785812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 78678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleLiteral(ModuleLiteral* node) { 78757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE LITERAL"); 78878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org VisitBlock(node->body()); 78978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 79078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 79178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 79278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleVariable(ModuleVariable* node) { 79357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE VARIABLE"); 794f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org Visit(node->proxy()); 79578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 79678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 79778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 79878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModulePath(ModulePath* node) { 79957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE PATH"); 80057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndentedVisit("MODULE PATH PARENT", node->module()); 80157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLiteralIndented("NAME", node->name(), true); 80278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 80378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 80478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 80578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleUrl(ModuleUrl* node) { 80678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteralIndented("URL", node->url(), true); 80778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 80878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 80978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8108e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgvoid AstPrinter::VisitModuleStatement(ModuleStatement* node) { 81157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE STATEMENT"); 8128e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org PrintLiteralIndented("NAME", node->proxy()->name(), true); 8138e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org PrintStatements(node->body()->statements()); 8148e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org} 8158e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 8168e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 81743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitExpressionStatement(ExpressionStatement* node) { 81857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "EXPRESSION STATEMENT"); 81943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 82043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 82143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitEmptyStatement(EmptyStatement* node) { 82457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "EMPTY"); 82543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 82643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitIfStatement(IfStatement* node) { 82957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "IF"); 83057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndentedVisit("CONDITION", node->condition()); 83143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("THEN", node->then_statement()); 83243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->HasElseStatement()) { 83343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("ELSE", node->else_statement()); 83443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 83543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 83643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitContinueStatement(ContinueStatement* node) { 83957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "CONTINUE"); 84057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->target()->labels()); 84143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 84243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitBreakStatement(BreakStatement* node) { 84557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "BREAK"); 84657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->target()->labels()); 84743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 84843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitReturnStatement(ReturnStatement* node) { 85157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "RETURN"); 85257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 85343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 85443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8564acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.orgvoid AstPrinter::VisitWithStatement(WithStatement* node) { 8574acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org IndentedScope indent(this, "WITH"); 8584acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org PrintIndentedVisit("OBJECT", node->expression()); 8594acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org PrintIndentedVisit("BODY", node->statement()); 86043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 86143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitSwitchStatement(SwitchStatement* node) { 8647979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "SWITCH"); 86557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 86643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("TAG", node->tag()); 86743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->cases()->length(); i++) { 868a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(node->cases()->at(i)); 869a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } 870a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 871a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 872a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 873a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid AstPrinter::VisitCaseClause(CaseClause* clause) { 874a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (clause->is_default()) { 875a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org IndentedScope indent(this, "DEFAULT"); 876a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org PrintStatements(clause->statements()); 877a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } else { 878a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org IndentedScope indent(this, "CASE"); 879a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(clause->label()); 880a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org PrintStatements(clause->statements()); 88143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 88343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8859d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitDoWhileStatement(DoWhileStatement* node) { 8867979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "DO"); 88757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 8889d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("BODY", node->body()); 8899d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("COND", node->cond()); 8909d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 8919d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 8929d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 8939d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitWhileStatement(WhileStatement* node) { 8947979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "WHILE"); 89557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 8969d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("COND", node->cond()); 8979d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("BODY", node->body()); 8989d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 8999d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 9009d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 9019d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitForStatement(ForStatement* node) { 9027979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "FOR"); 90357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 90443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->init()) PrintIndentedVisit("INIT", node->init()); 90543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->cond()) PrintIndentedVisit("COND", node->cond()); 9069d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("BODY", node->body()); 90743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->next()) PrintIndentedVisit("NEXT", node->next()); 90843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 90943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitForInStatement(ForInStatement* node) { 9127979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "FOR IN"); 91343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("FOR", node->each()); 91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("IN", node->enumerable()); 91543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("BODY", node->body()); 91643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 91743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9191fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgvoid AstPrinter::VisitForOfStatement(ForOfStatement* node) { 9201fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org IndentedScope indent(this, "FOR OF"); 9211fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintIndentedVisit("FOR", node->each()); 9221fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintIndentedVisit("OF", node->iterable()); 9231fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintIndentedVisit("BODY", node->body()); 9241fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 9251fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 9261fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 9279d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) { 9287979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "TRY CATCH"); 92943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("TRY", node->try_block()); 9304f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org PrintLiteralWithModeIndented("CATCHVAR", 9314f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org node->variable(), 9324f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org node->variable()->name()); 93343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("CATCH", node->catch_block()); 93443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 93543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9379d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { 9387979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "TRY FINALLY"); 93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("TRY", node->try_block()); 94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("FINALLY", node->finally_block()); 94143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitDebuggerStatement(DebuggerStatement* node) { 9457979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "DEBUGGER"); 94643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 94743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitFunctionLiteral(FunctionLiteral* node) { 9507979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "FUNC LITERAL"); 95143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteralIndented("NAME", node->name(), false); 952d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org PrintLiteralIndented("INFERRED NAME", node->inferred_name(), false); 95343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintParameters(node->scope()); 95443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // We don't want to see the function literal in this case: it 95543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // will be printed via PrintProgram when the code for it is 95643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // generated. 95743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // PrintStatements(node->body()); 95843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 95943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 96043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 961fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgvoid AstPrinter::VisitNativeFunctionLiteral(NativeFunctionLiteral* node) { 962fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org IndentedScope indent(this, "NATIVE FUNC LITERAL"); 963fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org PrintLiteralIndented("NAME", node->name(), false); 96443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 96543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 96643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 96743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitConditional(Conditional* node) { 9687979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "CONDITIONAL"); 96957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndentedVisit("CONDITION", node->condition()); 97043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("THEN", node->then_expression()); 97143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("ELSE", node->else_expression()); 97243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 97343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitLiteral(Literal* node) { 9771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteralIndented("LITERAL", node->value(), true); 97843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 97943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitRegExpLiteral(RegExpLiteral* node) { 9827979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "REGEXP LITERAL"); 983e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org PrintLiteralIndented("PATTERN", node->pattern(), false); 984e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org PrintLiteralIndented("FLAGS", node->flags(), false); 98543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 98643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitObjectLiteral(ObjectLiteral* node) { 9897979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "OBJ LITERAL"); 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->properties()->length(); i++) { 99143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* prop_kind = NULL; 99243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen switch (node->properties()->at(i)->kind()) { 99343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::CONSTANT: 99443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - CONSTANT"; 99543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 99643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::COMPUTED: 99743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - COMPUTED"; 99843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 9990b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org case ObjectLiteral::Property::MATERIALIZED_LITERAL: 10000b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org prop_kind = "PROPERTY - MATERIALIZED_LITERAL"; 10010b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org break; 100243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::PROTOTYPE: 100343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - PROTOTYPE"; 100443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 100543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::GETTER: 100643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - GETTER"; 100743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 100843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::SETTER: 100943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - SETTER"; 101043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 101143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen default: 101243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UNREACHABLE(); 101343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 10147979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope prop(this, prop_kind); 101543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("KEY", node->properties()->at(i)->key()); 101643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("VALUE", node->properties()->at(i)->value()); 101743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 101843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 101943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitArrayLiteral(ArrayLiteral* node) { 10227979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "ARRAY LITERAL"); 102343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->values()->length() > 0) { 10247979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "VALUES"); 102543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->values()->length(); i++) { 102643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->values()->at(i)); 102743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 102843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 103143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 103257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitVariableProxy(VariableProxy* node) { 103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Variable* var = node->var(); 103583e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org EmbeddedVector<char, 128> buf; 103670ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int pos = SNPrintF(buf, "VAR PROXY"); 103783e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org switch (var->location()) { 103883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::UNALLOCATED: 103983e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 104083e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::PARAMETER: 104170ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " parameter[%d]", var->index()); 104283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 104383e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::LOCAL: 104470ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " local[%d]", var->index()); 104583e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 104683e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::CONTEXT: 104770ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " context[%d]", var->index()); 104883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 104983e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::LOOKUP: 105070ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " lookup"); 105183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 105243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 105383e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org PrintLiteralWithModeIndented(buf.start(), var, node->name()); 105443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitAssignment(Assignment* node) { 105857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->target()); 106043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->value()); 106143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 106243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 106343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1064f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid AstPrinter::VisitYield(Yield* node) { 106557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "YIELD"); 106657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 1067f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org} 1068f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 1069f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 107043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitThrow(Throw* node) { 107157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "THROW"); 107257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->exception()); 107343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 107443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 107543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 107643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitProperty(Property* node) { 107757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "PROPERTY"); 107843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->obj()); 107943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Literal* literal = node->key()->AsLiteral(); 10801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (literal != NULL && literal->value()->IsInternalizedString()) { 10811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteralIndented("NAME", literal->value(), false); 108243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 108343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("KEY", node->key()); 108443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 108543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 108643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 108743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 108843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCall(Call* node) { 10897979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "CALL"); 109043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 109143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 109243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 109343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCallNew(CallNew* node) { 10967979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "CALL NEW"); 109743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 109843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 109943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 110043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCallRuntime(CallRuntime* node) { 110357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "CALL RUNTIME"); 110457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLiteralIndented("NAME", node->name(), false); 110543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 110643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 110743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitUnaryOperation(UnaryOperation* node) { 111057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 111157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 111243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 111343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCountOperation(CountOperation* node) { 1116b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org EmbeddedVector<char, 128> buf; 111770ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"), 111870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org Token::Name(node->op())); 111957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, buf.start()); 112057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 112143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 112243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitBinaryOperation(BinaryOperation* node) { 112557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 112643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 112743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 112843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 112943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCompareOperation(CompareOperation* node) { 113257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 113343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 113443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 113543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitThisFunction(ThisFunction* node) { 11397979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "THIS-FUNCTION"); 114043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 114143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // DEBUG 114343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 1145