133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Copyright 2009 The Closure Library Authors. All Rights Reserved.
233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org//
333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Licensed under the Apache License, Version 2.0 (the "License");
433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// you may not use this file except in compliance with the License.
533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// You may obtain a copy of the License at
633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org//
733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org//      http://www.apache.org/licenses/LICENSE-2.0
833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org//
933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Unless required by applicable law or agreed to in writing, software
1033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// distributed under the License is distributed on an "AS-IS" BASIS,
1133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// See the License for the specific language governing permissions and
1333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// limitations under the License.
1433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
1533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org/**
1633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * @fileoverview Provides a base class for custom Error objects such that the
1733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * stack is correctly maintained.
1833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org *
1933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * You should never need to throw goog.debug.Error(msg) directly, Error(msg) is
2033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * sufficient.
2133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org *
2233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org */
2333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
2433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orggoog.provide('goog.debug.Error');
2533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
2633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
2733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
2833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org/**
2933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * Base class for custom error objects.
3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * @param {*=} opt_msg The message associated with the error.
3133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * @constructor
3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org * @extends {Error}
3333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org */
3433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orggoog.debug.Error = function(opt_msg) {
3533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
3633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  // Attempt to ensure there is a stack trace.
3733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  if (Error.captureStackTrace) {
3833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    Error.captureStackTrace(this, goog.debug.Error);
3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  } else {
4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    var stack = new Error().stack;
41d0bddc653152f270a27fe32d5d7b0f5c0fa3b00cmachenbach@chromium.org    if (stack) {
4233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      this.stack = stack;
4333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    }
4433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  }
4533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
4633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  if (opt_msg) {
4733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    this.message = String(opt_msg);
4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  }
4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org};
5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orggoog.inherits(goog.debug.Error, Error);
5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
5233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
5333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org/** @override */
5433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orggoog.debug.Error.prototype.name = 'CustomError';
5533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org