| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index d8623f8ce9b5376ba082bd0da79ff3ddcd3a3403..959dec418ea393f3ed7cf66e2bbb35eed3cf2500 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -288,40 +288,41 @@ static Handle<Map> ComputeObjectLiteralMap(
|
| Isolate* isolate = context->GetIsolate();
|
| int properties_length = constant_properties->length();
|
| int number_of_properties = properties_length / 2;
|
| - // Check that there are only symbols and array indices among keys.
|
| - int number_of_symbol_keys = 0;
|
| + // Check that there are only internal strings and array indices among keys.
|
| + int number_of_string_keys = 0;
|
| for (int p = 0; p != properties_length; p += 2) {
|
| Object* key = constant_properties->get(p);
|
| uint32_t element_index = 0;
|
| - if (key->IsSymbol()) {
|
| - number_of_symbol_keys++;
|
| + if (key->IsInternalizedString()) {
|
| + number_of_string_keys++;
|
| } else if (key->ToArrayIndex(&element_index)) {
|
| // An index key does not require space in the property backing store.
|
| number_of_properties--;
|
| } else {
|
| - // Bail out as a non-symbol non-index key makes caching impossible.
|
| + // Bail out as a non-internalized-string non-index key makes caching
|
| + // impossible.
|
| // ASSERT to make sure that the if condition after the loop is false.
|
| - ASSERT(number_of_symbol_keys != number_of_properties);
|
| + ASSERT(number_of_string_keys != number_of_properties);
|
| break;
|
| }
|
| }
|
| - // If we only have symbols and array indices among keys then we can
|
| - // use the map cache in the native context.
|
| + // If we only have internalized strings and array indices among keys then we
|
| + // can use the map cache in the native context.
|
| const int kMaxKeys = 10;
|
| - if ((number_of_symbol_keys == number_of_properties) &&
|
| - (number_of_symbol_keys < kMaxKeys)) {
|
| + if ((number_of_string_keys == number_of_properties) &&
|
| + (number_of_string_keys < kMaxKeys)) {
|
| // Create the fixed array with the key.
|
| Handle<FixedArray> keys =
|
| - isolate->factory()->NewFixedArray(number_of_symbol_keys);
|
| - if (number_of_symbol_keys > 0) {
|
| + isolate->factory()->NewFixedArray(number_of_string_keys);
|
| + if (number_of_string_keys > 0) {
|
| int index = 0;
|
| for (int p = 0; p < properties_length; p += 2) {
|
| Object* key = constant_properties->get(p);
|
| - if (key->IsSymbol()) {
|
| + if (key->IsInternalizedString()) {
|
| keys->set(index++, key);
|
| }
|
| }
|
| - ASSERT(index == number_of_symbol_keys);
|
| + ASSERT(index == number_of_string_keys);
|
| }
|
| *is_result_from_cache = true;
|
| return isolate->factory()->ObjectLiteralMapFromCache(context, keys);
|
| @@ -394,7 +395,7 @@ static Handle<Object> CreateObjectLiteralBoilerplate(
|
| }
|
| Handle<Object> result;
|
| uint32_t element_index = 0;
|
| - if (key->IsSymbol()) {
|
| + if (key->IsInternalizedString()) {
|
| if (Handle<String>::cast(key)->AsArrayIndex(&element_index)) {
|
| // Array index as string (uint32).
|
| result = JSObject::SetOwnElement(
|
| @@ -952,7 +953,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPrototype) {
|
| do {
|
| if (obj->IsAccessCheckNeeded() &&
|
| !isolate->MayNamedAccess(JSObject::cast(obj),
|
| - isolate->heap()->Proto_symbol(),
|
| + isolate->heap()->proto_string(),
|
| v8::ACCESS_GET)) {
|
| isolate->ReportFailedAccessCheck(JSObject::cast(obj), v8::ACCESS_GET);
|
| return isolate->heap()->undefined_value();
|
| @@ -1778,7 +1779,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) {
|
| CONVERT_ARG_CHECKED(String, source, 1);
|
| // If source is the empty string we set it to "(?:)" instead as
|
| // suggested by ECMA-262, 5th, section 15.10.4.1.
|
| - if (source->length() == 0) source = isolate->heap()->query_colon_symbol();
|
| + if (source->length() == 0) source = isolate->heap()->query_colon_string();
|
|
|
| Object* global = args[2];
|
| if (!global->IsTrue()) global = isolate->heap()->false_value();
|
| @@ -1815,27 +1816,27 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) {
|
| static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
|
| Heap* heap = isolate->heap();
|
| MaybeObject* result;
|
| - result = regexp->SetLocalPropertyIgnoreAttributes(heap->source_symbol(),
|
| + result = regexp->SetLocalPropertyIgnoreAttributes(heap->source_string(),
|
| source,
|
| final);
|
| // TODO(jkummerow): Turn these back into ASSERTs when we can be certain
|
| // that it never fires in Release mode in the wild.
|
| CHECK(!result->IsFailure());
|
| - result = regexp->SetLocalPropertyIgnoreAttributes(heap->global_symbol(),
|
| + result = regexp->SetLocalPropertyIgnoreAttributes(heap->global_string(),
|
| global,
|
| final);
|
| CHECK(!result->IsFailure());
|
| result =
|
| - regexp->SetLocalPropertyIgnoreAttributes(heap->ignore_case_symbol(),
|
| + regexp->SetLocalPropertyIgnoreAttributes(heap->ignore_case_string(),
|
| ignoreCase,
|
| final);
|
| CHECK(!result->IsFailure());
|
| - result = regexp->SetLocalPropertyIgnoreAttributes(heap->multiline_symbol(),
|
| + result = regexp->SetLocalPropertyIgnoreAttributes(heap->multiline_string(),
|
| multiline,
|
| final);
|
| CHECK(!result->IsFailure());
|
| result =
|
| - regexp->SetLocalPropertyIgnoreAttributes(heap->last_index_symbol(),
|
| + regexp->SetLocalPropertyIgnoreAttributes(heap->last_index_string(),
|
| Smi::FromInt(0),
|
| writable);
|
| CHECK(!result->IsFailure());
|
| @@ -1859,7 +1860,7 @@ static Handle<JSFunction> InstallBuiltin(Isolate* isolate,
|
| Handle<JSObject> holder,
|
| const char* name,
|
| Builtins::Name builtin_name) {
|
| - Handle<String> key = isolate->factory()->LookupUtf8Symbol(name);
|
| + Handle<String> key = isolate->factory()->InternalizeUtf8String(name);
|
| Handle<Code> code(isolate->builtins()->builtin(builtin_name));
|
| Handle<JSFunction> optimized =
|
| isolate->factory()->NewFunction(key,
|
| @@ -2083,7 +2084,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetReadOnlyPrototype) {
|
| RUNTIME_ASSERT(args.length() == 1);
|
| CONVERT_ARG_CHECKED(JSFunction, function, 0);
|
|
|
| - String* name = isolate->heap()->prototype_symbol();
|
| + String* name = isolate->heap()->prototype_string();
|
|
|
| if (function->HasFastProperties()) {
|
| // Construct a new field descriptor with updated attributes.
|
| @@ -3802,13 +3803,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToRadixString) {
|
| // Slow case.
|
| CONVERT_DOUBLE_ARG_CHECKED(value, 0);
|
| if (isnan(value)) {
|
| - return *isolate->factory()->nan_symbol();
|
| + return *isolate->factory()->nan_string();
|
| }
|
| if (isinf(value)) {
|
| if (value < 0) {
|
| - return *isolate->factory()->minus_infinity_symbol();
|
| + return *isolate->factory()->minus_infinity_string();
|
| }
|
| - return *isolate->factory()->infinity_symbol();
|
| + return *isolate->factory()->infinity_string();
|
| }
|
| char* str = DoubleToRadixCString(value, radix);
|
| MaybeObject* result =
|
| @@ -4789,7 +4790,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetLocalPropertyNames) {
|
| int dest_pos = 0;
|
| for (int i = 0; i < total_property_count; i++) {
|
| Object* name = old_names->get(i);
|
| - if (name == isolate->heap()->hidden_symbol()) {
|
| + if (name == isolate->heap()->hidden_string()) {
|
| continue;
|
| }
|
| names->set(dest_pos++, name);
|
| @@ -4950,8 +4951,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetArgumentsProperty) {
|
| }
|
|
|
| // Handle special arguments properties.
|
| - if (key->Equals(isolate->heap()->length_symbol())) return Smi::FromInt(n);
|
| - if (key->Equals(isolate->heap()->callee_symbol())) {
|
| + if (key->Equals(isolate->heap()->length_string())) return Smi::FromInt(n);
|
| + if (key->Equals(isolate->heap()->callee_string())) {
|
| Object* function = frame->function();
|
| if (function->IsJSFunction() &&
|
| !JSFunction::cast(function)->shared()->is_classic_mode()) {
|
| @@ -4989,38 +4990,38 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_Typeof) {
|
| NoHandleAllocation ha;
|
|
|
| Object* obj = args[0];
|
| - if (obj->IsNumber()) return isolate->heap()->number_symbol();
|
| + if (obj->IsNumber()) return isolate->heap()->number_string();
|
| HeapObject* heap_obj = HeapObject::cast(obj);
|
|
|
| // typeof an undetectable object is 'undefined'
|
| if (heap_obj->map()->is_undetectable()) {
|
| - return isolate->heap()->undefined_symbol();
|
| + return isolate->heap()->undefined_string();
|
| }
|
|
|
| InstanceType instance_type = heap_obj->map()->instance_type();
|
| if (instance_type < FIRST_NONSTRING_TYPE) {
|
| - return isolate->heap()->string_symbol();
|
| + return isolate->heap()->string_string();
|
| }
|
|
|
| switch (instance_type) {
|
| case ODDBALL_TYPE:
|
| if (heap_obj->IsTrue() || heap_obj->IsFalse()) {
|
| - return isolate->heap()->boolean_symbol();
|
| + return isolate->heap()->boolean_string();
|
| }
|
| if (heap_obj->IsNull()) {
|
| return FLAG_harmony_typeof
|
| - ? isolate->heap()->null_symbol()
|
| - : isolate->heap()->object_symbol();
|
| + ? isolate->heap()->null_string()
|
| + : isolate->heap()->object_string();
|
| }
|
| ASSERT(heap_obj->IsUndefined());
|
| - return isolate->heap()->undefined_symbol();
|
| + return isolate->heap()->undefined_string();
|
| case JS_FUNCTION_TYPE:
|
| case JS_FUNCTION_PROXY_TYPE:
|
| - return isolate->heap()->function_symbol();
|
| + return isolate->heap()->function_string();
|
| default:
|
| // For any kind of object not handled above, the spec rule for
|
| // host objects gives that it is okay to return "object"
|
| - return isolate->heap()->object_symbol();
|
| + return isolate->heap()->object_string();
|
| }
|
| }
|
|
|
| @@ -6522,7 +6523,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
|
|
| int special_length = special->length();
|
| if (!array->HasFastObjectElements()) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| FixedArray* fixed_array = FixedArray::cast(array->elements());
|
| if (fixed_array->length() < array_length) {
|
| @@ -6556,21 +6557,21 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
| // Get the position and check that it is a positive smi.
|
| i++;
|
| if (i >= array_length) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| Object* next_smi = fixed_array->get(i);
|
| if (!next_smi->IsSmi()) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| pos = Smi::cast(next_smi)->value();
|
| if (pos < 0) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| }
|
| ASSERT(pos >= 0);
|
| ASSERT(len >= 0);
|
| if (pos > special_length || len > special_length - pos) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| increment = len;
|
| } else if (elt->IsString()) {
|
| @@ -6582,7 +6583,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) {
|
| }
|
| } else {
|
| ASSERT(!elt->IsTheHole());
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| if (increment > String::kMaxLength - position) {
|
| isolate->context()->mark_out_of_memory();
|
| @@ -6632,7 +6633,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderJoin) {
|
| CONVERT_ARG_CHECKED(String, separator, 2);
|
|
|
| if (!array->HasFastObjectElements()) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| FixedArray* fixed_array = FixedArray::cast(array->elements());
|
| if (fixed_array->length() < array_length) {
|
| @@ -6658,7 +6659,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderJoin) {
|
| Object* element_obj = fixed_array->get(i);
|
| if (!element_obj->IsString()) {
|
| // TODO(1161): handle this case.
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
| String* element = String::cast(element_obj);
|
| int increment = element->length();
|
| @@ -7663,11 +7664,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionBindArguments) {
|
| bound_function->set_function_bindings(*new_bindings);
|
|
|
| // Update length.
|
| - Handle<String> length_symbol = isolate->factory()->length_symbol();
|
| + Handle<String> length_string = isolate->factory()->length_string();
|
| Handle<Object> new_length(args.at<Object>(3));
|
| PropertyAttributes attr =
|
| static_cast<PropertyAttributes>(DONT_DELETE | DONT_ENUM | READ_ONLY);
|
| - ForceSetProperty(bound_function, length_symbol, new_length, attr);
|
| + ForceSetProperty(bound_function, length_string, new_length, attr);
|
| return *bound_function;
|
| }
|
|
|
| @@ -7919,7 +7920,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ForceParallelRecompile) {
|
| HandleScope handle_scope(isolate);
|
| ASSERT(FLAG_parallel_recompilation && FLAG_manual_parallel_recompilation);
|
| if (!isolate->optimizing_compiler_thread()->IsQueueAvailable()) {
|
| - return isolate->Throw(*isolate->factory()->LookupOneByteSymbol(
|
| + return isolate->Throw(*isolate->factory()->InternalizeOneByteString(
|
| STATIC_ASCII_VECTOR("Recompile queue is full.")));
|
| }
|
| CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
|
| @@ -10370,7 +10371,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CheckExecutionState) {
|
| if (isolate->debug()->break_id() == 0 ||
|
| break_id != isolate->debug()->break_id()) {
|
| return isolate->Throw(
|
| - isolate->heap()->illegal_execution_state_symbol());
|
| + isolate->heap()->illegal_execution_state_string());
|
| }
|
|
|
| return isolate->heap()->true_value();
|
| @@ -11919,7 +11920,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_PrepareStep) {
|
| if (!maybe_check->ToObject(&check)) return maybe_check;
|
| }
|
| if (!args[1]->IsNumber() || !args[2]->IsNumber()) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
|
|
| // Get the step action and check validity.
|
| @@ -11929,13 +11930,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_PrepareStep) {
|
| step_action != StepOut &&
|
| step_action != StepInMin &&
|
| step_action != StepMin) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
|
|
| // Get the number of steps.
|
| int step_count = NumberToInt32(args[2]);
|
| if (step_count < 1) {
|
| - return isolate->Throw(isolate->heap()->illegal_argument_symbol());
|
| + return isolate->Throw(isolate->heap()->illegal_argument_string());
|
| }
|
|
|
| // Clear all current stepping setup.
|
| @@ -12033,7 +12034,7 @@ static Handle<Object> GetArgumentsObject(Isolate* isolate,
|
| // does not support eval) then create an 'arguments' object.
|
| int index;
|
| if (scope_info->StackLocalCount() > 0) {
|
| - index = scope_info->StackSlotIndex(isolate->heap()->arguments_symbol());
|
| + index = scope_info->StackSlotIndex(isolate->heap()->arguments_string());
|
| if (index != -1) {
|
| return Handle<Object>(frame->GetExpression(index), isolate);
|
| }
|
| @@ -12043,7 +12044,7 @@ static Handle<Object> GetArgumentsObject(Isolate* isolate,
|
| VariableMode mode;
|
| InitializationFlag init_flag;
|
| index = scope_info->ContextSlotIndex(
|
| - isolate->heap()->arguments_symbol(), &mode, &init_flag);
|
| + isolate->heap()->arguments_string(), &mode, &init_flag);
|
| if (index != -1) {
|
| return Handle<Object>(function_context->get(index), isolate);
|
| }
|
| @@ -12898,7 +12899,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditRestartFrame) {
|
| const char* error_message =
|
| LiveEdit::RestartFrame(it.frame(), isolate->runtime_zone());
|
| if (error_message) {
|
| - return *(isolate->factory()->LookupUtf8Symbol(error_message));
|
| + return *(isolate->factory()->InternalizeUtf8String(error_message));
|
| }
|
| return heap->true_value();
|
| }
|
| @@ -13087,7 +13088,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_MarkOneShotGetter) {
|
| ASSERT_EQ(args.length(), 1);
|
| CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
|
| HandleScope scope(isolate);
|
| - Handle<String> key = isolate->factory()->hidden_stack_trace_symbol();
|
| + Handle<String> key = isolate->factory()->hidden_stack_trace_string();
|
| JSObject::SetHiddenProperty(fun, key, key);
|
| return *fun;
|
| }
|
| @@ -13099,7 +13100,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOverflowedStackTrace) {
|
| HandleScope scope(isolate);
|
| ASSERT_EQ(args.length(), 1);
|
| CONVERT_ARG_CHECKED(JSObject, error_object, 0);
|
| - String* key = isolate->heap()->hidden_stack_trace_symbol();
|
| + String* key = isolate->heap()->hidden_stack_trace_string();
|
| Object* result = error_object->GetHiddenProperty(key);
|
| RUNTIME_ASSERT(result->IsJSArray() ||
|
| result->IsString() ||
|
| @@ -13114,7 +13115,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetOverflowedStackTrace) {
|
| ASSERT_EQ(args.length(), 2);
|
| CONVERT_ARG_HANDLE_CHECKED(JSObject, error_object, 0);
|
| CONVERT_ARG_HANDLE_CHECKED(HeapObject, value, 1);
|
| - Handle<String> key = isolate->factory()->hidden_stack_trace_symbol();
|
| + Handle<String> key = isolate->factory()->hidden_stack_trace_string();
|
| if (value->IsUndefined()) {
|
| error_object->DeleteHiddenProperty(*key);
|
| } else {
|
| @@ -13473,14 +13474,14 @@ MaybeObject* Runtime::InitializeIntrinsicFunctionNames(Heap* heap,
|
| ASSERT(dictionary != NULL);
|
| ASSERT(StringDictionary::cast(dictionary)->NumberOfElements() == 0);
|
| for (int i = 0; i < kNumFunctions; ++i) {
|
| - Object* name_symbol;
|
| - { MaybeObject* maybe_name_symbol =
|
| - heap->LookupUtf8Symbol(kIntrinsicFunctions[i].name);
|
| - if (!maybe_name_symbol->ToObject(&name_symbol)) return maybe_name_symbol;
|
| + Object* name_string;
|
| + { MaybeObject* maybe_name_string =
|
| + heap->InternalizeUtf8String(kIntrinsicFunctions[i].name);
|
| + if (!maybe_name_string->ToObject(&name_string)) return maybe_name_string;
|
| }
|
| StringDictionary* string_dictionary = StringDictionary::cast(dictionary);
|
| { MaybeObject* maybe_dictionary = string_dictionary->Add(
|
| - String::cast(name_symbol),
|
| + String::cast(name_string),
|
| Smi::FromInt(i),
|
| PropertyDetails(NONE, NORMAL));
|
| if (!maybe_dictionary->ToObject(&dictionary)) {
|
| @@ -13494,7 +13495,7 @@ MaybeObject* Runtime::InitializeIntrinsicFunctionNames(Heap* heap,
|
| }
|
|
|
|
|
| -const Runtime::Function* Runtime::FunctionForSymbol(Handle<String> name) {
|
| +const Runtime::Function* Runtime::FunctionForName(Handle<String> name) {
|
| Heap* heap = name->GetHeap();
|
| int entry = heap->intrinsic_function_names()->FindEntry(*name);
|
| if (entry != kNotFound) {
|
|
|