in lib/VM/JSLib/String.cpp [38:327]
Handle<JSObject> createStringConstructor(Runtime &runtime) {
auto stringPrototype = Handle<JSString>::vmcast(&runtime.stringPrototype);
auto cons = defineSystemConstructor<JSString>(
runtime,
Predefined::getSymbolID(Predefined::String),
stringConstructor,
stringPrototype,
1,
CellKind::JSStringKind);
// String.prototype.xxx methods.
void *ctx = nullptr;
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::toString),
ctx,
stringPrototypeToString,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::valueOf),
ctx,
stringPrototypeToString,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::charCodeAt),
ctx,
stringPrototypeCharCodeAt,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::codePointAt),
ctx,
stringPrototypeCodePointAt,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::concat),
ctx,
stringPrototypeConcat,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::substring),
ctx,
stringPrototypeSubstring,
2);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::toLowerCase),
ctx,
stringPrototypeToLowerCase,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::toLocaleLowerCase),
ctx,
stringPrototypeToLocaleLowerCase,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::toUpperCase),
ctx,
stringPrototypeToUpperCase,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::toLocaleUpperCase),
ctx,
stringPrototypeToLocaleUpperCase,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::substr),
ctx,
stringPrototypeSubstr,
2);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::trim),
ctx,
stringPrototypeTrim,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::localeCompare),
ctx,
stringPrototypeLocaleCompare,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::normalize),
ctx,
stringPrototypeNormalize,
0);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::repeat),
ctx,
stringPrototypeRepeat,
1);
DefinePropertyFlags dpf = DefinePropertyFlags::getNewNonEnumerableFlags();
auto trimStartRes =
runtime.makeHandle<Callable>(runtime.ignoreAllocationFailure(defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::trimStart),
ctx,
stringPrototypeTrimStart,
0,
dpf)));
auto trimEndRes =
runtime.makeHandle<Callable>(runtime.ignoreAllocationFailure(defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::trimEnd),
ctx,
stringPrototypeTrimEnd,
0,
dpf)));
defineProperty(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::trimLeft),
trimStartRes);
defineProperty(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::trimRight),
trimEndRes);
(void)defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::SymbolIterator),
Predefined::getSymbolID(Predefined::squareSymbolIterator),
ctx,
stringPrototypeSymbolIterator,
0,
dpf);
// String.xxx() methods.
defineMethod(
runtime,
cons,
Predefined::getSymbolID(Predefined::fromCharCode),
ctx,
stringFromCharCode,
1);
defineMethod(
runtime,
cons,
Predefined::getSymbolID(Predefined::fromCodePoint),
ctx,
stringFromCodePoint,
1);
defineMethod(
runtime,
cons,
Predefined::getSymbolID(Predefined::raw),
ctx,
stringRaw,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::matchAll),
ctx,
stringPrototypeMatchAll,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::replaceAll),
ctx,
stringPrototypeReplaceAll,
2);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::match),
ctx,
stringPrototypeMatch,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::padEnd),
(void *)false,
stringPrototypePad,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::padStart),
(void *)true,
stringPrototypePad,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::replace),
ctx,
stringPrototypeReplace,
2);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::search),
ctx,
stringPrototypeSearch,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::charAt),
ctx,
stringPrototypeCharAt,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::endsWith),
ctx,
stringPrototypeEndsWith,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::slice),
ctx,
stringPrototypeSlice,
2);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::split),
ctx,
stringPrototypeSplit,
2);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::includes),
(void *)false,
stringPrototypeIncludesOrStartsWith,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::indexOf),
ctx,
stringPrototypeIndexOf,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::lastIndexOf),
ctx,
stringPrototypeLastIndexOf,
1);
defineMethod(
runtime,
stringPrototype,
Predefined::getSymbolID(Predefined::startsWith),
(void *)true,
stringPrototypeIncludesOrStartsWith,
1);
return cons;
}