1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved.
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file.
4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/v8.h"
6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "test/cctest/cctest.h"
7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler.h"
9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/pipeline.h"
10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/handles.h"
11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/parser.h"
12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/rewriter.h"
13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/scopes.h"
14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochusing namespace v8::internal;
16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochusing namespace v8::internal::compiler;
17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTEST(PipelineAdd) {
19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  InitializedHandleScope handles;
20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  const char* source = "(function(a,b) { return a + b; })";
21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  Handle<JSFunction> function = v8::Utils::OpenHandle(
22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      *v8::Handle<v8::Function>::Cast(CompileRun(source)));
23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CompilationInfoWithZone info(function);
24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CHECK(Parser::Parse(&info));
26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CHECK(Rewriter::Rewrite(&info));
27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CHECK(Scope::Analyze(&info));
28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CHECK_NE(NULL, info.scope());
29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  Pipeline pipeline(&info);
31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#if V8_TURBOFAN_TARGET
32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  Handle<Code> code = pipeline.GenerateCode();
33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CHECK(Pipeline::SupportedTarget());
34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  CHECK(!code.is_null());
35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#else
36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  USE(pipeline);
37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif
38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}
39