Ignore:
Timestamp:
Aug 22, 2020, 12:22:24 PM (5 years ago)
Author:
[email protected]
Message:

[JSC] Add Intl.Segmenter
https://bugs.webkit.org/show_bug.cgi?id=213638

Reviewed by Ross Kirsling.

JSTests:

  • stress/intl-segmenter.js: Added.

(shouldBe):
(shouldNotThrow):
(func):

  • test262/config.yaml:
  • test262/expectations.yaml:

Source/JavaScriptCore:

This patch implements Intl.Segmenter[1]. Intl.Segmenter offers access to ICU break iterator feature, which can break strings into grapheme cluster / words / sentences.

[1]: https://github.com/tc39/proposal-intl-segmenter

  • CMakeLists.txt:
  • DerivedSources-input.xcfilelist:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • Sources.txt:
  • runtime/CommonIdentifiers.h:
  • runtime/IntlObject.cpp:

(JSC::createSegmenterConstructor):
(JSC::IntlObject::finishCreation):
(JSC::intlSegmenterAvailableLocales):

  • runtime/IntlObject.h:
  • runtime/IntlSegmentIterator.cpp: Added.

(JSC::IntlSegmentIterator::create):
(JSC::IntlSegmentIterator::createStructure):
(JSC::IntlSegmentIterator::IntlSegmentIterator):
(JSC::IntlSegmentIterator::finishCreation):
(JSC::IntlSegmentIterator::visitChildren):
(JSC::IntlSegmentIterator::next):

  • runtime/IntlSegmentIterator.h: Added.
  • runtime/IntlSegmentIteratorPrototype.cpp: Added.

(JSC::IntlSegmentIteratorPrototype::create):
(JSC::IntlSegmentIteratorPrototype::createStructure):
(JSC::IntlSegmentIteratorPrototype::IntlSegmentIteratorPrototype):
(JSC::IntlSegmentIteratorPrototype::finishCreation):
(JSC::IntlSegmentIteratorPrototypeFuncNext):

  • runtime/IntlSegmentIteratorPrototype.h: Added.
  • runtime/IntlSegmenter.cpp: Added.

(JSC::IntlSegmenter::create):
(JSC::IntlSegmenter::createStructure):
(JSC::IntlSegmenter::IntlSegmenter):
(JSC::IntlSegmenter::finishCreation):
(JSC::IntlSegmenter::initializeSegmenter):
(JSC::IntlSegmenter::segment const):
(JSC::IntlSegmenter::resolvedOptions const):
(JSC::IntlSegmenter::granularityString):
(JSC::IntlSegmenter::createSegmentDataObject):

  • runtime/IntlSegmenter.h: Added.
  • runtime/IntlSegmenterConstructor.cpp: Added.

(JSC::IntlSegmenterConstructor::create):
(JSC::IntlSegmenterConstructor::createStructure):
(JSC::IntlSegmenterConstructor::IntlSegmenterConstructor):
(JSC::IntlSegmenterConstructor::finishCreation):
(JSC::constructIntlSegmenter):
(JSC::callIntlSegmenter):
(JSC::IntlSegmenterConstructorSupportedLocalesOf):

  • runtime/IntlSegmenterConstructor.h: Added.
  • runtime/IntlSegmenterPrototype.cpp: Added.

(JSC::IntlSegmenterPrototype::create):
(JSC::IntlSegmenterPrototype::createStructure):
(JSC::IntlSegmenterPrototype::IntlSegmenterPrototype):
(JSC::IntlSegmenterPrototype::finishCreation):
(JSC::IntlSegmenterPrototypeFuncSegment):
(JSC::IntlSegmenterPrototypeFuncResolvedOptions):

  • runtime/IntlSegmenterPrototype.h: Added.
  • runtime/IntlSegments.cpp: Added.

(JSC::IntlSegments::create):
(JSC::IntlSegments::createStructure):
(JSC::IntlSegments::IntlSegments):
(JSC::IntlSegments::finishCreation):
(JSC::IntlSegments::containing):
(JSC::IntlSegments::createSegmentIterator):
(JSC::IntlSegments::visitChildren):

  • runtime/IntlSegments.h: Added.
  • runtime/IntlSegmentsPrototype.cpp: Added.

(JSC::IntlSegmentsPrototype::create):
(JSC::IntlSegmentsPrototype::createStructure):
(JSC::IntlSegmentsPrototype::IntlSegmentsPrototype):
(JSC::IntlSegmentsPrototype::finishCreation):
(JSC::IntlSegmentsPrototypeFuncContaining):
(JSC::IntlSegmentsPrototypeFuncIterator):

  • runtime/IntlSegmentsPrototype.h: Added.
  • runtime/JSGlobalObject.cpp:

(JSC::JSGlobalObject::init):
(JSC::JSGlobalObject::visitChildren):

  • runtime/JSGlobalObject.h:

(JSC::JSGlobalObject::segmentIteratorStructure):
(JSC::JSGlobalObject::segmenterStructure):
(JSC::JSGlobalObject::segmentsStructure):

  • runtime/OptionsList.h:
  • runtime/VM.cpp:

(JSC::VM::VM):

  • runtime/VM.h:

Source/WTF:

  • wtf/text/WTFString.cpp:

(WTF::String::charactersWithoutNullTermination const):
(WTF::String::charactersWithNullTermination const):

  • wtf/text/WTFString.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/VM.cpp

    r265297 r266032  
    7373#include "IntlPluralRules.h"
    7474#include "IntlRelativeTimeFormat.h"
     75#include "IntlSegmentIterator.h"
     76#include "IntlSegmenter.h"
     77#include "IntlSegments.h"
    7578#include "IsoHeapCellType.h"
    7679#include "IsoInlinedHeapCellType.h"
     
    315318    , intlPluralRulesHeapCellType(IsoHeapCellType::create<IntlPluralRules>())
    316319    , intlRelativeTimeFormatHeapCellType(IsoHeapCellType::create<IntlRelativeTimeFormat>())
     320    , intlSegmentIteratorHeapCellType(IsoHeapCellType::create<IntlSegmentIterator>())
     321    , intlSegmenterHeapCellType(IsoHeapCellType::create<IntlSegmenter>())
     322    , intlSegmentsHeapCellType(IsoHeapCellType::create<IntlSegments>())
    317323#if ENABLE(WEBASSEMBLY)
    318324    , webAssemblyCodeBlockHeapCellType(IsoHeapCellType::create<JSWebAssemblyCodeBlock>())
     
    15441550DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlPluralRulesSpace, intlPluralRulesHeapCellType.get(), IntlPluralRules)
    15451551DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlRelativeTimeFormatSpace, intlRelativeTimeFormatHeapCellType.get(), IntlRelativeTimeFormat)
     1552DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlSegmentIteratorSpace, intlSegmentIteratorHeapCellType.get(), IntlSegmentIterator)
     1553DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlSegmenterSpace, intlSegmenterHeapCellType.get(), IntlSegmenter)
     1554DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(intlSegmentsSpace, intlSegmentsHeapCellType.get(), IntlSegments)
    15461555#if ENABLE(WEBASSEMBLY)
    15471556DYNAMIC_ISO_SUBSPACE_DEFINE_MEMBER_SLOW(jsToWasmICCalleeSpace, cellHeapCellType.get(), JSToWasmICCallee)
Note: See TracChangeset for help on using the changeset viewer.