Bug 966559 - Use public C API for NumberingSystem. r?waldo
MozReview-Commit-ID: CBICCJQXI7R
--- a/config/check_spidermonkey_style.py
+++ b/config/check_spidermonkey_style.py
@@ -75,27 +75,26 @@ included_inclnames_to_ignore = set([
'private/pprio.h', # NSPR
'prlink.h', # NSPR
'prlock.h', # NSPR
'prprf.h', # NSPR
'prthread.h', # NSPR
'prtypes.h', # NSPR
'selfhosted.out.h', # generated in $OBJDIR
'shellmoduleloader.out.h', # generated in $OBJDIR
- 'unicode/locid.h', # ICU
- 'unicode/numsys.h', # ICU
'unicode/timezone.h', # ICU
'unicode/ucal.h', # ICU
'unicode/uclean.h', # ICU
'unicode/ucol.h', # ICU
'unicode/udat.h', # ICU
'unicode/udatpg.h', # ICU
'unicode/uenum.h', # ICU
'unicode/unorm.h', # ICU
'unicode/unum.h', # ICU
+ 'unicode/unumsys.h', # ICU
'unicode/ustring.h', # ICU
'unicode/utypes.h', # ICU
'vtune/VTuneWrapper.h' # VTune
])
# These files have additional constraints on where they are #included, so we
# ignore #includes of them when checking #include ordering.
oddly_ordered_inclnames = set([
--- a/js/src/builtin/Intl.cpp
+++ b/js/src/builtin/Intl.cpp
@@ -18,24 +18,23 @@
#include <string.h>
#include "jsapi.h"
#include "jsatom.h"
#include "jscntxt.h"
#include "jsobj.h"
#if ENABLE_INTL_API
-#include "unicode/locid.h"
-#include "unicode/numsys.h"
#include "unicode/ucal.h"
#include "unicode/ucol.h"
#include "unicode/udat.h"
#include "unicode/udatpg.h"
#include "unicode/uenum.h"
#include "unicode/unum.h"
+#include "unicode/unumsys.h"
#include "unicode/ustring.h"
#endif
#include "vm/DateTime.h"
#include "vm/GlobalObject.h"
#include "vm/Interpreter.h"
#include "vm/Stack.h"
#include "vm/StringBuffer.h"
#include "vm/Unicode.h"
@@ -46,21 +45,16 @@
using namespace js;
using mozilla::IsFinite;
using mozilla::IsNegativeZero;
using mozilla::MakeScopeExit;
using mozilla::PodCopy;
-#if ENABLE_INTL_API
-using icu::Locale;
-using icu::NumberingSystem;
-#endif
-
/*
* Pervasive note: ICU functions taking a UErrorCode in/out parameter always
* test that parameter before doing anything, and will return immediately if
* the value indicates that a failure occurred in a prior ICU call,
* without doing anything else. See
* http://userguide.icu-project.org/design#TOC-Error-Handling
*/
@@ -278,44 +272,34 @@ unum_close(UNumberFormat* fmt)
static void
unum_setTextAttribute(UNumberFormat* fmt, UNumberFormatTextAttribute tag, const UChar* newValue,
int32_t newValueLength, UErrorCode* status)
{
MOZ_CRASH("unum_setTextAttribute: Intl API disabled");
}
-class Locale {
- public:
- explicit Locale(const char* language, const char* country = 0, const char* variant = 0,
- const char* keywordsAndValues = 0);
-};
-
-Locale::Locale(const char* language, const char* country, const char* variant,
- const char* keywordsAndValues)
+typedef void* UNumberingSystem;
+
+static UNumberingSystem*
+unumsys_open(const char* locale, UErrorCode* status)
{
- MOZ_CRASH("Locale::Locale: Intl API disabled");
+ MOZ_CRASH("unumsys_open: Intl API disabled");
}
-class NumberingSystem {
- public:
- static NumberingSystem* createInstance(const Locale& inLocale, UErrorCode& status);
- const char* getName();
-};
-
-NumberingSystem*
-NumberingSystem::createInstance(const Locale& inLocale, UErrorCode& status)
+static const char*
+unumsys_getName(const UNumberingSystem* unumsys)
{
- MOZ_CRASH("NumberingSystem::createInstance: Intl API disabled");
+ MOZ_CRASH("unumsys_getName: Intl API disabled");
}
-const char*
-NumberingSystem::getName()
+static void
+unumsys_close(UNumberingSystem* unumsys)
{
- MOZ_CRASH("NumberingSystem::getName: Intl API disabled");
+ MOZ_CRASH("unumsys_close: Intl API disabled");
}
typedef void* UCalendar;
enum UCalendarType {
UCAL_TRADITIONAL,
UCAL_DEFAULT = UCAL_TRADITIONAL,
UCAL_GREGORIAN
@@ -1440,30 +1424,30 @@ js::intl_numberingSystem(JSContext* cx,
CallArgs args = CallArgsFromVp(argc, vp);
MOZ_ASSERT(args.length() == 1);
MOZ_ASSERT(args[0].isString());
JSAutoByteString locale(cx, args[0].toString());
if (!locale)
return false;
- // There's no C API for numbering system, so use the C++ API and hope it
- // won't break. http://bugs.icu-project.org/trac/ticket/10039
- Locale ulocale(locale.ptr());
UErrorCode status = U_ZERO_ERROR;
- NumberingSystem* numbers = NumberingSystem::createInstance(ulocale, status);
+ UNumberingSystem* numbers = unumsys_open(icuLocale(locale.ptr()), &status);
if (U_FAILURE(status)) {
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INTERNAL_INTL_ERROR);
return false;
}
- const char* name = numbers->getName();
+
+ ScopedICUObject<UNumberingSystem, unumsys_close> toClose(numbers);
+
+ const char* name = unumsys_getName(numbers);
RootedString jsname(cx, JS_NewStringCopyZ(cx, name));
- delete numbers;
if (!jsname)
return false;
+
args.rval().setString(jsname);
return true;
}
/**
* Returns a new UNumberFormat with the locale and number formatting options
* of the given NumberFormat.
*/