17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 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
77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/compiler/function-tester.h"
87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal;
107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal::compiler;
117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Throw) {
137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FunctionTester T("(function(a,b) { if (a) { throw b; } else { return b; }})");
147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  T.CheckThrows(T.true_value(), T.NewObject("new Error"));
167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  T.CheckCall(T.Val(23), T.false_value(), T.Val(23));
177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(ThrowSourcePosition) {
217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  static const char* src =
227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      "(function(a, b) {        \n"
237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      "  if (a == 1) throw 1;   \n"
247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      "  if (a == 2) {throw 2}  \n"
257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      "  if (a == 3) {0;throw 3}\n"
267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      "  throw 4;               \n"
277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org      "})                       ";
287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  FunctionTester T(src);
297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  v8::Handle<v8::Message> message;
307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  message = T.CheckThrowsReturnMessage(T.Val(1), T.undefined());
327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(!message.IsEmpty());
337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(2, message->GetLineNumber());
347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(40, message->GetStartPosition());
357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  message = T.CheckThrowsReturnMessage(T.Val(2), T.undefined());
377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(!message.IsEmpty());
387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(3, message->GetLineNumber());
397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(67, message->GetStartPosition());
407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  message = T.CheckThrowsReturnMessage(T.Val(3), T.undefined());
427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK(!message.IsEmpty());
437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(4, message->GetLineNumber());
447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  CHECK_EQ(95, message->GetStartPosition());
457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
46