Home | History | Annotate | Download | only in v8
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #include "config.h"
     32 #include "bindings/v8/ExceptionMessages.h"
     33 
     34 #include "wtf/MathExtras.h"
     35 
     36 namespace WebCore {
     37 
     38 String ExceptionMessages::failedToConstruct(const String& type, const String& detail)
     39 {
     40     return "Failed to construct '" + type + (!detail.isEmpty() ? String("': " + detail) : String("'"));
     41 }
     42 
     43 String ExceptionMessages::failedToExecute(const String& method, const String& type, const String& detail)
     44 {
     45     return "Failed to execute '" + method + "' on '" + type + (!detail.isEmpty() ? String("': " + detail) : String("'"));
     46 }
     47 
     48 String ExceptionMessages::failedToGet(const String& property, const String& type, const String& detail)
     49 {
     50     return "Failed to read the '" + property + "' property from '" + type + "': " + detail;
     51 }
     52 
     53 String ExceptionMessages::failedToSet(const String& property, const String& type, const String& detail)
     54 {
     55     return "Failed to set the '" + property + "' property on '" + type + "': " + detail;
     56 }
     57 
     58 String ExceptionMessages::failedToDelete(const String& property, const String& type, const String& detail)
     59 {
     60     return "Failed to delete the '" + property + "' property from '" + type + "': " + detail;
     61 }
     62 
     63 String ExceptionMessages::incorrectPropertyType(const String& property, const String& detail)
     64 {
     65     return "The '" + property + "' property " + detail;
     66 }
     67 
     68 String ExceptionMessages::incorrectArgumentType(int argumentIndex, const String& detail)
     69 {
     70     return "The " + ordinalNumber(argumentIndex) + " argument " + detail;
     71 }
     72 
     73 String ExceptionMessages::notAnArrayTypeArgumentOrValue(int argumentIndex)
     74 {
     75     String kind;
     76     if (argumentIndex) // method argument
     77         kind = ordinalNumber(argumentIndex) + " argument";
     78     else // value, e.g. attribute setter
     79         kind = "value provided";
     80     return "The " + kind + " is neither an array, nor does it have indexed properties.";
     81 }
     82 
     83 String ExceptionMessages::notASequenceTypeProperty(const String& propertyName)
     84 {
     85     return "'" + propertyName + "' property is neither an array, nor does it have indexed properties.";
     86 }
     87 
     88 String ExceptionMessages::notEnoughArguments(unsigned expected, unsigned provided)
     89 {
     90     return String::number(expected) + " argument" + (expected > 1 ? "s" : "") + " required, but only " + String::number(provided) + " present.";
     91 }
     92 
     93 String ExceptionMessages::notAFiniteNumber(double value)
     94 {
     95     ASSERT(!std::isfinite(value));
     96     return std::isinf(value) ? "The value provided is infinite." : "The value provided is not a number.";
     97 }
     98 
     99 String ExceptionMessages::ordinalNumber(int number)
    100 {
    101     String suffix("th");
    102     switch (number % 10) {
    103     case 1:
    104         if (number % 100 != 11)
    105             suffix = "st";
    106         break;
    107     case 2:
    108         if (number % 100 != 12)
    109             suffix = "nd";
    110         break;
    111     case 3:
    112         if (number % 100 != 13)
    113             suffix = "rd";
    114         break;
    115     }
    116     return String::number(number) + suffix;
    117 }
    118 
    119 } // namespace WebCore
    120