17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file.
47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/v8.h"
67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/cctest.h"
77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler.h"
97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/pipeline.h"
107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/handles.h"
117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/parser.h"
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/rewriter.h"
137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/scopes.h"
147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal;
167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal::compiler;
177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(PipelineAdd) {
197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  InitializedHandleScope handles;
207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  const char* source = "(function(a,b) { return a + b; })";
217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Handle<JSFunction> function = v8::Utils::OpenHandle(
227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      *v8::Handle<v8::Function>::Cast(CompileRun(source)));
237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CompilationInfoWithZone info(function);
247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(Parser::Parse(&info));
267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(Rewriter::Rewrite(&info));
277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(Scope::Analyze(&info));
287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_NE(NULL, info.scope());
297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Pipeline pipeline(&info);
317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#if V8_TURBOFAN_TARGET
327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Handle<Code> code = pipeline.GenerateCode();
337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(Pipeline::SupportedTarget());
347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(!code.is_null());
357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#else
367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  USE(pipeline);
377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif
387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
39