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