| Index: sky/engine/bindings2/exception_messages.cc
|
| diff --git a/sky/engine/bindings2/exception_messages.cc b/sky/engine/bindings2/exception_messages.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..451a8fe73a3274cd9428f8221219dc0917dd8ea0
|
| --- /dev/null
|
| +++ b/sky/engine/bindings2/exception_messages.cc
|
| @@ -0,0 +1,166 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "sky/engine/config.h"
|
| +#include "sky/engine/bindings2/exception_messages.h"
|
| +
|
| +#include "sky/engine/platform/Decimal.h"
|
| +#include "sky/engine/wtf/MathExtras.h"
|
| +
|
| +namespace blink {
|
| +
|
| +String ExceptionMessages::failedToConstruct(const char* type,
|
| + const String& detail) {
|
| + return "Failed to construct '" + String(type) +
|
| + (!detail.isEmpty() ? String("': " + detail) : String("'"));
|
| +}
|
| +
|
| +String ExceptionMessages::failedToEnumerate(const char* type,
|
| + const String& detail) {
|
| + return "Failed to enumerate the properties of '" + String(type) +
|
| + (!detail.isEmpty() ? String("': " + detail) : String("'"));
|
| +}
|
| +
|
| +String ExceptionMessages::failedToExecute(const char* method,
|
| + const char* type,
|
| + const String& detail) {
|
| + return "Failed to execute '" + String(method) + "' on '" + String(type) +
|
| + (!detail.isEmpty() ? String("': " + detail) : String("'"));
|
| +}
|
| +
|
| +String ExceptionMessages::failedToGet(const char* property,
|
| + const char* type,
|
| + const String& detail) {
|
| + return "Failed to read the '" + String(property) + "' property from '" +
|
| + String(type) + "': " + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::failedToSet(const char* property,
|
| + const char* type,
|
| + const String& detail) {
|
| + return "Failed to set the '" + String(property) + "' property on '" +
|
| + String(type) + "': " + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::failedToDelete(const char* property,
|
| + const char* type,
|
| + const String& detail) {
|
| + return "Failed to delete the '" + String(property) + "' property from '" +
|
| + String(type) + "': " + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::failedToGetIndexed(const char* type,
|
| + const String& detail) {
|
| + return "Failed to read an indexed property from '" + String(type) + "': " +
|
| + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::failedToSetIndexed(const char* type,
|
| + const String& detail) {
|
| + return "Failed to set an indexed property on '" + String(type) + "': " +
|
| + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::failedToDeleteIndexed(const char* type,
|
| + const String& detail) {
|
| + return "Failed to delete an indexed property from '" + String(type) + "': " +
|
| + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::constructorNotCallableAsFunction(const char* type) {
|
| + return failedToConstruct(type,
|
| + "Please use the 'new' operator, this DOM object "
|
| + "constructor cannot be called as a function.");
|
| +}
|
| +
|
| +String ExceptionMessages::incorrectPropertyType(const String& property,
|
| + const String& detail) {
|
| + return "The '" + property + "' property " + detail;
|
| +}
|
| +
|
| +String ExceptionMessages::invalidArity(const char* expected,
|
| + unsigned provided) {
|
| + return "Valid arities are: " + String(expected) + ", but " +
|
| + String::number(provided) + " arguments provided.";
|
| +}
|
| +
|
| +String ExceptionMessages::argumentNullOrIncorrectType(
|
| + int argumentIndex,
|
| + const String& expectedType) {
|
| + return "The " + ordinalNumber(argumentIndex) +
|
| + " argument provided is either null, or an invalid " + expectedType +
|
| + " object.";
|
| +}
|
| +
|
| +String ExceptionMessages::notAnArrayTypeArgumentOrValue(int argumentIndex) {
|
| + String kind;
|
| + if (argumentIndex) // method argument
|
| + kind = ordinalNumber(argumentIndex) + " argument";
|
| + else // value, e.g. attribute setter
|
| + kind = "value provided";
|
| + return "The " + kind +
|
| + " is neither an array, nor does it have indexed properties.";
|
| +}
|
| +
|
| +String ExceptionMessages::notASequenceTypeProperty(const String& propertyName) {
|
| + return "'" + propertyName +
|
| + "' property is neither an array, nor does it have indexed properties.";
|
| +}
|
| +
|
| +String ExceptionMessages::notEnoughArguments(unsigned expected,
|
| + unsigned provided) {
|
| + return String::number(expected) + " argument" + (expected > 1 ? "s" : "") +
|
| + " required, but only " + String::number(provided) + " present.";
|
| +}
|
| +
|
| +String ExceptionMessages::notAFiniteNumber(double value, const char* name) {
|
| + ASSERT(!std::isfinite(value));
|
| + return String::format("The %s is %s.", name,
|
| + std::isinf(value) ? "infinite" : "not a number");
|
| +}
|
| +
|
| +String ExceptionMessages::notAFiniteNumber(const Decimal& value,
|
| + const char* name) {
|
| + ASSERT(!value.isFinite());
|
| + return String::format("The %s is %s.", name,
|
| + value.isInfinity() ? "infinite" : "not a number");
|
| +}
|
| +
|
| +String ExceptionMessages::ordinalNumber(int number) {
|
| + String suffix("th");
|
| + switch (number % 10) {
|
| + case 1:
|
| + if (number % 100 != 11)
|
| + suffix = "st";
|
| + break;
|
| + case 2:
|
| + if (number % 100 != 12)
|
| + suffix = "nd";
|
| + break;
|
| + case 3:
|
| + if (number % 100 != 13)
|
| + suffix = "rd";
|
| + break;
|
| + }
|
| + return String::number(number) + suffix;
|
| +}
|
| +
|
| +String ExceptionMessages::readOnly(const char* detail) {
|
| + DEFINE_STATIC_LOCAL(String, readOnly, ("This object is read-only."));
|
| + return detail
|
| + ? String::format("This object is read-only, because %s.", detail)
|
| + : readOnly;
|
| +}
|
| +
|
| +template <>
|
| +String ExceptionMessages::formatNumber<float>(float number) {
|
| + return formatPotentiallyNonFiniteNumber(number);
|
| +}
|
| +
|
| +template <>
|
| +String ExceptionMessages::formatNumber<double>(double number) {
|
| + return formatPotentiallyNonFiniteNumber(number);
|
| +}
|
| +
|
| +} // namespace blink
|
|
|