transitioning javascript builtin StringConstructor( js-implicit context: NativeContext, receiver: JSAny, newTarget: JSAny, target: JSFunction)(...arguments): JSAny { const length: intptr = Convert<intptr>(arguments.length); let s: String; // 1. If no arguments were passed to this function invocation, let s be "". if (length == 0) { s = EmptyStringConstant(); } else { // 2. Else, // 2. a. If NewTarget is undefined and Type(value) is Symbol, return // SymbolDescriptiveString(value). if (newTarget == Undefined) { typeswitch (arguments[0]) { case (value: Symbol): { return SymbolDescriptiveString(value); } case (JSAny): { } } } // 2. b. Let s be ? ToString(value). s = ToString_Inline(arguments[0]); } // 3. If NewTarget is undefined, return s. if (newTarget == Undefined) { return s; }
// We might be creating a string wrapper with a custom @@toPrimitive. if (target != newTarget) { InvalidateStringWrapperToPrimitiveProtector(); }
{ // --- S t r i n g --- Handle<JSFunction> string_fun = InstallFunction(isolate_, global, "String", JS_PRIMITIVE_WRAPPER_TYPE, JSPrimitiveWrapper::kHeaderSize, 0, isolate_->initial_object_prototype(), Builtin::kStringConstructor, 1, kDontAdapt); InstallWithIntrinsicDefaultProto(isolate_, string_fun, Context::STRING_FUNCTION_INDEX);