| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index b74b0d966afccd2dc5d3925d11c77b2c8ffca907..728b053b45b149b28dfc7e5d6a2da11b2c2d4f80 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -755,7 +755,7 @@ void CallICBase::UpdateCaches(LookupResult* lookup,
|
| MaybeObject* KeyedCallIC::LoadFunction(State state,
|
| Handle<Object> object,
|
| Handle<Object> key) {
|
| - if (key->IsSymbol()) {
|
| + if (key->IsInternalizedString()) {
|
| return CallICBase::LoadFunction(state,
|
| Code::kNoExtraICState,
|
| object,
|
| @@ -816,7 +816,7 @@ MaybeObject* LoadIC::Load(State state,
|
| // objects is read-only and therefore always returns the length of
|
| // the underlying string value. See ECMA-262 15.5.5.1.
|
| if ((object->IsString() || object->IsStringWrapper()) &&
|
| - name->Equals(isolate()->heap()->length_symbol())) {
|
| + name->Equals(isolate()->heap()->length_string())) {
|
| Handle<Code> stub;
|
| if (state == UNINITIALIZED) {
|
| stub = pre_monomorphic_stub();
|
| @@ -845,7 +845,7 @@ MaybeObject* LoadIC::Load(State state,
|
|
|
| // Use specialized code for getting the length of arrays.
|
| if (object->IsJSArray() &&
|
| - name->Equals(isolate()->heap()->length_symbol())) {
|
| + name->Equals(isolate()->heap()->length_string())) {
|
| Handle<Code> stub;
|
| if (state == UNINITIALIZED) {
|
| stub = pre_monomorphic_stub();
|
| @@ -867,7 +867,7 @@ MaybeObject* LoadIC::Load(State state,
|
|
|
| // Use specialized code for getting prototype of functions.
|
| if (object->IsJSFunction() &&
|
| - name->Equals(isolate()->heap()->prototype_symbol()) &&
|
| + name->Equals(isolate()->heap()->prototype_string()) &&
|
| Handle<JSFunction>::cast(object)->should_have_prototype()) {
|
| Handle<Code> stub;
|
| if (state == UNINITIALIZED) {
|
| @@ -1088,7 +1088,7 @@ static Handle<Object> TryConvertKey(Handle<Object> key, Isolate* isolate) {
|
| if (key->IsHeapNumber()) {
|
| double value = Handle<HeapNumber>::cast(key)->value();
|
| if (isnan(value)) {
|
| - key = isolate->factory()->nan_symbol();
|
| + key = isolate->factory()->nan_string();
|
| } else {
|
| int int_value = FastD2I(value);
|
| if (value == int_value && Smi::IsValid(int_value)) {
|
| @@ -1096,7 +1096,7 @@ static Handle<Object> TryConvertKey(Handle<Object> key, Isolate* isolate) {
|
| }
|
| }
|
| } else if (key->IsUndefined()) {
|
| - key = isolate->factory()->undefined_symbol();
|
| + key = isolate->factory()->undefined_string();
|
| }
|
| return key;
|
| }
|
| @@ -1221,11 +1221,11 @@ MaybeObject* KeyedLoadIC::Load(State state,
|
| Handle<Object> object,
|
| Handle<Object> key,
|
| ICMissMode miss_mode) {
|
| - // Check for values that can be converted into a symbol directly or
|
| - // is representable as a smi.
|
| + // Check for values that can be converted into an internalized string directly
|
| + // or is representable as a smi.
|
| key = TryConvertKey(key, isolate());
|
|
|
| - if (key->IsSymbol()) {
|
| + if (key->IsInternalizedString()) {
|
| return LoadIC::Load(state, object, Handle<String>::cast(key));
|
| }
|
|
|
| @@ -1361,7 +1361,7 @@ MaybeObject* StoreIC::Store(State state,
|
|
|
| // The length property of string values is read-only. Throw in strict mode.
|
| if (strict_mode == kStrictMode && object->IsString() &&
|
| - name->Equals(isolate()->heap()->length_symbol())) {
|
| + name->Equals(isolate()->heap()->length_string())) {
|
| return TypeError("strict_read_only_property", object, name);
|
| }
|
|
|
| @@ -1390,7 +1390,7 @@ MaybeObject* StoreIC::Store(State state,
|
| // property.
|
| if (FLAG_use_ic &&
|
| receiver->IsJSArray() &&
|
| - name->Equals(isolate()->heap()->length_symbol()) &&
|
| + name->Equals(isolate()->heap()->length_string()) &&
|
| Handle<JSArray>::cast(receiver)->AllowsSetElementsLength() &&
|
| receiver->HasFastProperties()) {
|
| Handle<Code> stub = StoreArrayLengthStub(kind(), strict_mode).GetCode();
|
| @@ -1712,11 +1712,11 @@ MaybeObject* KeyedStoreIC::Store(State state,
|
| Handle<Object> key,
|
| Handle<Object> value,
|
| ICMissMode miss_mode) {
|
| - // Check for values that can be converted into a symbol directly or
|
| - // is representable as a smi.
|
| + // Check for values that can be converted into an internalized string directly
|
| + // or is representable as a smi.
|
| key = TryConvertKey(key, isolate());
|
|
|
| - if (key->IsSymbol()) {
|
| + if (key->IsInternalizedString()) {
|
| return StoreIC::Store(state,
|
| strict_mode,
|
| object,
|
| @@ -1925,7 +1925,7 @@ RUNTIME_FUNCTION(MaybeObject*, StoreIC_ArrayLength) {
|
| #ifdef DEBUG
|
| // The length property has to be a writable callback property.
|
| LookupResult debug_lookup(isolate);
|
| - receiver->LocalLookup(isolate->heap()->length_symbol(), &debug_lookup);
|
| + receiver->LocalLookup(isolate->heap()->length_string(), &debug_lookup);
|
| ASSERT(debug_lookup.IsPropertyCallbacks() && !debug_lookup.IsReadOnly());
|
| #endif
|
|
|
| @@ -2369,7 +2369,7 @@ const char* CompareIC::GetStateName(State state) {
|
| case HEAP_NUMBER: return "HEAP_NUMBER";
|
| case OBJECT: return "OBJECTS";
|
| case KNOWN_OBJECTS: return "KNOWN_OBJECTS";
|
| - case SYMBOL: return "SYMBOL";
|
| + case INTERNALIZED_STRING: return "INTERNALIZED_STRING";
|
| case STRING: return "STRING";
|
| case GENERIC: return "GENERIC";
|
| default:
|
| @@ -2385,7 +2385,7 @@ static CompareIC::State InputState(CompareIC::State old_state,
|
| case CompareIC::UNINITIALIZED:
|
| if (value->IsSmi()) return CompareIC::SMI;
|
| if (value->IsHeapNumber()) return CompareIC::HEAP_NUMBER;
|
| - if (value->IsSymbol()) return CompareIC::SYMBOL;
|
| + if (value->IsInternalizedString()) return CompareIC::INTERNALIZED_STRING;
|
| if (value->IsString()) return CompareIC::STRING;
|
| if (value->IsJSObject()) return CompareIC::OBJECT;
|
| break;
|
| @@ -2396,12 +2396,13 @@ static CompareIC::State InputState(CompareIC::State old_state,
|
| case CompareIC::HEAP_NUMBER:
|
| if (value->IsNumber()) return CompareIC::HEAP_NUMBER;
|
| break;
|
| - case CompareIC::SYMBOL:
|
| - if (value->IsSymbol()) return CompareIC::SYMBOL;
|
| + case CompareIC::INTERNALIZED_STRING:
|
| + if (value->IsInternalizedString()) return CompareIC::INTERNALIZED_STRING;
|
| if (value->IsString()) return CompareIC::STRING;
|
| break;
|
| case CompareIC::STRING:
|
| - if (value->IsSymbol() || value->IsString()) return CompareIC::STRING;
|
| + if (value->IsInternalizedString() || value->IsString())
|
| + return CompareIC::STRING;
|
| break;
|
| case CompareIC::OBJECT:
|
| if (value->IsJSObject()) return CompareIC::OBJECT;
|
| @@ -2434,10 +2435,10 @@ CompareIC::State CompareIC::TargetState(State old_state,
|
| return HEAP_NUMBER;
|
| }
|
| }
|
| - if (x->IsSymbol() && y->IsSymbol()) {
|
| - // We compare symbols as strings if we need to determine
|
| + if (x->IsInternalizedString() && y->IsInternalizedString()) {
|
| + // We compare internalized strings as plain ones if we need to determine
|
| // the order in a non-equality compare.
|
| - return Token::IsEqualityOp(op_) ? SYMBOL : STRING;
|
| + return Token::IsEqualityOp(op_) ? INTERNALIZED_STRING : STRING;
|
| }
|
| if (x->IsString() && y->IsString()) return STRING;
|
| if (!Token::IsEqualityOp(op_)) return GENERIC;
|
| @@ -2455,7 +2456,7 @@ CompareIC::State CompareIC::TargetState(State old_state,
|
| return x->IsNumber() && y->IsNumber()
|
| ? HEAP_NUMBER
|
| : GENERIC;
|
| - case SYMBOL:
|
| + case INTERNALIZED_STRING:
|
| ASSERT(Token::IsEqualityOp(op_));
|
| return x->IsString() && y->IsString() ? STRING : GENERIC;
|
| case HEAP_NUMBER:
|
|
|