Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 762123002: Remove duplicate code for searching SharedFunctionInfo. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ast.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/ast-graph-builder.h" 5 #include "src/compiler/ast-graph-builder.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/compiler/ast-loop-assignment-analyzer.h" 8 #include "src/compiler/ast-loop-assignment-analyzer.h"
9 #include "src/compiler/control-builders.h" 9 #include "src/compiler/control-builders.h"
10 #include "src/compiler/machine-operator.h" 10 #include "src/compiler/machine-operator.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 Property* property = expr->AsProperty(); 141 Property* property = expr->AsProperty();
142 DCHECK(expr->IsValidReferenceExpression()); 142 DCHECK(expr->IsValidReferenceExpression());
143 LhsKind lhs_kind = 143 LhsKind lhs_kind =
144 (property == NULL) ? VARIABLE : (property->key()->IsPropertyName()) 144 (property == NULL) ? VARIABLE : (property->key()->IsPropertyName())
145 ? NAMED_PROPERTY 145 ? NAMED_PROPERTY
146 : KEYED_PROPERTY; 146 : KEYED_PROPERTY;
147 return lhs_kind; 147 return lhs_kind;
148 } 148 }
149 149
150 150
151 // Helper to find an existing shared function info in the baseline code for the
152 // given function literal. Used to canonicalize SharedFunctionInfo objects.
153 static Handle<SharedFunctionInfo> SearchSharedFunctionInfo(
154 Code* unoptimized_code, FunctionLiteral* expr) {
155 int start_position = expr->start_position();
156 for (RelocIterator it(unoptimized_code); !it.done(); it.next()) {
157 RelocInfo* rinfo = it.rinfo();
158 if (rinfo->rmode() != RelocInfo::EMBEDDED_OBJECT) continue;
159 Object* obj = rinfo->target_object();
160 if (obj->IsSharedFunctionInfo()) {
161 SharedFunctionInfo* shared = SharedFunctionInfo::cast(obj);
162 if (shared->start_position() == start_position) {
163 return Handle<SharedFunctionInfo>(shared);
164 }
165 }
166 }
167 return Handle<SharedFunctionInfo>();
168 }
169
170
171 StructuredGraphBuilder::Environment* AstGraphBuilder::CopyEnvironment( 151 StructuredGraphBuilder::Environment* AstGraphBuilder::CopyEnvironment(
172 StructuredGraphBuilder::Environment* env) { 152 StructuredGraphBuilder::Environment* env) {
173 return new (zone()) Environment(*reinterpret_cast<Environment*>(env)); 153 return new (zone()) Environment(*reinterpret_cast<Environment*>(env));
174 } 154 }
175 155
176 156
177 AstGraphBuilder::Environment::Environment(AstGraphBuilder* builder, 157 AstGraphBuilder::Environment::Environment(AstGraphBuilder* builder,
178 Scope* scope, 158 Scope* scope,
179 Node* control_dependency) 159 Node* control_dependency)
180 : StructuredGraphBuilder::Environment(builder, control_dependency), 160 : StructuredGraphBuilder::Environment(builder, control_dependency),
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 Node* node = NewNode(javascript()->CallRuntime(Runtime::kDebugBreak, 0)); 808 Node* node = NewNode(javascript()->CallRuntime(Runtime::kDebugBreak, 0));
829 PrepareFrameState(node, stmt->DebugBreakId()); 809 PrepareFrameState(node, stmt->DebugBreakId());
830 } 810 }
831 811
832 812
833 void AstGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) { 813 void AstGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) {
834 Node* context = current_context(); 814 Node* context = current_context();
835 815
836 // Build a new shared function info if we cannot find one in the baseline 816 // Build a new shared function info if we cannot find one in the baseline
837 // code. We also have a stack overflow if the recursive compilation did. 817 // code. We also have a stack overflow if the recursive compilation did.
838 Handle<SharedFunctionInfo> shared_info = 818 expr->InitializeSharedInfo(handle(info()->shared_info()->code()));
839 SearchSharedFunctionInfo(info()->shared_info()->code(), expr); 819 Handle<SharedFunctionInfo> shared_info = expr->shared_info();
840 if (shared_info.is_null()) { 820 if (shared_info.is_null()) {
841 shared_info = Compiler::BuildFunctionInfo(expr, info()->script(), info()); 821 shared_info = Compiler::BuildFunctionInfo(expr, info()->script(), info());
842 CHECK(!shared_info.is_null()); // TODO(mstarzinger): Set stack overflow? 822 CHECK(!shared_info.is_null()); // TODO(mstarzinger): Set stack overflow?
843 } 823 }
844 824
845 // Create node to instantiate a new closure. 825 // Create node to instantiate a new closure.
846 Node* info = jsgraph()->Constant(shared_info); 826 Node* info = jsgraph()->Constant(shared_info);
847 Node* pretenure = jsgraph()->BooleanConstant(expr->pretenure()); 827 Node* pretenure = jsgraph()->BooleanConstant(expr->pretenure());
848 const Operator* op = javascript()->CallRuntime(Runtime::kNewClosure, 3); 828 const Operator* op = javascript()->CallRuntime(Runtime::kNewClosure, 3);
849 Node* value = NewNode(op, context, info, pretenure); 829 Node* value = NewNode(op, context, info, pretenure);
(...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after
2248 2228
2249 BitVector* AstGraphBuilder::GetVariablesAssignedInLoop( 2229 BitVector* AstGraphBuilder::GetVariablesAssignedInLoop(
2250 IterationStatement* stmt) { 2230 IterationStatement* stmt) {
2251 if (loop_assignment_analysis_ == NULL) return NULL; 2231 if (loop_assignment_analysis_ == NULL) return NULL;
2252 return loop_assignment_analysis_->GetVariablesAssignedInLoop(stmt); 2232 return loop_assignment_analysis_->GetVariablesAssignedInLoop(stmt);
2253 } 2233 }
2254 2234
2255 } // namespace compiler 2235 } // namespace compiler
2256 } // namespace internal 2236 } // namespace internal
2257 } // namespace v8 2237 } // namespace v8
OLDNEW
« no previous file with comments | « src/ast.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698