Revision: 2646 Author: [email protected] Date: Fri Aug 7 03:35:48 2009 Log: Rename: ExpressionBuilder => ExpressionCfgBuilder, StatementBuilder => StatementCfgBuilder.
Review URL: http://codereview.chromium.org/165124 http://code.google.com/p/v8/source/detail?r=2646 Modified: /branches/bleeding_edge/src/cfg.cc /branches/bleeding_edge/src/cfg.h ======================================= --- /branches/bleeding_edge/src/cfg.cc Fri Aug 7 00:15:31 2009 +++ /branches/bleeding_edge/src/cfg.cc Fri Aug 7 03:35:48 2009 @@ -75,7 +75,7 @@ BAILOUT("empty function body"); } - StatementBuilder builder; + StatementCfgBuilder builder; builder.VisitStatements(body); Cfg* graph = builder.graph(); if (graph == NULL) { @@ -231,10 +231,12 @@ // The expression builder should not be used for declarations or statements. -void ExpressionBuilder::VisitDeclaration(Declaration* decl) { UNREACHABLE(); } +void ExpressionCfgBuilder::VisitDeclaration(Declaration* decl) { + UNREACHABLE(); +} #define DEFINE_VISIT(type) \ - void ExpressionBuilder::Visit##type(type* stmt) { UNREACHABLE(); } + void ExpressionCfgBuilder::Visit##type(type* stmt) { UNREACHABLE(); } STATEMENT_NODE_LIST(DEFINE_VISIT) #undef DEFINE_VISIT @@ -246,28 +248,28 @@ return; \ } while (false) -void ExpressionBuilder::VisitFunctionLiteral(FunctionLiteral* expr) { +void ExpressionCfgBuilder::VisitFunctionLiteral(FunctionLiteral* expr) { BAILOUT("FunctionLiteral"); } -void ExpressionBuilder::VisitFunctionBoilerplateLiteral( +void ExpressionCfgBuilder::VisitFunctionBoilerplateLiteral( FunctionBoilerplateLiteral* expr) { BAILOUT("FunctionBoilerplateLiteral"); } -void ExpressionBuilder::VisitConditional(Conditional* expr) { +void ExpressionCfgBuilder::VisitConditional(Conditional* expr) { BAILOUT("Conditional"); } -void ExpressionBuilder::VisitSlot(Slot* expr) { +void ExpressionCfgBuilder::VisitSlot(Slot* expr) { BAILOUT("Slot"); } -void ExpressionBuilder::VisitVariableProxy(VariableProxy* expr) { +void ExpressionCfgBuilder::VisitVariableProxy(VariableProxy* expr) { Expression* rewrite = expr->var()->rewrite(); if (rewrite == NULL || rewrite->AsSlot() == NULL) { BAILOUT("unsupported variable (not a slot)"); @@ -281,33 +283,34 @@ } -void ExpressionBuilder::VisitLiteral(Literal* expr) { +void ExpressionCfgBuilder::VisitLiteral(Literal* expr) { // Ignore the passed destination. value_ = new Constant(expr->handle()); } -void ExpressionBuilder::VisitRegExpLiteral(RegExpLiteral* expr) { +void ExpressionCfgBuilder::VisitRegExpLiteral(RegExpLiteral* expr) { BAILOUT("RegExpLiteral"); } -void ExpressionBuilder::VisitObjectLiteral(ObjectLiteral* expr) { +void ExpressionCfgBuilder::VisitObjectLiteral(ObjectLiteral* expr) { BAILOUT("ObjectLiteral"); } -void ExpressionBuilder::VisitArrayLiteral(ArrayLiteral* expr) { +void ExpressionCfgBuilder::VisitArrayLiteral(ArrayLiteral* expr) { BAILOUT("ArrayLiteral"); } -void ExpressionBuilder::VisitCatchExtensionObject(CatchExtensionObject* expr) { +void ExpressionCfgBuilder::VisitCatchExtensionObject( + CatchExtensionObject* expr) { BAILOUT("CatchExtensionObject"); } -void ExpressionBuilder::VisitAssignment(Assignment* expr) { +void ExpressionCfgBuilder::VisitAssignment(Assignment* expr) { if (expr->op() != Token::ASSIGN && expr->op() != Token::INIT_VAR) { BAILOUT("unsupported compound assignment"); } @@ -328,7 +331,7 @@ BAILOUT("unsupported slot lhs (not a parameter or local)"); } - ExpressionBuilder builder; + ExpressionCfgBuilder builder; SlotLocation* loc = new SlotLocation(slot->type(), slot->index()); builder.Build(expr->value(), loc); if (builder.graph() == NULL) { @@ -347,47 +350,47 @@ } -void ExpressionBuilder::VisitThrow(Throw* expr) { +void ExpressionCfgBuilder::VisitThrow(Throw* expr) { BAILOUT("Throw"); } -void ExpressionBuilder::VisitProperty(Property* expr) { +void ExpressionCfgBuilder::VisitProperty(Property* expr) { BAILOUT("Property"); } -void ExpressionBuilder::VisitCall(Call* expr) { +void ExpressionCfgBuilder::VisitCall(Call* expr) { BAILOUT("Call"); } -void ExpressionBuilder::VisitCallEval(CallEval* expr) { +void ExpressionCfgBuilder::VisitCallEval(CallEval* expr) { BAILOUT("CallEval"); } -void ExpressionBuilder::VisitCallNew(CallNew* expr) { +void ExpressionCfgBuilder::VisitCallNew(CallNew* expr) { BAILOUT("CallNew"); } -void ExpressionBuilder::VisitCallRuntime(CallRuntime* expr) { +void ExpressionCfgBuilder::VisitCallRuntime(CallRuntime* expr) { BAILOUT("CallRuntime"); } -void ExpressionBuilder::VisitUnaryOperation(UnaryOperation* expr) { +void ExpressionCfgBuilder::VisitUnaryOperation(UnaryOperation* expr) { BAILOUT("UnaryOperation"); } -void ExpressionBuilder::VisitCountOperation(CountOperation* expr) { +void ExpressionCfgBuilder::VisitCountOperation(CountOperation* expr) { BAILOUT("CountOperation"); } -void ExpressionBuilder::VisitBinaryOperation(BinaryOperation* expr) { +void ExpressionCfgBuilder::VisitBinaryOperation(BinaryOperation* expr) { Token::Value op = expr->op(); switch (op) { case Token::COMMA: @@ -406,7 +409,7 @@ case Token::MUL: case Token::DIV: case Token::MOD: { - ExpressionBuilder left, right; + ExpressionCfgBuilder left, right; left.Build(expr->left(), NULL); if (left.graph() == NULL) { BAILOUT("unsupported left subexpression in binop"); @@ -445,12 +448,12 @@ } -void ExpressionBuilder::VisitCompareOperation(CompareOperation* expr) { +void ExpressionCfgBuilder::VisitCompareOperation(CompareOperation* expr) { BAILOUT("CompareOperation"); } -void ExpressionBuilder::VisitThisFunction(ThisFunction* expr) { +void ExpressionCfgBuilder::VisitThisFunction(ThisFunction* expr) { BAILOUT("ThisFunction"); } @@ -467,7 +470,7 @@ #define CHECK_BAILOUT() \ if (graph() == NULL) { return; } else {} -void StatementBuilder::VisitStatements(ZoneList<Statement*>* stmts) { +void StatementCfgBuilder::VisitStatements(ZoneList<Statement*>* stmts) { for (int i = 0, len = stmts->length(); i < len; i++) { Visit(stmts->at(i)); CHECK_BAILOUT(); @@ -477,21 +480,21 @@ // The statement builder should not be used for declarations or expressions. -void StatementBuilder::VisitDeclaration(Declaration* decl) { UNREACHABLE(); } +void StatementCfgBuilder::VisitDeclaration(Declaration* decl) { UNREACHABLE(); } #define DEFINE_VISIT(type) \ - void StatementBuilder::Visit##type(type* expr) { UNREACHABLE(); } + void StatementCfgBuilder::Visit##type(type* expr) { UNREACHABLE(); } EXPRESSION_NODE_LIST(DEFINE_VISIT) #undef DEFINE_VISIT -void StatementBuilder::VisitBlock(Block* stmt) { +void StatementCfgBuilder::VisitBlock(Block* stmt) { VisitStatements(stmt->statements()); } -void StatementBuilder::VisitExpressionStatement(ExpressionStatement* stmt) { - ExpressionBuilder builder; +void StatementCfgBuilder::VisitExpressionStatement(ExpressionStatement* stmt) { + ExpressionCfgBuilder builder; builder.Build(stmt->expression(), CfgGlobals::current()->nowhere()); if (builder.graph() == NULL) { BAILOUT("unsupported expression in expression statement"); @@ -501,28 +504,28 @@ } -void StatementBuilder::VisitEmptyStatement(EmptyStatement* stmt) { +void StatementCfgBuilder::VisitEmptyStatement(EmptyStatement* stmt) { // Nothing to do. } -void StatementBuilder::VisitIfStatement(IfStatement* stmt) { +void StatementCfgBuilder::VisitIfStatement(IfStatement* stmt) { BAILOUT("IfStatement"); } -void StatementBuilder::VisitContinueStatement(ContinueStatement* stmt) { +void StatementCfgBuilder::VisitContinueStatement(ContinueStatement* stmt) { BAILOUT("ContinueStatement"); } -void StatementBuilder::VisitBreakStatement(BreakStatement* stmt) { +void StatementCfgBuilder::VisitBreakStatement(BreakStatement* stmt) { BAILOUT("BreakStatement"); } -void StatementBuilder::VisitReturnStatement(ReturnStatement* stmt) { - ExpressionBuilder builder; +void StatementCfgBuilder::VisitReturnStatement(ReturnStatement* stmt) { + ExpressionCfgBuilder builder; builder.Build(stmt->expression(), NULL); if (builder.graph() == NULL) { BAILOUT("unsupported expression in return statement"); @@ -534,42 +537,42 @@ } -void StatementBuilder::VisitWithEnterStatement(WithEnterStatement* stmt) { +void StatementCfgBuilder::VisitWithEnterStatement(WithEnterStatement* stmt) { BAILOUT("WithEnterStatement"); } -void StatementBuilder::VisitWithExitStatement(WithExitStatement* stmt) { +void StatementCfgBuilder::VisitWithExitStatement(WithExitStatement* stmt) { BAILOUT("WithExitStatement"); } -void StatementBuilder::VisitSwitchStatement(SwitchStatement* stmt) { +void StatementCfgBuilder::VisitSwitchStatement(SwitchStatement* stmt) { BAILOUT("SwitchStatement"); } -void StatementBuilder::VisitLoopStatement(LoopStatement* stmt) { +void StatementCfgBuilder::VisitLoopStatement(LoopStatement* stmt) { BAILOUT("LoopStatement"); } -void StatementBuilder::VisitForInStatement(ForInStatement* stmt) { +void StatementCfgBuilder::VisitForInStatement(ForInStatement* stmt) { BAILOUT("ForInStatement"); } -void StatementBuilder::VisitTryCatch(TryCatch* stmt) { +void StatementCfgBuilder::VisitTryCatch(TryCatch* stmt) { BAILOUT("TryCatch"); } -void StatementBuilder::VisitTryFinally(TryFinally* stmt) { +void StatementCfgBuilder::VisitTryFinally(TryFinally* stmt) { BAILOUT("TryFinally"); } -void StatementBuilder::VisitDebuggerStatement(DebuggerStatement* stmt) { +void StatementCfgBuilder::VisitDebuggerStatement(DebuggerStatement* stmt) { BAILOUT("DebuggerStatement"); } ======================================= --- /branches/bleeding_edge/src/cfg.h Fri Aug 7 00:15:31 2009 +++ /branches/bleeding_edge/src/cfg.h Fri Aug 7 03:35:48 2009 @@ -659,7 +659,8 @@ }; -// An implementation of a set of locations (currently slot locations). +// An implementation of a set of locations (currently slot locations), most +// of the operations are destructive. class LocationSet BASE_EMBEDDED { public: // Construct an empty location set. @@ -668,6 +669,11 @@ // Raw accessors. uintptr_t parameters() { return parameters_; } uintptr_t locals() { return locals_; } + + // Make this the empty set. + void Empty() { + parameters_ = locals_ = 0; + } // Insert an element. void AddElement(SlotLocation* location) { @@ -705,14 +711,14 @@ }; -// An ExpressionBuilder traverses an expression and returns an open CFG +// An ExpressionCfgBuilder traverses an expression and returns an open CFG // fragment (currently a possibly empty list of instructions represented by // a singleton instruction block) and the expression's value. // -// Failure is to build the CFG is indicated by a NULL CFG. -class ExpressionBuilder : public AstVisitor { +// Failure to build the CFG is indicated by a NULL CFG. +class ExpressionCfgBuilder : public AstVisitor { public: - ExpressionBuilder() : value_(NULL), graph_(NULL), destination_(NULL) {} + ExpressionCfgBuilder() : destination_(NULL), value_(NULL), graph_(NULL) {} // Result accessors. Value* value() { return value_; } @@ -728,6 +734,7 @@ void Build(Expression* expr, Location* destination) { value_ = NULL; graph_ = new Cfg(); + assigned_vars_.Empty(); destination_ = destination; Visit(expr); } @@ -738,22 +745,22 @@ #undef DECLARE_VISIT private: - // State for the visitor. Output parameters. + // State for the visitor. Input parameters: + Location* destination_; + + // Output parameters: Value* value_; Cfg* graph_; LocationSet assigned_vars_; - - // Input parameters. - Location* destination_; }; -// A StatementBuilder maintains a CFG fragment accumulator. When it visits -// a statement, it concatenates the CFG for the statement to the end of the -// accumulator. -class StatementBuilder : public AstVisitor { +// A StatementCfgBuilder maintains a CFG fragment accumulator. When it +// visits a statement, it concatenates the CFG for the statement to the end +// of the accumulator. +class StatementCfgBuilder : public AstVisitor { public: - StatementBuilder() : graph_(new Cfg()) {} + StatementCfgBuilder() : graph_(new Cfg()) {} Cfg* graph() { return graph_; } @@ -765,6 +772,7 @@ #undef DECLARE_VISIT private: + // State for the visitor. Input/output parameter: Cfg* graph_; }; --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
