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 908e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org#include "src/ast-value-factory.h" 105de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/base/platform/platform.h" 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/prettyprinter.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/scopes.h" 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 1571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifdef DEBUG 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 196d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.orgPrettyPrinter::PrettyPrinter(Zone* zone) { 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_ = NULL; 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen size_ = 0; 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos_ = 0; 236d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.org InitializeAstVisitor(zone); 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenPrettyPrinter::~PrettyPrinter() { 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DeleteArray(output_); 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitBlock(Block* node) { 3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!node->is_initializer_block()) Print("{ "); 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(node->statements()); 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->statements()->length() > 0) Print(" "); 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!node->is_initializer_block()) Print("}"); 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitVariableDeclaration(VariableDeclaration* node) { 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("var "); 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->proxy()->name(), false); 43812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(";"); 44812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 45812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 46812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 47812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid PrettyPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) { 48812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("function "); 49812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), false); 50812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(" = "); 51812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintFunctionLiteral(node->fun()); 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleDeclaration(ModuleDeclaration* node) { 5778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print("module "); 5878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteral(node->proxy()->name(), false); 5978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print(" = "); 6078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Visit(node->module()); 6178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print(";"); 6278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 6378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 6478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 65812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid PrettyPrinter::VisitImportDeclaration(ImportDeclaration* node) { 66812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("import "); 67812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), false); 68812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(" from "); 69812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Visit(node->module()); 70812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(";"); 71812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 72812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 73812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 74812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid PrettyPrinter::VisitExportDeclaration(ExportDeclaration* node) { 75812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("export "); 76812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), false); 77812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(";"); 78812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 79812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 80812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 8178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleLiteral(ModuleLiteral* node) { 8278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org VisitBlock(node->body()); 8378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 8478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleVariable(ModuleVariable* node) { 87f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org Visit(node->proxy()); 8878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 8978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModulePath(ModulePath* node) { 9278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Visit(node->module()); 9378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print("."); 9478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteral(node->name(), false); 9578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 9678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 9878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid PrettyPrinter::VisitModuleUrl(ModuleUrl* node) { 9978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Print("at "); 10078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteral(node->url(), true); 10178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 10278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 10378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 1048e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgvoid PrettyPrinter::VisitModuleStatement(ModuleStatement* node) { 1058e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Print("module "); 1068e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org PrintLiteral(node->proxy()->name(), false); 1078e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Print(" "); 1088e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org Visit(node->body()); 1098e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org} 1108e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 1118e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitExpressionStatement(ExpressionStatement* node) { 11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 11443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitEmptyStatement(EmptyStatement* node) { 11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitIfStatement(IfStatement* node) { 12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("if ("); 12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->condition()); 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->then_statement()); 12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->HasElseStatement()) { 12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" else "); 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->else_statement()); 13143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 13243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitContinueStatement(ContinueStatement* node) { 13643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("continue"); 13708e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org ZoneList<const AstRawString*>* labels = node->target()->labels(); 13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (labels != NULL) { 13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 140e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(labels->length() > 0); // guaranteed to have at least one entry 14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(labels->at(0), false); // any label from the list is fine 14243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 14343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 14443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 14543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 14743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitBreakStatement(BreakStatement* node) { 14843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("break"); 14908e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org ZoneList<const AstRawString*>* labels = node->target()->labels(); 15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (labels != NULL) { 15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 152e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(labels->length() > 0); // guaranteed to have at least one entry 15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(labels->at(0), false); // any label from the list is fine 15443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 15743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitReturnStatement(ReturnStatement* node) { 16043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("return "); 16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(";"); 16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1664acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.orgvoid PrettyPrinter::VisitWithStatement(WithStatement* node) { 1674acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Print("with ("); 16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 16943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 1704acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org Visit(node->statement()); 17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 17243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitSwitchStatement(SwitchStatement* node) { 17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLabels(node->labels()); 17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("switch ("); 17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->tag()); 17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") { "); 17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ZoneList<CaseClause*>* cases = node->cases(); 18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < cases->length(); i++) 181a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(cases->at(i)); 18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("}"); 18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 186a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid PrettyPrinter::VisitCaseClause(CaseClause* clause) { 187a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (clause->is_default()) { 188a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print("default"); 189a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } else { 190a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print("case "); 191a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(clause->label()); 192a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } 193a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print(": "); 194a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org PrintStatements(clause->statements()); 195a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (clause->statements()->length() > 0) 196a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Print(" "); 197a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 198a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 199a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2009d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitDoWhileStatement(DoWhileStatement* node) { 20143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLabels(node->labels()); 2029d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("do "); 2039d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->body()); 2049d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(" while ("); 2059d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->cond()); 2069d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(");"); 2079d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2109d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitWhileStatement(WhileStatement* node) { 2119d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintLabels(node->labels()); 2129d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("while ("); 2139d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->cond()); 2149d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(") "); 2159d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->body()); 2169d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 2179d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 2189d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 2199d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitForStatement(ForStatement* node) { 2209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintLabels(node->labels()); 2219d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("for ("); 2229d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (node->init() != NULL) { 2239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->init()); 2249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(" "); 2259d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } else { 2269d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("; "); 2279d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 2289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (node->cond() != NULL) Visit(node->cond()); 2299d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print("; "); 2309d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (node->next() != NULL) { 2319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->next()); // prints extra ';', unfortunately 2329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // to fix: should use Expression for next 23343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 2349d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Print(") "); 2359d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com Visit(node->body()); 23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitForInStatement(ForInStatement* node) { 24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLabels(node->labels()); 24143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("for ("); 24243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->each()); 24343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" in "); 24443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->enumerable()); 24543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 24643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->body()); 24743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 24843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgvoid PrettyPrinter::VisitForOfStatement(ForOfStatement* node) { 2511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintLabels(node->labels()); 2521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Print("for ("); 2531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Visit(node->each()); 2541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Print(" of "); 2551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Visit(node->iterable()); 2561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Print(") "); 2571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org Visit(node->body()); 2581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 2591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 2619d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitTryCatchStatement(TryCatchStatement* node) { 26243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("try "); 26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->try_block()); 26443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" catch ("); 2656d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org const bool quote = false; 2664f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org PrintLiteral(node->variable()->name(), quote); 26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 26843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->catch_block()); 26943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2729d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid PrettyPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { 27343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("try "); 27443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->try_block()); 27543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" finally "); 27643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->finally_block()); 27743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 27843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitDebuggerStatement(DebuggerStatement* node) { 28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("debugger "); 28243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 28343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitFunctionLiteral(FunctionLiteral* node) { 28643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintFunctionLiteral(node); 28843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 28943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 29043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 292a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.orgvoid PrettyPrinter::VisitClassLiteral(ClassLiteral* node) { 293a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Print("(class "); 294a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org PrintLiteral(node->name(), false); 295a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org if (node->extends()) { 296a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Print(" extends "); 297a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Visit(node->extends()); 298a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org } 299a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Print(" { "); 300a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org for (int i = 0; i < node->properties()->length(); i++) { 301a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org PrintObjectLiteralProperty(node->properties()->at(i)); 302a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org } 303a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Print(" })"); 304a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org} 305a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 306a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 307fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgvoid PrettyPrinter::VisitNativeFunctionLiteral(NativeFunctionLiteral* node) { 30843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 309fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org PrintLiteral(node->name(), false); 31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 31243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitConditional(Conditional* node) { 31543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->condition()); 31643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" ? "); 31743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->then_expression()); 31843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" : "); 31943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->else_expression()); 32043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 32143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitLiteral(Literal* node) { 3241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteral(node->value(), true); 32543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitRegExpLiteral(RegExpLiteral* node) { 32943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" RegExp("); 33043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->pattern(), false); 33143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(","); 33243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->flags(), false); 33343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(") "); 33443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 33543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitObjectLiteral(ObjectLiteral* node) { 33843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("{ "); 33943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->properties()->length(); i++) { 34043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(","); 341a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org PrintObjectLiteralProperty(node->properties()->at(i)); 34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 34343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" }"); 34443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 34543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 347a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.orgvoid PrettyPrinter::PrintObjectLiteralProperty( 348a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org ObjectLiteralProperty* property) { 349a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org // TODO(arv): Better printing of methods etc. 350a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Print(" "); 351a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Visit(property->key()); 352a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Print(": "); 353a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org Visit(property->value()); 354a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org} 355a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 356a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 35743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitArrayLiteral(ArrayLiteral* node) { 35843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("[ "); 35943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->values()->length(); i++) { 36043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(","); 36143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->values()->at(i)); 36243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" ]"); 36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitVariableProxy(VariableProxy* node) { 36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->name(), false); 36943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitAssignment(Assignment* node) { 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->target()); 37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" %s ", Token::String(node->op())); 37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->value()); 37643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 37743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 37843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 379f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid PrettyPrinter::VisitYield(Yield* node) { 380f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org Print("yield "); 381f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org Visit(node->expression()); 382f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org} 383f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 384f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 38543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitThrow(Throw* node) { 38643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("throw "); 38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->exception()); 38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 39143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitProperty(Property* node) { 39243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Expression* key = node->key(); 39343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Literal* literal = key->AsLiteral(); 3941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (literal != NULL && literal->value()->IsInternalizedString()) { 39543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 39643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->obj()); 39743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")."); 3981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteral(literal->value(), false); 39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->obj()); 40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("["); 40243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(key); 40343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("]"); 40443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 40643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCall(Call* node) { 40943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 41043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 41143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 41243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCallNew(CallNew* node) { 41543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("new ("); 41643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 41743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 42043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCallRuntime(CallRuntime* node) { 42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("%%"); 42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(node->name(), false); 42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 42743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitUnaryOperation(UnaryOperation* node) { 43040cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Token::Value op = node->op(); 43140cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org bool needsSpace = 43240cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org op == Token::DELETE || op == Token::TYPEOF || op == Token::VOID; 43340cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Print("(%s%s", Token::String(op), needsSpace ? " " : ""); 43443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 43743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCountOperation(CountOperation* node) { 44043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 44143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->is_prefix()) Print("%s", Token::String(node->op())); 44243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 44343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->is_postfix()) Print("%s", Token::String(node->op())); 44443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 44543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 44643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitBinaryOperation(BinaryOperation* node) { 44943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 45043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 45140cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Print(" %s ", Token::String(node->op())); 45243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 45343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 45443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 45543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 45743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitCompareOperation(CompareOperation* node) { 45843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 45943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 46040cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org Print(" %s ", Token::String(node->op())); 46143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 46243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 46343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 46443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 46543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 46643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::VisitThisFunction(ThisFunction* node) { 46743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("<this-function>"); 46843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 46943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 47043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4715e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgvoid PrettyPrinter::VisitSuperReference(SuperReference* node) { 4725e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Print("<super-reference>"); 4735e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} 4745e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 4755e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 4760b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.orgconst char* PrettyPrinter::Print(AstNode* node) { 47743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 47843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node); 47943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return output_; 48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char* PrettyPrinter::PrintExpression(FunctionLiteral* program) { 48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 48543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ExpressionStatement* statement = 48643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen program->body()->at(0)->AsExpressionStatement(); 48743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(statement->expression()); 48843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return output_; 48943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 49043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char* PrettyPrinter::PrintProgram(FunctionLiteral* program) { 49343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 49443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(program->body()); 49543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("\n"); 49643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return output_; 49743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 49843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5006d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.orgvoid PrettyPrinter::PrintOut(Zone* zone, AstNode* node) { 5016d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.org PrettyPrinter printer(zone); 50243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintF("%s", printer.Print(node)); 50343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 50443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::Init() { 50743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (size_ == 0) { 508e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(output_ == NULL); 50943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const int initial_size = 256; 51043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_ = NewArray<char>(initial_size); 51143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen size_ = initial_size; 51243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 51343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_[0] = '\0'; 51443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos_ = 0; 51543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 51643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 51843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::Print(const char* format, ...) { 51943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (;;) { 52043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen va_list arguments; 52143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen va_start(arguments, format); 52270ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int n = VSNPrintF(Vector<char>(output_, size_) + pos_, 52370ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org format, 52470ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org arguments); 52543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen va_end(arguments); 52643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 527769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com if (n >= 0) { 52843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // there was enough space - we are done 52943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pos_ += n; 53043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 53143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 53243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // there was not enough space - allocate more and try again 53343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const int slack = 32; 53443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int new_size = size_ + (size_ >> 1) + slack; 53543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen char* new_output = NewArray<char>(new_size); 536d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org MemCopy(new_output, output_, pos_); 53743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DeleteArray(output_); 53843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen output_ = new_output; 53943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen size_ = new_size; 54043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 54143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 54243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 54343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintStatements(ZoneList<Statement*>* statements) { 5467ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org if (statements == NULL) return; 54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < statements->length(); i++) { 54843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(" "); 54943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(statements->at(i)); 55043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 55143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 55243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 55343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 55408e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.orgvoid PrettyPrinter::PrintLabels(ZoneList<const AstRawString*>* labels) { 55543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (labels != NULL) { 55643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < labels->length(); i++) { 55743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(labels->at(i), false); 55843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(": "); 55943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 56043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 56143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 56243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 56343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 56443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintArguments(ZoneList<Expression*>* arguments) { 56543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 56643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < arguments->length(); i++) { 56743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i != 0) Print(", "); 56843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(arguments->at(i)); 56943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 57043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintLiteral(Handle<Object> value, bool quote) { 57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Object* object = *value; 57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (object->IsString()) { 57743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen String* string = String::cast(object); 57843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (quote) Print("\""); 579bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org for (int i = 0; i < string->length(); i++) { 580bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org Print("%c", string->Get(i)); 58143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 58243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (quote) Print("\""); 583ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsNull()) { 58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("null"); 585ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsTrue()) { 58643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("true"); 587ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsFalse()) { 58843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("false"); 589ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } else if (object->IsUndefined()) { 59043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("undefined"); 59143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsNumber()) { 59243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("%g", object->Number()); 59343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsJSObject()) { 59443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // regular expression 59543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (object->IsJSFunction()) { 59643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("JS-Function"); 59743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsJSArray()) { 59843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("JS-array[%u]", JSArray::cast(object)->length()); 59943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsJSObject()) { 60043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("JS-Object"); 60143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 60243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("?UNKNOWN?"); 60343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 60443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else if (object->IsFixedArray()) { 60543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("FixedArray"); 60643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 60743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("<unknown literal %p>", object); 60843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61208e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.orgvoid PrettyPrinter::PrintLiteral(const AstRawString* value, bool quote) { 61308e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org PrintLiteral(value->string(), quote); 61408e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org} 61508e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org 61608e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org 61743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintParameters(Scope* scope) { 61843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("("); 61943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < scope->num_parameters(); i++) { 62043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i > 0) Print(", "); 62143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(scope->parameter(i)->name(), false); 62243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 62343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(")"); 62443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 62543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { 62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < declarations->length(); i++) { 62943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (i > 0) Print(" "); 63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(declarations->at(i)); 63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 63343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 63543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid PrettyPrinter::PrintFunctionLiteral(FunctionLiteral* function) { 63643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("function "); 63743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(function->name(), false); 63843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintParameters(function->scope()); 63943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" { "); 64043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintDeclarations(function->scope()->declarations()); 64143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(function->body()); 64243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" }"); 64343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 64443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//----------------------------------------------------------------------------- 64743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass IndentedScope BASE_EMBEDDED { 64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 65057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope(AstPrinter* printer, const char* txt) 6517979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org : ast_printer_(printer) { 65243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->PrintIndented(txt); 65343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->Print("\n"); 65443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->inc_indent(); 65543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 65643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 65743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~IndentedScope() { 65843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ast_printer_->dec_indent(); 65943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 66043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 662ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org AstPrinter* ast_printer_; 66343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 66443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//----------------------------------------------------------------------------- 66743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 66843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6696d26cbb00b8ff12ecf86400c59f4a18d3850f22dmachenbach@chromium.orgAstPrinter::AstPrinter(Zone* zone) : PrettyPrinter(zone), indent_(0) { 67043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 67143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 67243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 67343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenAstPrinter::~AstPrinter() { 674e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(indent_ == 0); 67543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 67643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 67743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 67843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintIndented(const char* txt) { 67943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < indent_; i++) { 6802d18d10b30bbe822dcb5e2d6e90fd7863496243ckasperl@chromium.org Print(". "); 68143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 68243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(txt); 68343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 68443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 68543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 68643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintLiteralIndented(const char* info, 68743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Handle<Object> value, 68843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool quote) { 68943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndented(info); 69043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print(" "); 69143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteral(value, quote); 69243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Print("\n"); 69343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 69443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintLiteralWithModeIndented(const char* info, 69743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Variable* var, 69844bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org Handle<Object> value) { 69943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (var == NULL) { 70043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteralIndented(info, value, true); 70143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 702b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org EmbeddedVector<char, 256> buf; 70370ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int pos = SNPrintF(buf, "%s (mode = %s", info, 70470ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org Variable::Mode2String(var->mode())); 70570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, ")"); 706b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org PrintLiteralIndented(buf.start(), value, true); 70743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 70843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 70943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71108e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.orgvoid AstPrinter::PrintLabelsIndented(ZoneList<const AstRawString*>* labels) { 71257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org if (labels == NULL || labels->length() == 0) return; 71357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndented("LABELS "); 71457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabels(labels); 71557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Print("\n"); 71643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 71743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7190b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.orgvoid AstPrinter::PrintIndentedVisit(const char* s, AstNode* node) { 72057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, s); 72143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node); 72243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 72343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 72543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char* AstPrinter::PrintProgram(FunctionLiteral* program) { 72643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Init(); 7277979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org { IndentedScope indent(this, "FUNC"); 72843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteralIndented("NAME", program->name(), true); 729d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org PrintLiteralIndented("INFERRED NAME", program->inferred_name(), true); 73043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintParameters(program->scope()); 73143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintDeclarations(program->scope()->declarations()); 73243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(program->body()); 73343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 73443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Output(); 73543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 73643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintDeclarations(ZoneList<Declaration*>* declarations) { 73943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (declarations->length() > 0) { 7407979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "DECLS"); 74143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < declarations->length(); i++) { 74243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(declarations->at(i)); 74343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 74443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 74543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 74643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintParameters(Scope* scope) { 74943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (scope->num_parameters() > 0) { 7507979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "PARAMS"); 75143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < scope->num_parameters(); i++) { 7522d18d10b30bbe822dcb5e2d6e90fd7863496243ckasperl@chromium.org PrintLiteralWithModeIndented("VAR", scope->parameter(i), 75344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org scope->parameter(i)->name()); 75443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 75543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 75643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 75743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 75843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 75943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintStatements(ZoneList<Statement*>* statements) { 76043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < statements->length(); i++) { 76143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(statements->at(i)); 76243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 76343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 76443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::PrintArguments(ZoneList<Expression*>* arguments) { 76743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < arguments->length(); i++) { 76843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(arguments->at(i)); 76943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 77043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 77143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitBlock(Block* node) { 77443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* block_txt = node->is_initializer_block() ? "BLOCK INIT" : "BLOCK"; 7757979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, block_txt); 77643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintStatements(node->statements()); 77743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 77843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 78057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 78178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitVariableDeclaration(VariableDeclaration* node) { 782812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteralWithModeIndented(Variable::Mode2String(node->mode()), 783812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org node->proxy()->var(), 784812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org node->proxy()->name()); 785812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 786812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 787812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 78857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 789812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid AstPrinter::VisitFunctionDeclaration(FunctionDeclaration* node) { 790812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintIndented("FUNCTION "); 791812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), true); 792812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print(" = function "); 793812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->fun()->name(), false); 794812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Print("\n"); 79543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 79643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 79743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 79878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleDeclaration(ModuleDeclaration* node) { 79978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org IndentedScope indent(this, "MODULE"); 80078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteralIndented("NAME", node->proxy()->name(), true); 80178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org Visit(node->module()); 80278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 80378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 80478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 805812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid AstPrinter::VisitImportDeclaration(ImportDeclaration* node) { 806812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org IndentedScope indent(this, "IMPORT"); 807812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteralIndented("NAME", node->proxy()->name(), true); 808812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org Visit(node->module()); 809812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 810812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 811812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 812812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgvoid AstPrinter::VisitExportDeclaration(ExportDeclaration* node) { 813812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org IndentedScope indent(this, "EXPORT "); 814812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org PrintLiteral(node->proxy()->name(), true); 815812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org} 816812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 817812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org 81878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleLiteral(ModuleLiteral* node) { 81957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE LITERAL"); 82078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org VisitBlock(node->body()); 82178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 82278d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 82378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 82478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleVariable(ModuleVariable* node) { 82557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE VARIABLE"); 826f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org Visit(node->proxy()); 82778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 82878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 82978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 83078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModulePath(ModulePath* node) { 83157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE PATH"); 83257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndentedVisit("MODULE PATH PARENT", node->module()); 83357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLiteralIndented("NAME", node->name(), true); 83478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 83578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 83678d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 83778d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgvoid AstPrinter::VisitModuleUrl(ModuleUrl* node) { 83878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org PrintLiteralIndented("URL", node->url(), true); 83978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org} 84078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 84178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 8428e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgvoid AstPrinter::VisitModuleStatement(ModuleStatement* node) { 84357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "MODULE STATEMENT"); 8448e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org PrintLiteralIndented("NAME", node->proxy()->name(), true); 8458e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org PrintStatements(node->body()->statements()); 8468e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org} 8478e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 8488e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 84943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitExpressionStatement(ExpressionStatement* node) { 85057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "EXPRESSION STATEMENT"); 85143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 85243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 85343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitEmptyStatement(EmptyStatement* node) { 85657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "EMPTY"); 85743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 85843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 85943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitIfStatement(IfStatement* node) { 86157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "IF"); 86257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndentedVisit("CONDITION", node->condition()); 86343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("THEN", node->then_statement()); 86443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->HasElseStatement()) { 86543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("ELSE", node->else_statement()); 86643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 86743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 86843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitContinueStatement(ContinueStatement* node) { 87157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "CONTINUE"); 87257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->target()->labels()); 87343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 87443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitBreakStatement(BreakStatement* node) { 87757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "BREAK"); 87857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->target()->labels()); 87943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 88043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitReturnStatement(ReturnStatement* node) { 88357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "RETURN"); 88457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 88543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 88643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 88743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8884acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.orgvoid AstPrinter::VisitWithStatement(WithStatement* node) { 8894acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org IndentedScope indent(this, "WITH"); 8904acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org PrintIndentedVisit("OBJECT", node->expression()); 8914acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org PrintIndentedVisit("BODY", node->statement()); 89243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 89343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 89443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 89543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitSwitchStatement(SwitchStatement* node) { 8967979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "SWITCH"); 89757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 89843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("TAG", node->tag()); 89943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->cases()->length(); i++) { 900a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(node->cases()->at(i)); 901a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } 902a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 903a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 904a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 905a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid AstPrinter::VisitCaseClause(CaseClause* clause) { 906a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (clause->is_default()) { 907a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org IndentedScope indent(this, "DEFAULT"); 908a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org PrintStatements(clause->statements()); 909a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } else { 910a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org IndentedScope indent(this, "CASE"); 911a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org Visit(clause->label()); 912a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org PrintStatements(clause->statements()); 91343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 91543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9179d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitDoWhileStatement(DoWhileStatement* node) { 9187979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "DO"); 91957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 9209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("BODY", node->body()); 9219d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("COND", node->cond()); 9229d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 9239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 9249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 9259d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitWhileStatement(WhileStatement* node) { 9267979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "WHILE"); 92757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 9289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("COND", node->cond()); 9299d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("BODY", node->body()); 9309d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 9319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 9329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 9339d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitForStatement(ForStatement* node) { 9347979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "FOR"); 93557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLabelsIndented(node->labels()); 93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->init()) PrintIndentedVisit("INIT", node->init()); 93743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->cond()) PrintIndentedVisit("COND", node->cond()); 9389d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com PrintIndentedVisit("BODY", node->body()); 93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->next()) PrintIndentedVisit("NEXT", node->next()); 94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 94143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitForInStatement(ForInStatement* node) { 9447979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "FOR IN"); 94543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("FOR", node->each()); 94643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("IN", node->enumerable()); 94743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("BODY", node->body()); 94843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 94943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 95043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgvoid AstPrinter::VisitForOfStatement(ForOfStatement* node) { 9521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org IndentedScope indent(this, "FOR OF"); 9531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintIndentedVisit("FOR", node->each()); 9541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintIndentedVisit("OF", node->iterable()); 9551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org PrintIndentedVisit("BODY", node->body()); 9561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 9571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 9581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 9599d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitTryCatchStatement(TryCatchStatement* node) { 9607979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "TRY CATCH"); 96143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("TRY", node->try_block()); 9624f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org PrintLiteralWithModeIndented("CATCHVAR", 9634f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org node->variable(), 9644f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org node->variable()->name()); 96543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("CATCH", node->catch_block()); 96643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 96743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 96843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9699d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvoid AstPrinter::VisitTryFinallyStatement(TryFinallyStatement* node) { 9707979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "TRY FINALLY"); 97143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("TRY", node->try_block()); 97243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("FINALLY", node->finally_block()); 97343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitDebuggerStatement(DebuggerStatement* node) { 9777979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "DEBUGGER"); 97843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 97943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitFunctionLiteral(FunctionLiteral* node) { 9827979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "FUNC LITERAL"); 98343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintLiteralIndented("NAME", node->name(), false); 984d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org PrintLiteralIndented("INFERRED NAME", node->inferred_name(), false); 98543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintParameters(node->scope()); 98643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // We don't want to see the function literal in this case: it 98743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // will be printed via PrintProgram when the code for it is 98843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // generated. 98943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // PrintStatements(node->body()); 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 99143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 99243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 993a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.orgvoid AstPrinter::VisitClassLiteral(ClassLiteral* node) { 994a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org IndentedScope indent(this, "CLASS LITERAL"); 995a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org PrintLiteralIndented("NAME", node->name(), false); 996a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org} 997a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 998a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 999fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgvoid AstPrinter::VisitNativeFunctionLiteral(NativeFunctionLiteral* node) { 1000fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org IndentedScope indent(this, "NATIVE FUNC LITERAL"); 1001fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org PrintLiteralIndented("NAME", node->name(), false); 100243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 100343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 100443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 100543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitConditional(Conditional* node) { 10067979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "CONDITIONAL"); 100757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintIndentedVisit("CONDITION", node->condition()); 100843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("THEN", node->then_expression()); 100943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("ELSE", node->else_expression()); 101043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 101143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 101443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitLiteral(Literal* node) { 10151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteralIndented("LITERAL", node->value(), true); 101643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 101743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitRegExpLiteral(RegExpLiteral* node) { 10207979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "REGEXP LITERAL"); 1021e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org PrintLiteralIndented("PATTERN", node->pattern(), false); 1022e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org PrintLiteralIndented("FLAGS", node->flags(), false); 102343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 102443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitObjectLiteral(ObjectLiteral* node) { 10277979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "OBJ LITERAL"); 102843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->properties()->length(); i++) { 102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* prop_kind = NULL; 103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen switch (node->properties()->at(i)->kind()) { 103143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::CONSTANT: 103243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - CONSTANT"; 103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::COMPUTED: 103543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - COMPUTED"; 103643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 10370b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org case ObjectLiteral::Property::MATERIALIZED_LITERAL: 10380b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org prop_kind = "PROPERTY - MATERIALIZED_LITERAL"; 10390b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org break; 104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::PROTOTYPE: 104143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - PROTOTYPE"; 104243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 104343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::GETTER: 104443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - GETTER"; 104543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 104643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case ObjectLiteral::Property::SETTER: 104743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen prop_kind = "PROPERTY - SETTER"; 104843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 104943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen default: 105043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UNREACHABLE(); 105143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 10527979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope prop(this, prop_kind); 105343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("KEY", node->properties()->at(i)->key()); 105443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("VALUE", node->properties()->at(i)->value()); 105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 105643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 105743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitArrayLiteral(ArrayLiteral* node) { 10607979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "ARRAY LITERAL"); 106143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (node->values()->length() > 0) { 10627979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "VALUES"); 106343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int i = 0; i < node->values()->length(); i++) { 106443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->values()->at(i)); 106543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 106643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 106743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 106843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 106943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 107057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org// TODO(svenpanne) Start with IndentedScope. 107143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitVariableProxy(VariableProxy* node) { 107243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Variable* var = node->var(); 107383e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org EmbeddedVector<char, 128> buf; 107470ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org int pos = SNPrintF(buf, "VAR PROXY"); 107583e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org switch (var->location()) { 107683e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::UNALLOCATED: 107783e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 107883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::PARAMETER: 107970ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " parameter[%d]", var->index()); 108083e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 108183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::LOCAL: 108270ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " local[%d]", var->index()); 108383e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 108483e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::CONTEXT: 108570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " context[%d]", var->index()); 108683e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 108783e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org case Variable::LOOKUP: 108870ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf + pos, " lookup"); 108983e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org break; 109043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 109183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org PrintLiteralWithModeIndented(buf.start(), var, node->name()); 109243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 109343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 109543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitAssignment(Assignment* node) { 109657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 109743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->target()); 109843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->value()); 109943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 110043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 110143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1102f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid AstPrinter::VisitYield(Yield* node) { 110357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "YIELD"); 110457ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 1105f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org} 1106f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 1107f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 110843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitThrow(Throw* node) { 110957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "THROW"); 111057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->exception()); 111143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 111243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 111443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitProperty(Property* node) { 111557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "PROPERTY"); 111643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->obj()); 111743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Literal* literal = node->key()->AsLiteral(); 11181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (literal != NULL && literal->value()->IsInternalizedString()) { 11191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org PrintLiteralIndented("NAME", literal->value(), false); 112043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 112143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintIndentedVisit("KEY", node->key()); 112243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 112343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 112443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCall(Call* node) { 11277979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "CALL"); 112843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 112943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 113043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 113143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCallNew(CallNew* node) { 11347979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "CALL NEW"); 113543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->expression()); 113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 113843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 113943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCallRuntime(CallRuntime* node) { 114157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, "CALL RUNTIME"); 114257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PrintLiteralIndented("NAME", node->name(), false); 114343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PrintArguments(node->arguments()); 114443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 114543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitUnaryOperation(UnaryOperation* node) { 114857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 114957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 115043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 115143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 115243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 115343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCountOperation(CountOperation* node) { 1154b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org EmbeddedVector<char, 128> buf; 115570ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org SNPrintF(buf, "%s %s", (node->is_prefix() ? "PRE" : "POST"), 115670ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org Token::Name(node->op())); 115757ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, buf.start()); 115857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Visit(node->expression()); 115943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 116043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 116143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 116243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitBinaryOperation(BinaryOperation* node) { 116357ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 116443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 116543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 116643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 116743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 116843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 116943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitCompareOperation(CompareOperation* node) { 117057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org IndentedScope indent(this, Token::Name(node->op())); 117143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->left()); 117243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Visit(node->right()); 117343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 117443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 117543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 117643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AstPrinter::VisitThisFunction(ThisFunction* node) { 11777979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org IndentedScope indent(this, "THIS-FUNCTION"); 117843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 117943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11805e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 11815e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.orgvoid AstPrinter::VisitSuperReference(SuperReference* node) { 11825e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org IndentedScope indent(this, "SUPER-REFERENCE"); 11835e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org} 11845e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 118543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // DEBUG 118643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 118743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 1188