| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Review notes: | 5 // Review notes: |
| 6 // | 6 // |
| 7 // - The use of macros in these inline functions may seem superfluous | 7 // - The use of macros in these inline functions may seem superfluous |
| 8 // but it is absolutely needed to make sure gcc generates optimal | 8 // but it is absolutely needed to make sure gcc generates optimal |
| 9 // code. gcc is not happy when attempting to inline too deep. | 9 // code. gcc is not happy when attempting to inline too deep. |
| 10 // | 10 // |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 return Object::IsHeapObject() && | 180 return Object::IsHeapObject() && |
| 181 HeapObject::cast(this)->map()->instance_type() <= LAST_NAME_TYPE; | 181 HeapObject::cast(this)->map()->instance_type() <= LAST_NAME_TYPE; |
| 182 } | 182 } |
| 183 | 183 |
| 184 | 184 |
| 185 bool Object::IsUniqueName() const { | 185 bool Object::IsUniqueName() const { |
| 186 return IsInternalizedString() || IsSymbol(); | 186 return IsInternalizedString() || IsSymbol(); |
| 187 } | 187 } |
| 188 | 188 |
| 189 | 189 |
| 190 bool Object::IsCallable() const { |
| 191 return Object::IsHeapObject() && HeapObject::cast(this)->map()->is_callable(); |
| 192 } |
| 193 |
| 194 |
| 190 bool Object::IsSpecObject() const { | 195 bool Object::IsSpecObject() const { |
| 191 return Object::IsHeapObject() | 196 return Object::IsHeapObject() |
| 192 && HeapObject::cast(this)->map()->instance_type() >= FIRST_SPEC_OBJECT_TYPE; | 197 && HeapObject::cast(this)->map()->instance_type() >= FIRST_SPEC_OBJECT_TYPE; |
| 193 } | 198 } |
| 194 | 199 |
| 195 | 200 |
| 201 // TODO(rossberg): Remove this and use the spec compliant IsCallable instead. |
| 196 bool Object::IsSpecFunction() const { | 202 bool Object::IsSpecFunction() const { |
| 197 if (!Object::IsHeapObject()) return false; | 203 if (!Object::IsHeapObject()) return false; |
| 198 InstanceType type = HeapObject::cast(this)->map()->instance_type(); | 204 InstanceType type = HeapObject::cast(this)->map()->instance_type(); |
| 199 return type == JS_FUNCTION_TYPE || type == JS_FUNCTION_PROXY_TYPE; | 205 return type == JS_FUNCTION_TYPE || type == JS_FUNCTION_PROXY_TYPE; |
| 200 } | 206 } |
| 201 | 207 |
| 202 | 208 |
| 203 bool Object::IsTemplateInfo() const { | 209 bool Object::IsTemplateInfo() const { |
| 204 return IsObjectTemplateInfo() || IsFunctionTemplateInfo(); | 210 return IsObjectTemplateInfo() || IsFunctionTemplateInfo(); |
| 205 } | 211 } |
| (...skipping 4269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4475 set_bit_field(FunctionWithPrototype::update(bit_field(), value)); | 4481 set_bit_field(FunctionWithPrototype::update(bit_field(), value)); |
| 4476 } | 4482 } |
| 4477 | 4483 |
| 4478 | 4484 |
| 4479 bool Map::function_with_prototype() { | 4485 bool Map::function_with_prototype() { |
| 4480 return FunctionWithPrototype::decode(bit_field()); | 4486 return FunctionWithPrototype::decode(bit_field()); |
| 4481 } | 4487 } |
| 4482 | 4488 |
| 4483 | 4489 |
| 4484 void Map::set_is_hidden_prototype() { | 4490 void Map::set_is_hidden_prototype() { |
| 4485 set_bit_field(bit_field() | (1 << kIsHiddenPrototype)); | 4491 set_bit_field3(IsHiddenPrototype::update(bit_field3(), true)); |
| 4486 } | 4492 } |
| 4487 | 4493 |
| 4488 | 4494 |
| 4489 bool Map::is_hidden_prototype() { | 4495 bool Map::is_hidden_prototype() const { |
| 4490 return ((1 << kIsHiddenPrototype) & bit_field()) != 0; | 4496 return IsHiddenPrototype::decode(bit_field3()); |
| 4491 } | 4497 } |
| 4492 | 4498 |
| 4493 | 4499 |
| 4494 void Map::set_has_indexed_interceptor() { | 4500 void Map::set_has_indexed_interceptor() { |
| 4495 set_bit_field(bit_field() | (1 << kHasIndexedInterceptor)); | 4501 set_bit_field(bit_field() | (1 << kHasIndexedInterceptor)); |
| 4496 } | 4502 } |
| 4497 | 4503 |
| 4498 | 4504 |
| 4499 bool Map::has_indexed_interceptor() { | 4505 bool Map::has_indexed_interceptor() { |
| 4500 return ((1 << kHasIndexedInterceptor) & bit_field()) != 0; | 4506 return ((1 << kHasIndexedInterceptor) & bit_field()) != 0; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4626 void Map::set_owns_descriptors(bool owns_descriptors) { | 4632 void Map::set_owns_descriptors(bool owns_descriptors) { |
| 4627 set_bit_field3(OwnsDescriptors::update(bit_field3(), owns_descriptors)); | 4633 set_bit_field3(OwnsDescriptors::update(bit_field3(), owns_descriptors)); |
| 4628 } | 4634 } |
| 4629 | 4635 |
| 4630 | 4636 |
| 4631 bool Map::owns_descriptors() { | 4637 bool Map::owns_descriptors() { |
| 4632 return OwnsDescriptors::decode(bit_field3()); | 4638 return OwnsDescriptors::decode(bit_field3()); |
| 4633 } | 4639 } |
| 4634 | 4640 |
| 4635 | 4641 |
| 4636 void Map::set_has_instance_call_handler() { | 4642 void Map::set_is_callable() { set_bit_field(bit_field() | (1 << kIsCallable)); } |
| 4637 set_bit_field3(HasInstanceCallHandler::update(bit_field3(), true)); | 4643 |
| 4644 |
| 4645 bool Map::is_callable() const { |
| 4646 return ((1 << kIsCallable) & bit_field()) != 0; |
| 4638 } | 4647 } |
| 4639 | 4648 |
| 4640 | 4649 |
| 4641 bool Map::has_instance_call_handler() { | |
| 4642 return HasInstanceCallHandler::decode(bit_field3()); | |
| 4643 } | |
| 4644 | |
| 4645 | |
| 4646 void Map::deprecate() { | 4650 void Map::deprecate() { |
| 4647 set_bit_field3(Deprecated::update(bit_field3(), true)); | 4651 set_bit_field3(Deprecated::update(bit_field3(), true)); |
| 4648 } | 4652 } |
| 4649 | 4653 |
| 4650 | 4654 |
| 4651 bool Map::is_deprecated() { | 4655 bool Map::is_deprecated() { |
| 4652 return Deprecated::decode(bit_field3()); | 4656 return Deprecated::decode(bit_field3()); |
| 4653 } | 4657 } |
| 4654 | 4658 |
| 4655 | 4659 |
| (...skipping 1602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6258 void JSBuiltinsObject::set_javascript_builtin(Builtins::JavaScript id, | 6262 void JSBuiltinsObject::set_javascript_builtin(Builtins::JavaScript id, |
| 6259 Object* value) { | 6263 Object* value) { |
| 6260 DCHECK(id < kJSBuiltinsCount); // id is unsigned. | 6264 DCHECK(id < kJSBuiltinsCount); // id is unsigned. |
| 6261 WRITE_FIELD(this, OffsetOfFunctionWithId(id), value); | 6265 WRITE_FIELD(this, OffsetOfFunctionWithId(id), value); |
| 6262 WRITE_BARRIER(GetHeap(), this, OffsetOfFunctionWithId(id), value); | 6266 WRITE_BARRIER(GetHeap(), this, OffsetOfFunctionWithId(id), value); |
| 6263 } | 6267 } |
| 6264 | 6268 |
| 6265 | 6269 |
| 6266 ACCESSORS(JSProxy, handler, Object, kHandlerOffset) | 6270 ACCESSORS(JSProxy, handler, Object, kHandlerOffset) |
| 6267 ACCESSORS(JSProxy, hash, Object, kHashOffset) | 6271 ACCESSORS(JSProxy, hash, Object, kHashOffset) |
| 6268 ACCESSORS(JSFunctionProxy, call_trap, Object, kCallTrapOffset) | 6272 ACCESSORS(JSFunctionProxy, call_trap, JSReceiver, kCallTrapOffset) |
| 6269 ACCESSORS(JSFunctionProxy, construct_trap, Object, kConstructTrapOffset) | 6273 ACCESSORS(JSFunctionProxy, construct_trap, Object, kConstructTrapOffset) |
| 6270 | 6274 |
| 6271 | 6275 |
| 6272 void JSProxy::InitializeBody(int object_size, Object* value) { | 6276 void JSProxy::InitializeBody(int object_size, Object* value) { |
| 6273 DCHECK(!value->IsHeapObject() || !GetHeap()->InNewSpace(value)); | 6277 DCHECK(!value->IsHeapObject() || !GetHeap()->InNewSpace(value)); |
| 6274 for (int offset = kHeaderSize; offset < object_size; offset += kPointerSize) { | 6278 for (int offset = kHeaderSize; offset < object_size; offset += kPointerSize) { |
| 6275 WRITE_FIELD(this, offset, value); | 6279 WRITE_FIELD(this, offset, value); |
| 6276 } | 6280 } |
| 6277 } | 6281 } |
| 6278 | 6282 |
| (...skipping 1579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7858 #undef READ_INT64_FIELD | 7862 #undef READ_INT64_FIELD |
| 7859 #undef WRITE_INT64_FIELD | 7863 #undef WRITE_INT64_FIELD |
| 7860 #undef READ_BYTE_FIELD | 7864 #undef READ_BYTE_FIELD |
| 7861 #undef WRITE_BYTE_FIELD | 7865 #undef WRITE_BYTE_FIELD |
| 7862 #undef NOBARRIER_READ_BYTE_FIELD | 7866 #undef NOBARRIER_READ_BYTE_FIELD |
| 7863 #undef NOBARRIER_WRITE_BYTE_FIELD | 7867 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 7864 | 7868 |
| 7865 } } // namespace v8::internal | 7869 } } // namespace v8::internal |
| 7866 | 7870 |
| 7867 #endif // V8_OBJECTS_INL_H_ | 7871 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |