Chromium Code Reviews| Index: src/fast-codegen.cc |
| diff --git a/src/fast-codegen.cc b/src/fast-codegen.cc |
| index 5a8c09e6e280dc2c48352577e9df97490f0cf6b5..db0205c3ca0dfb675fbd522ad1352a13c44c35a0 100644 |
| --- a/src/fast-codegen.cc |
| +++ b/src/fast-codegen.cc |
| @@ -27,6 +27,7 @@ |
| #include "v8.h" |
| +#include "data-flow.h" |
| #include "fast-codegen.h" |
| #include "scopes.h" |
| @@ -51,6 +52,8 @@ namespace internal { |
| void FastCodeGenSyntaxChecker::Check(FunctionLiteral* fun, |
| CompilationInfo* info) { |
| + info_ = info; |
| + |
| // We do not specialize if we do not have a receiver. |
| if (!info->has_receiver()) BAILOUT("No receiver"); |
| @@ -322,4 +325,239 @@ void FastCodeGenSyntaxChecker::VisitThisFunction(ThisFunction* expr) { |
| #undef CHECK_BAILOUT |
| +void FastCodeGenerator::MakeCode(FunctionLiteral* fun, |
| + Handle<Script> script, |
| + bool is_eval, |
| + CompilationInfo* info) { |
| + AstLabeler labeler; |
| + FastCodeGenerator cgen(script, is_eval); |
| + labeler.Label(fun); |
| + cgen.Generate(fun, info); |
| +} |
| + |
| + |
| +void FastCodeGenerator::Generate(FunctionLiteral* fun, CompilationInfo* info) { |
| + ASSERT(function_ == NULL); |
| + ASSERT(info_ == NULL); |
| + function_ = fun; |
| + info_ = info; |
| + VisitStatements(fun->body()); |
| + function_ = NULL; |
| + info_ = NULL; |
|
fschneider
2010/01/29 13:02:29
Maybe I miss something here. Why do we need to res
|
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitDeclaration(Declaration* decl) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitBlock(Block* stmt) { |
| + VisitStatements(stmt->statements()); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitExpressionStatement(ExpressionStatement* stmt) { |
| + Visit(stmt->expression()); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitEmptyStatement(EmptyStatement* stmt) { |
| + // Nothing to do. |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitIfStatement(IfStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitContinueStatement(ContinueStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitBreakStatement(BreakStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitReturnStatement(ReturnStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitWithEnterStatement(WithEnterStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitWithExitStatement(WithExitStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitSwitchStatement(SwitchStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitDoWhileStatement(DoWhileStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitWhileStatement(WhileStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitForStatement(ForStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitForInStatement(ForInStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitTryCatchStatement(TryCatchStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitTryFinallyStatement(TryFinallyStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitDebuggerStatement(DebuggerStatement* stmt) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitFunctionLiteral(FunctionLiteral* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitFunctionBoilerplateLiteral( |
| + FunctionBoilerplateLiteral* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitConditional(Conditional* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitSlot(Slot* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitVariableProxy(VariableProxy* expr) { |
| + if (FLAG_print_ir) { |
| + ASSERT(expr->var()->is_global() && !expr->var()->is_this()); |
| + SmartPointer<char> name = expr->name()->ToCString(); |
| + PrintF("%d: t%d = Global(%s)\n", expr->num(), expr->num(), *name); |
| + } |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitLiteral(Literal* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitRegExpLiteral(RegExpLiteral* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitCatchExtensionObject(CatchExtensionObject* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitAssignment(Assignment* expr) { |
| + // Known to be a simple this property assignment. |
| + Visit(expr->value()); |
| + |
| + if (FLAG_print_ir) { |
| + Property* prop = expr->target()->AsProperty(); |
| + ASSERT_NOT_NULL(prop); |
| + ASSERT_NOT_NULL(prop->obj()->AsVariableProxy()); |
| + ASSERT(prop->obj()->AsVariableProxy()->var()->is_this()); |
| + ASSERT(prop->key()->IsPropertyName()); |
| + Handle<String> key = |
| + Handle<String>::cast(prop->key()->AsLiteral()->handle()); |
| + SmartPointer<char> name = key->ToCString(); |
| + PrintF("%d: t%d = Store(this, \"%s\", t%d)\n", |
| + expr->num(), expr->num(), *name, expr->value()->num()); |
| + } |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitThrow(Throw* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitProperty(Property* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitCall(Call* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitCallNew(CallNew* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitCallRuntime(CallRuntime* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitCountOperation(CountOperation* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitBinaryOperation(BinaryOperation* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitCompareOperation(CompareOperation* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void FastCodeGenerator::VisitThisFunction(ThisFunction* expr) { |
| + UNREACHABLE(); |
| +} |
| + |
| } } // namespace v8::internal |