| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 5106be81bbd70d73006507baee098e265f60415d..4526b07171653ed5399dd8b3479654282965459e 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -5063,46 +5063,25 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToNumber) {
|
| }
|
|
|
|
|
| -RUNTIME_FUNCTION(MaybeObject*, Runtime_StringFromCharCodeArray) {
|
| - NoHandleAllocation ha;
|
| - ASSERT(args.length() == 1);
|
| -
|
| - CONVERT_ARG_CHECKED(JSArray, codes, 0);
|
| - int length = Smi::cast(codes->length())->value();
|
| -
|
| - // Check if the string can be ASCII.
|
| - int i;
|
| - for (i = 0; i < length; i++) {
|
| - Object* element;
|
| - { MaybeObject* maybe_element = codes->GetElement(i);
|
| - // We probably can't get an exception here, but just in order to enforce
|
| - // the checking of inputs in the runtime calls we check here.
|
| - if (!maybe_element->ToObject(&element)) return maybe_element;
|
| - }
|
| - CONVERT_NUMBER_CHECKED(int, chr, Int32, element);
|
| - if ((chr & 0xffff) > String::kMaxAsciiCharCode)
|
| - break;
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_NewString) {
|
| + CONVERT_SMI_ARG_CHECKED(length, 0);
|
| + CONVERT_BOOLEAN_ARG_CHECKED(is_one_byte, 1);
|
| + if (length == 0) return isolate->heap()->empty_string();
|
| + if (is_one_byte) {
|
| + return isolate->heap()->AllocateRawOneByteString(length);
|
| + } else {
|
| + return isolate->heap()->AllocateRawTwoByteString(length);
|
| }
|
| +}
|
|
|
| - MaybeObject* maybe_object = NULL;
|
| - if (i == length) { // The string is ASCII.
|
| - maybe_object = isolate->heap()->AllocateRawOneByteString(length);
|
| - } else { // The string is not ASCII.
|
| - maybe_object = isolate->heap()->AllocateRawTwoByteString(length);
|
| - }
|
|
|
| - Object* object = NULL;
|
| - if (!maybe_object->ToObject(&object)) return maybe_object;
|
| - String* result = String::cast(object);
|
| - for (int i = 0; i < length; i++) {
|
| - Object* element;
|
| - { MaybeObject* maybe_element = codes->GetElement(i);
|
| - if (!maybe_element->ToObject(&element)) return maybe_element;
|
| - }
|
| - CONVERT_NUMBER_CHECKED(int, chr, Int32, element);
|
| - result->Set(i, chr & 0xffff);
|
| - }
|
| - return result;
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_TruncateString) {
|
| + CONVERT_ARG_CHECKED(SeqString, string, 0);
|
| + CONVERT_SMI_ARG_CHECKED(new_length, 1);
|
| + RUNTIME_ASSERT(new_length <= string->length());
|
| + RUNTIME_ASSERT(new_length > 0);
|
| + if (new_length != string->length()) string->Truncate(new_length);
|
| + return string;
|
| }
|
|
|
|
|
|
|