8 #include "unicode/brkiter.h"
9 #include "unicode/calendar.h"
10 #include "unicode/coll.h"
11 #include "unicode/curramt.h"
12 #include "unicode/dcfmtsym.h"
13 #include "unicode/decimfmt.h"
14 #include "unicode/dtfmtsym.h"
15 #include "unicode/dtptngen.h"
16 #include "unicode/locid.h"
17 #include "unicode/numfmt.h"
18 #include "unicode/numsys.h"
19 #include "unicode/rbbi.h"
20 #include "unicode/smpdtfmt.h"
21 #include "unicode/timezone.h"
22 #include "unicode/uchar.h"
23 #include "unicode/ucol.h"
24 #include "unicode/ucurr.h"
25 #include "unicode/unum.h"
26 #include "unicode/uversion.h"
36 icu::UnicodeString* setting) {
39 if (object->IsString()) {
42 *setting = icu::UnicodeString::fromUTF8(*utf8_string);
55 if (object->IsNumber()) {
56 object->ToInt32(value);
69 if (object->IsBoolean()) {
70 *value =
object->BooleanValue();
79 const icu::Locale& icu_locale,
83 icu::TimeZone* tz =
NULL;
84 icu::UnicodeString timezone;
86 tz = icu::TimeZone::createTimeZone(timezone);
88 tz = icu::TimeZone::createDefault();
92 UErrorCode status = U_ZERO_ERROR;
93 icu::Calendar* calendar =
94 icu::Calendar::createInstance(tz, icu_locale, status);
98 icu::SimpleDateFormat* date_format =
NULL;
99 icu::UnicodeString skeleton;
101 icu::DateTimePatternGenerator* generator =
102 icu::DateTimePatternGenerator::createInstance(icu_locale, status);
103 icu::UnicodeString pattern;
104 if (U_SUCCESS(status)) {
105 pattern = generator->getBestPattern(skeleton, status);
109 date_format =
new icu::SimpleDateFormat(pattern, icu_locale, status);
110 if (U_SUCCESS(status)) {
111 date_format->adoptCalendar(calendar);
115 if (U_FAILURE(status)) {
126 const icu::Locale& icu_locale,
127 icu::SimpleDateFormat* date_format,
129 Factory* factory = isolate->
factory();
130 UErrorCode status = U_ZERO_ERROR;
131 icu::UnicodeString pattern;
132 date_format->toPattern(pattern);
134 resolved, factory->NewStringFromStaticChars(
"pattern"),
135 factory->NewStringFromTwoByte(
137 reinterpret_cast<const uint16_t*
>(pattern.getBuffer()),
138 pattern.length())).ToHandleChecked(),
142 const icu::Calendar* calendar = date_format->getCalendar();
143 const char* calendar_name = calendar->getType();
145 factory->NewStringFromAsciiChecked(calendar_name),
148 const icu::TimeZone& tz = calendar->getTimeZone();
149 icu::UnicodeString time_zone;
152 icu::UnicodeString canonical_time_zone;
153 icu::TimeZone::getCanonicalID(time_zone, canonical_time_zone, status);
154 if (U_SUCCESS(status)) {
155 if (canonical_time_zone == UNICODE_STRING_SIMPLE(
"Etc/GMT")) {
157 resolved, factory->NewStringFromStaticChars(
"timeZone"),
158 factory->NewStringFromStaticChars(
"UTC"),
SLOPPY).Assert();
161 resolved, factory->NewStringFromStaticChars(
"timeZone"),
162 factory->NewStringFromTwoByte(
165 canonical_time_zone.getBuffer()),
166 canonical_time_zone.length())).ToHandleChecked(),
174 status = U_ZERO_ERROR;
175 icu::NumberingSystem* numbering_system =
176 icu::NumberingSystem::createInstance(icu_locale, status);
177 if (U_SUCCESS(status)) {
178 const char* ns = numbering_system->getName();
180 resolved, factory->NewStringFromStaticChars(
"numberingSystem"),
181 factory->NewStringFromAsciiChecked(ns),
SLOPPY).Assert();
184 factory->NewStringFromStaticChars(
"numberingSystem"),
185 factory->undefined_value(),
SLOPPY).Assert();
187 delete numbering_system;
190 char result[ULOC_FULLNAME_CAPACITY];
191 status = U_ZERO_ERROR;
193 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
194 if (U_SUCCESS(status)) {
196 factory->NewStringFromAsciiChecked(result),
201 factory->NewStringFromStaticChars(
"und"),
207 template<
int internal_fields, EternalHandles::SingletonHandle field>
215 raw_template->SetInternalFieldCount(internal_fields);
226 const icu::Locale& icu_locale,
230 UErrorCode status = U_ZERO_ERROR;
231 icu::DecimalFormat* number_format =
NULL;
232 icu::UnicodeString style;
233 icu::UnicodeString currency;
235 if (style == UNICODE_STRING_SIMPLE(
"currency")) {
236 icu::UnicodeString display;
240 #if (U_ICU_VERSION_MAJOR_NUM == 4) && (U_ICU_VERSION_MINOR_NUM <= 6)
241 icu::NumberFormat::EStyles format_style;
242 if (display == UNICODE_STRING_SIMPLE(
"code")) {
243 format_style = icu::NumberFormat::kIsoCurrencyStyle;
244 }
else if (display == UNICODE_STRING_SIMPLE(
"name")) {
245 format_style = icu::NumberFormat::kPluralCurrencyStyle;
247 format_style = icu::NumberFormat::kCurrencyStyle;
250 UNumberFormatStyle format_style;
251 if (display == UNICODE_STRING_SIMPLE(
"code")) {
252 format_style = UNUM_CURRENCY_ISO;
253 }
else if (display == UNICODE_STRING_SIMPLE(
"name")) {
254 format_style = UNUM_CURRENCY_PLURAL;
256 format_style = UNUM_CURRENCY;
260 number_format =
static_cast<icu::DecimalFormat*
>(
261 icu::NumberFormat::createInstance(icu_locale, format_style, status));
262 }
else if (style == UNICODE_STRING_SIMPLE(
"percent")) {
263 number_format =
static_cast<icu::DecimalFormat*
>(
264 icu::NumberFormat::createPercentInstance(icu_locale, status));
265 if (U_FAILURE(status)) {
266 delete number_format;
270 number_format->setMinimumFractionDigits(1);
273 number_format =
static_cast<icu::DecimalFormat*
>(
274 icu::NumberFormat::createInstance(icu_locale, status));
278 if (U_FAILURE(status)) {
279 delete number_format;
284 if (!currency.isEmpty()) {
285 number_format->setCurrency(currency.getBuffer(), status);
290 isolate, options,
"minimumIntegerDigits", &digits)) {
291 number_format->setMinimumIntegerDigits(digits);
295 isolate, options,
"minimumFractionDigits", &digits)) {
296 number_format->setMinimumFractionDigits(digits);
300 isolate, options,
"maximumFractionDigits", &digits)) {
301 number_format->setMaximumFractionDigits(digits);
304 bool significant_digits_used =
false;
306 isolate, options,
"minimumSignificantDigits", &digits)) {
307 number_format->setMinimumSignificantDigits(digits);
308 significant_digits_used =
true;
312 isolate, options,
"maximumSignificantDigits", &digits)) {
313 number_format->setMaximumSignificantDigits(digits);
314 significant_digits_used =
true;
317 number_format->setSignificantDigitsUsed(significant_digits_used);
321 number_format->setGroupingUsed(grouping);
325 number_format->setRoundingMode(icu::DecimalFormat::kRoundHalfUp);
327 return number_format;
332 const icu::Locale& icu_locale,
333 icu::DecimalFormat* number_format,
335 Factory* factory = isolate->
factory();
336 icu::UnicodeString pattern;
337 number_format->toPattern(pattern);
339 resolved, factory->NewStringFromStaticChars(
"pattern"),
340 factory->NewStringFromTwoByte(
342 reinterpret_cast<const uint16_t*
>(pattern.getBuffer()),
343 pattern.length())).ToHandleChecked(),
347 icu::UnicodeString currency(number_format->getCurrency());
348 if (!currency.isEmpty()) {
350 resolved, factory->NewStringFromStaticChars(
"currency"),
353 currency.getBuffer()),
354 currency.length())).ToHandleChecked(),
361 UErrorCode status = U_ZERO_ERROR;
362 icu::NumberingSystem* numbering_system =
363 icu::NumberingSystem::createInstance(icu_locale, status);
364 if (U_SUCCESS(status)) {
365 const char* ns = numbering_system->getName();
367 resolved, factory->NewStringFromStaticChars(
"numberingSystem"),
368 factory->NewStringFromAsciiChecked(ns),
SLOPPY).Assert();
371 factory->NewStringFromStaticChars(
"numberingSystem"),
372 factory->undefined_value(),
SLOPPY).Assert();
374 delete numbering_system;
377 resolved, factory->NewStringFromStaticChars(
"useGrouping"),
378 factory->ToBoolean(number_format->isGroupingUsed()),
SLOPPY).Assert();
381 resolved, factory->NewStringFromStaticChars(
"minimumIntegerDigits"),
382 factory->NewNumberFromInt(number_format->getMinimumIntegerDigits()),
386 resolved, factory->NewStringFromStaticChars(
"minimumFractionDigits"),
387 factory->NewNumberFromInt(number_format->getMinimumFractionDigits()),
391 resolved, factory->NewStringFromStaticChars(
"maximumFractionDigits"),
392 factory->NewNumberFromInt(number_format->getMaximumFractionDigits()),
396 factory->NewStringFromStaticChars(
"minimumSignificantDigits");
401 resolved, factory->NewStringFromStaticChars(
"minimumSignificantDigits"),
402 factory->NewNumberFromInt(number_format->getMinimumSignificantDigits()),
406 key = factory->NewStringFromStaticChars(
"maximumSignificantDigits");
411 resolved, factory->NewStringFromStaticChars(
"maximumSignificantDigits"),
412 factory->NewNumberFromInt(number_format->getMaximumSignificantDigits()),
417 char result[ULOC_FULLNAME_CAPACITY];
418 status = U_ZERO_ERROR;
420 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
421 if (U_SUCCESS(status)) {
423 factory->NewStringFromAsciiChecked(result),
428 factory->NewStringFromStaticChars(
"und"),
436 const icu::Locale& icu_locale,
439 icu::Collator* collator =
NULL;
440 UErrorCode status = U_ZERO_ERROR;
441 collator = icu::Collator::createInstance(icu_locale, status);
443 if (U_FAILURE(status)) {
451 collator->setAttribute(
452 UCOL_NUMERIC_COLLATION, numeric ? UCOL_ON : UCOL_OFF, status);
458 collator->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
460 icu::UnicodeString case_first;
462 if (case_first == UNICODE_STRING_SIMPLE(
"upper")) {
463 collator->setAttribute(UCOL_CASE_FIRST, UCOL_UPPER_FIRST, status);
464 }
else if (case_first == UNICODE_STRING_SIMPLE(
"lower")) {
465 collator->setAttribute(UCOL_CASE_FIRST, UCOL_LOWER_FIRST, status);
468 collator->setAttribute(UCOL_CASE_FIRST, UCOL_OFF, status);
472 icu::UnicodeString sensitivity;
474 if (sensitivity == UNICODE_STRING_SIMPLE(
"base")) {
475 collator->setStrength(icu::Collator::PRIMARY);
476 }
else if (sensitivity == UNICODE_STRING_SIMPLE(
"accent")) {
477 collator->setStrength(icu::Collator::SECONDARY);
478 }
else if (sensitivity == UNICODE_STRING_SIMPLE(
"case")) {
479 collator->setStrength(icu::Collator::PRIMARY);
480 collator->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status);
483 collator->setStrength(icu::Collator::TERTIARY);
490 collator->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, status);
499 const icu::Locale& icu_locale,
500 icu::Collator* collator,
502 Factory* factory = isolate->
factory();
503 UErrorCode status = U_ZERO_ERROR;
506 resolved, factory->NewStringFromStaticChars(
"numeric"),
508 collator->getAttribute(UCOL_NUMERIC_COLLATION, status) == UCOL_ON),
511 switch (collator->getAttribute(UCOL_CASE_FIRST, status)) {
512 case UCOL_LOWER_FIRST:
514 resolved, factory->NewStringFromStaticChars(
"caseFirst"),
515 factory->NewStringFromStaticChars(
"lower"),
SLOPPY).Assert();
517 case UCOL_UPPER_FIRST:
519 resolved, factory->NewStringFromStaticChars(
"caseFirst"),
520 factory->NewStringFromStaticChars(
"upper"),
SLOPPY).Assert();
524 resolved, factory->NewStringFromStaticChars(
"caseFirst"),
525 factory->NewStringFromStaticChars(
"false"),
SLOPPY).Assert();
528 switch (collator->getAttribute(UCOL_STRENGTH, status)) {
531 resolved, factory->NewStringFromStaticChars(
"strength"),
532 factory->NewStringFromStaticChars(
"primary"),
SLOPPY).Assert();
535 if (UCOL_ON == collator->getAttribute(UCOL_CASE_LEVEL, status)) {
537 resolved, factory->NewStringFromStaticChars(
"sensitivity"),
538 factory->NewStringFromStaticChars(
"case"),
SLOPPY).Assert();
541 resolved, factory->NewStringFromStaticChars(
"sensitivity"),
542 factory->NewStringFromStaticChars(
"base"),
SLOPPY).Assert();
548 resolved, factory->NewStringFromStaticChars(
"strength"),
549 factory->NewStringFromStaticChars(
"secondary"),
SLOPPY).Assert();
551 resolved, factory->NewStringFromStaticChars(
"sensitivity"),
552 factory->NewStringFromStaticChars(
"accent"),
SLOPPY).Assert();
556 resolved, factory->NewStringFromStaticChars(
"strength"),
557 factory->NewStringFromStaticChars(
"tertiary"),
SLOPPY).Assert();
559 resolved, factory->NewStringFromStaticChars(
"sensitivity"),
560 factory->NewStringFromStaticChars(
"variant"),
SLOPPY).Assert();
562 case UCOL_QUATERNARY:
566 resolved, factory->NewStringFromStaticChars(
"strength"),
567 factory->NewStringFromStaticChars(
"quaternary"),
SLOPPY).Assert();
569 resolved, factory->NewStringFromStaticChars(
"sensitivity"),
570 factory->NewStringFromStaticChars(
"variant"),
SLOPPY).Assert();
574 resolved, factory->NewStringFromStaticChars(
"strength"),
575 factory->NewStringFromStaticChars(
"identical"),
SLOPPY).Assert();
577 resolved, factory->NewStringFromStaticChars(
"sensitivity"),
578 factory->NewStringFromStaticChars(
"variant"),
SLOPPY).Assert();
582 resolved, factory->NewStringFromStaticChars(
"ignorePunctuation"),
583 factory->ToBoolean(collator->getAttribute(UCOL_ALTERNATE_HANDLING,
584 status) == UCOL_SHIFTED),
588 char result[ULOC_FULLNAME_CAPACITY];
589 status = U_ZERO_ERROR;
591 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
592 if (U_SUCCESS(status)) {
594 factory->NewStringFromAsciiChecked(result),
599 factory->NewStringFromStaticChars(
"und"),
607 const icu::Locale& icu_locale,
609 UErrorCode status = U_ZERO_ERROR;
610 icu::BreakIterator* break_iterator =
NULL;
611 icu::UnicodeString type;
614 if (type == UNICODE_STRING_SIMPLE(
"character")) {
616 icu::BreakIterator::createCharacterInstance(icu_locale, status);
617 }
else if (type == UNICODE_STRING_SIMPLE(
"sentence")) {
619 icu::BreakIterator::createSentenceInstance(icu_locale, status);
620 }
else if (type == UNICODE_STRING_SIMPLE(
"line")) {
622 icu::BreakIterator::createLineInstance(icu_locale, status);
626 icu::BreakIterator::createWordInstance(icu_locale, status);
629 if (U_FAILURE(status)) {
630 delete break_iterator;
634 return break_iterator;
639 const icu::Locale& icu_locale,
640 icu::BreakIterator* break_iterator,
642 Factory* factory = isolate->
factory();
643 UErrorCode status = U_ZERO_ERROR;
646 char result[ULOC_FULLNAME_CAPACITY];
647 status = U_ZERO_ERROR;
649 icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
650 if (U_SUCCESS(status)) {
652 factory->NewStringFromAsciiChecked(result),
657 factory->NewStringFromStaticChars(
"und"),
667 return GetEternal<1, i::EternalHandles::I18N_TEMPLATE_ONE>(isolate);
673 return GetEternal<2, i::EternalHandles::I18N_TEMPLATE_TWO>(isolate);
684 UErrorCode status = U_ZERO_ERROR;
685 icu::Locale icu_locale;
686 char icu_result[ULOC_FULLNAME_CAPACITY];
689 if (bcp47_locale.
length() != 0) {
690 uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
691 &icu_length, &status);
692 if (U_FAILURE(status) || icu_length == 0) {
695 icu_locale = icu::Locale(icu_result);
699 isolate, icu_locale, options);
702 icu::Locale no_extension_locale(icu_locale.getBaseName());
707 isolate, no_extension_locale, date_format, resolved);
720 isolate->
factory()->NewStringFromStaticChars(
"dateFormat");
724 return reinterpret_cast<icu::SimpleDateFormat*
>(
725 obj->GetInternalField(0));
736 delete reinterpret_cast<T*
>(obj->GetAlignedPointerFromInternalField(index));
748 DeleteNativeObjectAt<icu::SimpleDateFormat>(data, 0);
759 UErrorCode status = U_ZERO_ERROR;
760 icu::Locale icu_locale;
761 char icu_result[ULOC_FULLNAME_CAPACITY];
764 if (bcp47_locale.
length() != 0) {
765 uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
766 &icu_length, &status);
767 if (U_FAILURE(status) || icu_length == 0) {
770 icu_locale = icu::Locale(icu_result);
773 icu::DecimalFormat* number_format =
775 if (!number_format) {
777 icu::Locale no_extension_locale(icu_locale.getBaseName());
779 isolate, no_extension_locale, options);
783 isolate, no_extension_locale, number_format, resolved);
788 return number_format;
796 isolate->
factory()->NewStringFromStaticChars(
"numberFormat");
800 return reinterpret_cast<icu::DecimalFormat*
>(obj->GetInternalField(0));
809 DeleteNativeObjectAt<icu::DecimalFormat>(data, 0);
820 UErrorCode status = U_ZERO_ERROR;
821 icu::Locale icu_locale;
822 char icu_result[ULOC_FULLNAME_CAPACITY];
825 if (bcp47_locale.
length() != 0) {
826 uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
827 &icu_length, &status);
828 if (U_FAILURE(status) || icu_length == 0) {
831 icu_locale = icu::Locale(icu_result);
837 icu::Locale no_extension_locale(icu_locale.getBaseName());
842 isolate, no_extension_locale, collator, resolved);
857 return reinterpret_cast<icu::Collator*
>(obj->GetInternalField(0));
866 DeleteNativeObjectAt<icu::Collator>(data, 0);
877 UErrorCode status = U_ZERO_ERROR;
878 icu::Locale icu_locale;
879 char icu_result[ULOC_FULLNAME_CAPACITY];
882 if (bcp47_locale.
length() != 0) {
883 uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
884 &icu_length, &status);
885 if (U_FAILURE(status) || icu_length == 0) {
888 icu_locale = icu::Locale(icu_result);
892 isolate, icu_locale, options);
893 if (!break_iterator) {
895 icu::Locale no_extension_locale(icu_locale.getBaseName());
897 isolate, no_extension_locale, options);
901 isolate, no_extension_locale, break_iterator, resolved);
904 isolate, icu_locale, break_iterator, resolved);
907 return break_iterator;
914 isolate->
factory()->NewStringFromStaticChars(
"breakIterator");
918 return reinterpret_cast<icu::BreakIterator*
>(obj->GetInternalField(0));
927 DeleteNativeObjectAt<icu::BreakIterator>(data, 0);
928 DeleteNativeObjectAt<icu::UnicodeString>(data, 1);
static Handle< T > Cast(Handle< S > that)
Isolate represents an isolated instance of the V8 engine.
A light-weight stack-allocated object handle.
static Local< ObjectTemplate > New()
Converts an object to a UTF-8-encoded character array.
static Local< Context > ToLocal(v8::internal::Handle< v8::internal::Context > obj)
static v8::internal::Handle< To > OpenHandle(v8::Local< From > handle)
Local< T > GetValue() const
static icu::BreakIterator * UnpackBreakIterator(Isolate *isolate, Handle< JSObject > obj)
static icu::BreakIterator * InitializeBreakIterator(Isolate *isolate, Handle< String > locale, Handle< JSObject > options, Handle< JSObject > resolved)
static void DeleteBreakIterator(const v8::WeakCallbackData< v8::Value, void > &data)
static icu::Collator * UnpackCollator(Isolate *isolate, Handle< JSObject > obj)
static void DeleteCollator(const v8::WeakCallbackData< v8::Value, void > &data)
static icu::Collator * InitializeCollator(Isolate *isolate, Handle< String > locale, Handle< JSObject > options, Handle< JSObject > resolved)
bool Exists(SingletonHandle singleton)
Handle< Object > CreateSingleton(Isolate *isolate, Object *object, SingletonHandle singleton)
Handle< Object > GetSingleton(SingletonHandle singleton)
static void Destroy(Object **location)
static Handle< T > cast(Handle< S > that)
static Handle< ObjectTemplateInfo > GetTemplate(Isolate *isolate)
static Handle< ObjectTemplateInfo > GetTemplate2(Isolate *isolate)
EternalHandles * eternal_handles()
static MUST_USE_RESULT Maybe< bool > HasOwnProperty(Handle< JSReceiver >, Handle< Name > name)
static MUST_USE_RESULT MaybeHandle< Object > GetProperty(LookupIterator *it)
static MUST_USE_RESULT MaybeHandle< Object > SetProperty(Handle< Object > object, Handle< Name > key, Handle< Object > value, StrictMode strict_mode, StoreFromKeyed store_mode=MAY_BE_STORE_FROM_KEYED)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
bool ExtractStringSetting(Isolate *isolate, Handle< JSObject > options, const char *key, icu::UnicodeString *setting)
void SetResolvedCollatorSettings(Isolate *isolate, const icu::Locale &icu_locale, icu::Collator *collator, Handle< JSObject > resolved)
void SetResolvedBreakIteratorSettings(Isolate *isolate, const icu::Locale &icu_locale, icu::BreakIterator *break_iterator, Handle< JSObject > resolved)
bool ExtractIntegerSetting(Isolate *isolate, Handle< JSObject > options, const char *key, int32_t *value)
void SetResolvedNumberSettings(Isolate *isolate, const icu::Locale &icu_locale, icu::DecimalFormat *number_format, Handle< JSObject > resolved)
icu::BreakIterator * CreateICUBreakIterator(Isolate *isolate, const icu::Locale &icu_locale, Handle< JSObject > options)
void SetResolvedDateSettings(Isolate *isolate, const icu::Locale &icu_locale, icu::SimpleDateFormat *date_format, Handle< JSObject > resolved)
icu::SimpleDateFormat * CreateICUDateFormat(Isolate *isolate, const icu::Locale &icu_locale, Handle< JSObject > options)
icu::Collator * CreateICUCollator(Isolate *isolate, const icu::Locale &icu_locale, Handle< JSObject > options)
Handle< ObjectTemplateInfo > GetEternal(Isolate *isolate)
icu::DecimalFormat * CreateICUNumberFormat(Isolate *isolate, const icu::Locale &icu_locale, Handle< JSObject > options)
bool ExtractBooleanSetting(Isolate *isolate, Handle< JSObject > options, const char *key, bool *value)
static void DestroyGlobalHandle(const v8::WeakCallbackData< v8::Value, void > &data)
void DeleteNativeObjectAt(const v8::WeakCallbackData< v8::Value, void > &data, int index)
Debugger support for the V8 JavaScript engine.
A simple Maybe type, representing an object which may or may not have a value.
#define T(name, string, precedence)