Bug 1284406 part 2 - Avoid including ICU header when Intl API is disabled. r?Waldo draft
authorXidorn Quan <me@upsuper.org>
Mon, 18 Jul 2016 11:55:10 +1000
changeset 388833 46edb316cd7ced02794cd99037aca7a47e26d457
parent 388832 e35f507952ccb081e77d5ba78c1b0d2ed566ac73
child 388834 2b5245c51288f23c9e4f1aeeff292e7b722110f0
push id23245
push userxquan@mozilla.com
push dateMon, 18 Jul 2016 05:36:23 +0000
reviewersWaldo
bugs1284406
milestone50.0a1
Bug 1284406 part 2 - Avoid including ICU header when Intl API is disabled. r?Waldo MozReview-Commit-ID: IirLcgh8s89
js/src/builtin/Intl.cpp
js/src/builtin/Intl.h
--- a/js/src/builtin/Intl.cpp
+++ b/js/src/builtin/Intl.cpp
@@ -72,16 +72,201 @@ using icu::NumberingSystem;
  * against ICU. However, we still want to compile this code in order to prevent
  * bit rot. The following stub implementations for ICU functions make this
  * possible. The functions using them should never be called, so they assert
  * and return error codes. Signatures adapted from ICU header files locid.h,
  * numsys.h, ucal.h, ucol.h, udat.h, udatpg.h, uenum.h, unum.h; see the ICU
  * directory for license.
  */
 
+typedef bool UBool;
+typedef char16_t UChar;
+typedef double UDate;
+
+enum UErrorCode {
+    U_USING_FALLBACK_WARNING  = -128,
+    U_ERROR_WARNING_START     = -128,
+    U_USING_DEFAULT_WARNING   = -127,
+    U_SAFECLONE_ALLOCATED_WARNING = -126,
+    U_STATE_OLD_WARNING       = -125,
+    U_STRING_NOT_TERMINATED_WARNING = -124,
+    U_SORT_KEY_TOO_SHORT_WARNING = -123,
+    U_AMBIGUOUS_ALIAS_WARNING = -122,
+    U_DIFFERENT_UCA_VERSION = -121,
+    U_PLUGIN_CHANGED_LEVEL_WARNING = -120,
+    U_ERROR_WARNING_LIMIT,
+    U_ZERO_ERROR              =  0,
+    U_ILLEGAL_ARGUMENT_ERROR  =  1,
+    U_MISSING_RESOURCE_ERROR  =  2,
+    U_INVALID_FORMAT_ERROR    =  3,
+    U_FILE_ACCESS_ERROR       =  4,
+    U_INTERNAL_PROGRAM_ERROR  =  5,
+    U_MESSAGE_PARSE_ERROR     =  6,
+    U_MEMORY_ALLOCATION_ERROR =  7,
+    U_INDEX_OUTOFBOUNDS_ERROR =  8,
+    U_PARSE_ERROR             =  9,
+    U_INVALID_CHAR_FOUND      = 10,
+    U_TRUNCATED_CHAR_FOUND    = 11,
+    U_ILLEGAL_CHAR_FOUND      = 12,
+    U_INVALID_TABLE_FORMAT    = 13,
+    U_INVALID_TABLE_FILE      = 14,
+    U_BUFFER_OVERFLOW_ERROR   = 15,
+    U_UNSUPPORTED_ERROR       = 16,
+    U_RESOURCE_TYPE_MISMATCH  = 17,
+    U_ILLEGAL_ESCAPE_SEQUENCE = 18,
+    U_UNSUPPORTED_ESCAPE_SEQUENCE = 19,
+    U_NO_SPACE_AVAILABLE      = 20,
+    U_CE_NOT_FOUND_ERROR      = 21,
+    U_PRIMARY_TOO_LONG_ERROR  = 22,
+    U_STATE_TOO_OLD_ERROR     = 23,
+    U_TOO_MANY_ALIASES_ERROR  = 24,
+    U_ENUM_OUT_OF_SYNC_ERROR  = 25,
+    U_INVARIANT_CONVERSION_ERROR = 26,
+    U_INVALID_STATE_ERROR     = 27,
+    U_COLLATOR_VERSION_MISMATCH = 28,
+    U_USELESS_COLLATOR_ERROR  = 29,
+    U_NO_WRITE_PERMISSION     = 30,
+    U_STANDARD_ERROR_LIMIT,
+    U_BAD_VARIABLE_DEFINITION=0x10000,
+    U_PARSE_ERROR_START = 0x10000,
+    U_MALFORMED_RULE,
+    U_MALFORMED_SET,
+    U_MALFORMED_SYMBOL_REFERENCE,
+    U_MALFORMED_UNICODE_ESCAPE,
+    U_MALFORMED_VARIABLE_DEFINITION,
+    U_MALFORMED_VARIABLE_REFERENCE,
+    U_MISMATCHED_SEGMENT_DELIMITERS,
+    U_MISPLACED_ANCHOR_START,
+    U_MISPLACED_CURSOR_OFFSET,
+    U_MISPLACED_QUANTIFIER,
+    U_MISSING_OPERATOR,
+    U_MISSING_SEGMENT_CLOSE,
+    U_MULTIPLE_ANTE_CONTEXTS,
+    U_MULTIPLE_CURSORS,
+    U_MULTIPLE_POST_CONTEXTS,
+    U_TRAILING_BACKSLASH,
+    U_UNDEFINED_SEGMENT_REFERENCE,
+    U_UNDEFINED_VARIABLE,
+    U_UNQUOTED_SPECIAL,
+    U_UNTERMINATED_QUOTE,
+    U_RULE_MASK_ERROR,
+    U_MISPLACED_COMPOUND_FILTER,
+    U_MULTIPLE_COMPOUND_FILTERS,
+    U_INVALID_RBT_SYNTAX,
+    U_INVALID_PROPERTY_PATTERN,
+    U_MALFORMED_PRAGMA,
+    U_UNCLOSED_SEGMENT,
+    U_ILLEGAL_CHAR_IN_SEGMENT,
+    U_VARIABLE_RANGE_EXHAUSTED,
+    U_VARIABLE_RANGE_OVERLAP,
+    U_ILLEGAL_CHARACTER,
+    U_INTERNAL_TRANSLITERATOR_ERROR,
+    U_INVALID_ID,
+    U_INVALID_FUNCTION,
+    U_PARSE_ERROR_LIMIT,
+    U_UNEXPECTED_TOKEN=0x10100,
+    U_FMT_PARSE_ERROR_START=0x10100,
+    U_MULTIPLE_DECIMAL_SEPARATORS,
+    U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS,
+    U_MULTIPLE_EXPONENTIAL_SYMBOLS,
+    U_MALFORMED_EXPONENTIAL_PATTERN,
+    U_MULTIPLE_PERCENT_SYMBOLS,
+    U_MULTIPLE_PERMILL_SYMBOLS,
+    U_MULTIPLE_PAD_SPECIFIERS,
+    U_PATTERN_SYNTAX_ERROR,
+    U_ILLEGAL_PAD_POSITION,
+    U_UNMATCHED_BRACES,
+    U_UNSUPPORTED_PROPERTY,
+    U_UNSUPPORTED_ATTRIBUTE,
+    U_ARGUMENT_TYPE_MISMATCH,
+    U_DUPLICATE_KEYWORD,
+    U_UNDEFINED_KEYWORD,
+    U_DEFAULT_KEYWORD_MISSING,
+    U_DECIMAL_NUMBER_SYNTAX_ERROR,
+    U_FORMAT_INEXACT_ERROR,
+    U_FMT_PARSE_ERROR_LIMIT,
+    U_BRK_INTERNAL_ERROR=0x10200,
+    U_BRK_ERROR_START=0x10200,
+    U_BRK_HEX_DIGITS_EXPECTED,
+    U_BRK_SEMICOLON_EXPECTED,
+    U_BRK_RULE_SYNTAX,
+    U_BRK_UNCLOSED_SET,
+    U_BRK_ASSIGN_ERROR,
+    U_BRK_VARIABLE_REDFINITION,
+    U_BRK_MISMATCHED_PAREN,
+    U_BRK_NEW_LINE_IN_QUOTED_STRING,
+    U_BRK_UNDEFINED_VARIABLE,
+    U_BRK_INIT_ERROR,
+    U_BRK_RULE_EMPTY_SET,
+    U_BRK_UNRECOGNIZED_OPTION,
+    U_BRK_MALFORMED_RULE_TAG,
+    U_BRK_ERROR_LIMIT,
+    U_REGEX_INTERNAL_ERROR=0x10300,
+    U_REGEX_ERROR_START=0x10300,
+    U_REGEX_RULE_SYNTAX,
+    U_REGEX_INVALID_STATE,
+    U_REGEX_BAD_ESCAPE_SEQUENCE,
+    U_REGEX_PROPERTY_SYNTAX,
+    U_REGEX_UNIMPLEMENTED,
+    U_REGEX_MISMATCHED_PAREN,
+    U_REGEX_NUMBER_TOO_BIG,
+    U_REGEX_BAD_INTERVAL,
+    U_REGEX_MAX_LT_MIN,
+    U_REGEX_INVALID_BACK_REF,
+    U_REGEX_INVALID_FLAG,
+    U_REGEX_LOOK_BEHIND_LIMIT,
+    U_REGEX_SET_CONTAINS_STRING,
+    U_REGEX_OCTAL_TOO_BIG,
+    U_REGEX_MISSING_CLOSE_BRACKET=U_REGEX_SET_CONTAINS_STRING+2,
+    U_REGEX_INVALID_RANGE,
+    U_REGEX_STACK_OVERFLOW,
+    U_REGEX_TIME_OUT,
+    U_REGEX_STOPPED_BY_CALLER,
+    U_REGEX_PATTERN_TOO_BIG,
+    U_REGEX_INVALID_CAPTURE_GROUP_NAME,
+    U_REGEX_ERROR_LIMIT=U_REGEX_STOPPED_BY_CALLER+3,
+    U_IDNA_PROHIBITED_ERROR=0x10400,
+    U_IDNA_ERROR_START=0x10400,
+    U_IDNA_UNASSIGNED_ERROR,
+    U_IDNA_CHECK_BIDI_ERROR,
+    U_IDNA_STD3_ASCII_RULES_ERROR,
+    U_IDNA_ACE_PREFIX_ERROR,
+    U_IDNA_VERIFICATION_ERROR,
+    U_IDNA_LABEL_TOO_LONG_ERROR,
+    U_IDNA_ZERO_LENGTH_LABEL_ERROR,
+    U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR,
+    U_IDNA_ERROR_LIMIT,
+    U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR,
+    U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR,
+    U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR,
+    U_PLUGIN_ERROR_START=0x10500,
+    U_PLUGIN_TOO_HIGH=0x10500,
+    U_PLUGIN_DIDNT_SET_LEVEL,
+    U_PLUGIN_ERROR_LIMIT,
+    U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT
+};
+
+static inline UBool
+U_FAILURE(UErrorCode code)
+{
+    return code>U_ZERO_ERROR;
+}
+
+inline const UChar*
+Char16ToUChar(const char16_t* chars)
+{
+    return chars;
+}
+
+inline UChar*
+Char16ToUChar(char16_t* chars)
+{
+    return chars;
+}
+
 static int32_t
 u_strlen(const UChar* s)
 {
     MOZ_CRASH("u_strlen: Intl API disabled");
 }
 
 struct UEnumeration;
 
--- a/js/src/builtin/Intl.h
+++ b/js/src/builtin/Intl.h
@@ -3,17 +3,19 @@
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef builtin_Intl_h
 #define builtin_Intl_h
 
 #include "NamespaceImports.h"
+#if ENABLE_INTL_API
 #include "unicode/utypes.h"
+#endif
 
 /*
  * The Intl module specified by standard ECMA-402,
  * ECMAScript Internationalization API Specification.
  */
 
 namespace js {
 
@@ -174,26 +176,28 @@ intl_patternForSkeleton(JSContext* cx, u
  *
  * Spec: ECMAScript Internationalization API Specification, 12.3.2.
  *
  * Usage: formatted = intl_FormatDateTime(dateTimeFormat, x)
  */
 extern MOZ_MUST_USE bool
 intl_FormatDateTime(JSContext* cx, unsigned argc, Value* vp);
 
+#if ENABLE_INTL_API
 /**
  * Cast char16_t* strings to UChar* strings used by ICU.
  */
 inline const UChar*
 Char16ToUChar(const char16_t* chars)
 {
   return reinterpret_cast<const UChar*>(chars);
 }
 
 inline UChar*
 Char16ToUChar(char16_t* chars)
 {
   return reinterpret_cast<UChar*>(chars);
 }
+#endif // ENABLE_INTL_API
 
 } // namespace js
 
 #endif /* builtin_Intl_h */