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

Side by Side Diff: test/cctest/compiler/function-tester.h

Issue 453833003: Add initial support for inlining. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months 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 | Annotate | Revision Log
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 #ifndef V8_CCTEST_COMPILER_FUNCTION_TESTER_H_ 5 #ifndef V8_CCTEST_COMPILER_FUNCTION_TESTER_H_
6 #define V8_CCTEST_COMPILER_FUNCTION_TESTER_H_ 6 #define V8_CCTEST_COMPILER_FUNCTION_TESTER_H_
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 #include "test/cctest/cctest.h" 9 #include "test/cctest/cctest.h"
10 10
11 #include "src/compiler.h" 11 #include "src/compiler.h"
12 #include "src/compiler/pipeline.h" 12 #include "src/compiler/pipeline.h"
13 #include "src/execution.h" 13 #include "src/execution.h"
14 #include "src/full-codegen.h" 14 #include "src/full-codegen.h"
15 #include "src/handles.h" 15 #include "src/handles.h"
16 #include "src/objects-inl.h" 16 #include "src/objects-inl.h"
17 #include "src/parser.h" 17 #include "src/parser.h"
18 #include "src/rewriter.h" 18 #include "src/rewriter.h"
19 #include "src/scopes.h" 19 #include "src/scopes.h"
20 20
21 #define USE_CRANKSHAFT 0 21 #define USE_CRANKSHAFT 0
22 22
23 namespace v8 { 23 namespace v8 {
24 namespace internal { 24 namespace internal {
25 namespace compiler { 25 namespace compiler {
26 26
27 static void AssertStackDepth(const v8::FunctionCallbackInfo<v8::Value>& args) {
28 v8::HandleScope scope(args.GetIsolate());
29 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace(
30 args.GetIsolate(), 10, v8::StackTrace::kDetailed);
31 CHECK_EQ(args[0]->ToInt32()->Value(), stackTrace->GetFrameCount());
32 }
33
27 class FunctionTester : public InitializedHandleScope { 34 class FunctionTester : public InitializedHandleScope {
28 public: 35 public:
29 explicit FunctionTester(const char* source) 36 explicit FunctionTester(const char* source)
30 : isolate(main_isolate()), 37 : isolate(main_isolate()), context(0, GetObjectTemplate()) {
31 function((FLAG_allow_natives_syntax = true, NewFunction(source))) { 38 FLAG_allow_natives_syntax = true;
39 function = NewFunction(source);
32 Compile(function); 40 Compile(function);
33 } 41 }
34 42
35 Isolate* isolate; 43 Isolate* isolate;
36 Handle<JSFunction> function; 44 Handle<JSFunction> function;
45 LocalContext context;
37 46
38 Handle<JSFunction> Compile(Handle<JSFunction> function) { 47 Handle<JSFunction> Compile(Handle<JSFunction> function) {
39 #if V8_TURBOFAN_TARGET 48 #if V8_TURBOFAN_TARGET
40 CompilationInfoWithZone info(function); 49 CompilationInfoWithZone info(function);
41 50
42 CHECK(Parser::Parse(&info)); 51 CHECK(Parser::Parse(&info));
43 StrictMode strict_mode = info.function()->strict_mode(); 52 StrictMode strict_mode = info.function()->strict_mode();
44 info.SetStrictMode(strict_mode); 53 info.SetStrictMode(strict_mode);
45 info.SetOptimizing(BailoutId::None(), Handle<Code>(function->code())); 54 info.SetOptimizing(BailoutId::None(), Handle<Code>(function->code()));
46 CHECK(Rewriter::Rewrite(&info)); 55 CHECK(Rewriter::Rewrite(&info));
(...skipping 16 matching lines...) Expand all
63 if (FLAG_print_opt_code) { 72 if (FLAG_print_opt_code) {
64 CodeTracer::Scope tracing_scope(isolate->GetCodeTracer()); 73 CodeTracer::Scope tracing_scope(isolate->GetCodeTracer());
65 code->Disassemble("test code", tracing_scope.file()); 74 code->Disassemble("test code", tracing_scope.file());
66 } 75 }
67 #endif 76 #endif
68 function->ReplaceCode(*code); 77 function->ReplaceCode(*code);
69 #endif 78 #endif
70 return function; 79 return function;
71 } 80 }
72 81
82 Local<ObjectTemplate> GetObjectTemplate() {
83 Local<ObjectTemplate> templ = ObjectTemplate::New(CcTest::isolate());
84 templ->Set(v8_str("AssertStackDepth"),
85 v8::FunctionTemplate::New(CcTest::isolate(), AssertStackDepth));
86 return templ;
87 }
88
73 static void EnsureDeoptimizationSupport(CompilationInfo* info) { 89 static void EnsureDeoptimizationSupport(CompilationInfo* info) {
74 bool should_recompile = !info->shared_info()->has_deoptimization_support(); 90 bool should_recompile = !info->shared_info()->has_deoptimization_support();
75 if (should_recompile) { 91 if (should_recompile) {
76 CompilationInfoWithZone unoptimized(info->shared_info()); 92 CompilationInfoWithZone unoptimized(info->shared_info());
77 // Note that we use the same AST that we will use for generating the 93 // Note that we use the same AST that we will use for generating the
78 // optimized code. 94 // optimized code.
79 unoptimized.SetFunction(info->function()); 95 unoptimized.SetFunction(info->function());
80 unoptimized.PrepareForCompilation(info->scope()); 96 unoptimized.PrepareForCompilation(info->scope());
81 unoptimized.SetContext(info->context()); 97 unoptimized.SetContext(info->context());
82 if (should_recompile) unoptimized.EnableDeoptimizationSupport(); 98 if (should_recompile) unoptimized.EnableDeoptimizationSupport();
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 201
186 Handle<Object> true_value() { return isolate->factory()->true_value(); } 202 Handle<Object> true_value() { return isolate->factory()->true_value(); }
187 203
188 Handle<Object> false_value() { return isolate->factory()->false_value(); } 204 Handle<Object> false_value() { return isolate->factory()->false_value(); }
189 }; 205 };
190 } 206 }
191 } 207 }
192 } // namespace v8::internal::compiler 208 } // namespace v8::internal::compiler
193 209
194 #endif // V8_CCTEST_COMPILER_FUNCTION_TESTER_H_ 210 #endif // V8_CCTEST_COMPILER_FUNCTION_TESTER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698