| 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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 { | 190 bool Object::IsCallable() const { |
| 191 return Object::IsHeapObject() && HeapObject::cast(this)->map()->is_callable(); | 191 return Object::IsHeapObject() && HeapObject::cast(this)->map()->is_callable(); |
| 192 } | 192 } |
| 193 | 193 |
| 194 | 194 |
| 195 bool Object::IsConstructor() const { | |
| 196 return Object::IsHeapObject() && | |
| 197 HeapObject::cast(this)->map()->is_constructor(); | |
| 198 } | |
| 199 | |
| 200 | |
| 201 bool Object::IsSpecObject() const { | 195 bool Object::IsSpecObject() const { |
| 202 return Object::IsHeapObject() | 196 return Object::IsHeapObject() |
| 203 && HeapObject::cast(this)->map()->instance_type() >= FIRST_SPEC_OBJECT_TYPE; | 197 && HeapObject::cast(this)->map()->instance_type() >= FIRST_SPEC_OBJECT_TYPE; |
| 204 } | 198 } |
| 205 | 199 |
| 206 | 200 |
| 207 bool Object::IsTemplateInfo() const { | 201 bool Object::IsTemplateInfo() const { |
| 208 return IsObjectTemplateInfo() || IsFunctionTemplateInfo(); | 202 return IsObjectTemplateInfo() || IsFunctionTemplateInfo(); |
| 209 } | 203 } |
| 210 | 204 |
| (...skipping 4320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4531 set_bit_field(bit_field() & ~(1 << kHasNonInstancePrototype)); | 4525 set_bit_field(bit_field() & ~(1 << kHasNonInstancePrototype)); |
| 4532 } | 4526 } |
| 4533 } | 4527 } |
| 4534 | 4528 |
| 4535 | 4529 |
| 4536 bool Map::has_non_instance_prototype() { | 4530 bool Map::has_non_instance_prototype() { |
| 4537 return ((1 << kHasNonInstancePrototype) & bit_field()) != 0; | 4531 return ((1 << kHasNonInstancePrototype) & bit_field()) != 0; |
| 4538 } | 4532 } |
| 4539 | 4533 |
| 4540 | 4534 |
| 4541 void Map::set_is_constructor(bool value) { | 4535 void Map::set_function_with_prototype(bool value) { |
| 4542 if (value) { | 4536 set_bit_field(FunctionWithPrototype::update(bit_field(), value)); |
| 4543 set_bit_field(bit_field() | (1 << kIsConstructor)); | |
| 4544 } else { | |
| 4545 set_bit_field(bit_field() & ~(1 << kIsConstructor)); | |
| 4546 } | |
| 4547 } | 4537 } |
| 4548 | 4538 |
| 4549 | 4539 |
| 4550 bool Map::is_constructor() const { | 4540 bool Map::function_with_prototype() { |
| 4551 return ((1 << kIsConstructor) & bit_field()) != 0; | 4541 return FunctionWithPrototype::decode(bit_field()); |
| 4552 } | 4542 } |
| 4553 | 4543 |
| 4554 | 4544 |
| 4555 void Map::set_is_hidden_prototype() { | 4545 void Map::set_is_hidden_prototype() { |
| 4556 set_bit_field3(IsHiddenPrototype::update(bit_field3(), true)); | 4546 set_bit_field3(IsHiddenPrototype::update(bit_field3(), true)); |
| 4557 } | 4547 } |
| 4558 | 4548 |
| 4559 | 4549 |
| 4560 bool Map::is_hidden_prototype() const { | 4550 bool Map::is_hidden_prototype() const { |
| 4561 return IsHiddenPrototype::decode(bit_field3()); | 4551 return IsHiddenPrototype::decode(bit_field3()); |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4798 | 4788 |
| 4799 bool Map::IsPrimitiveMap() { | 4789 bool Map::IsPrimitiveMap() { |
| 4800 STATIC_ASSERT(FIRST_PRIMITIVE_TYPE == FIRST_TYPE); | 4790 STATIC_ASSERT(FIRST_PRIMITIVE_TYPE == FIRST_TYPE); |
| 4801 return instance_type() <= LAST_PRIMITIVE_TYPE; | 4791 return instance_type() <= LAST_PRIMITIVE_TYPE; |
| 4802 } | 4792 } |
| 4803 bool Map::IsJSObjectMap() { | 4793 bool Map::IsJSObjectMap() { |
| 4804 STATIC_ASSERT(LAST_JS_OBJECT_TYPE == LAST_TYPE); | 4794 STATIC_ASSERT(LAST_JS_OBJECT_TYPE == LAST_TYPE); |
| 4805 return instance_type() >= FIRST_JS_OBJECT_TYPE; | 4795 return instance_type() >= FIRST_JS_OBJECT_TYPE; |
| 4806 } | 4796 } |
| 4807 bool Map::IsJSArrayMap() { return instance_type() == JS_ARRAY_TYPE; } | 4797 bool Map::IsJSArrayMap() { return instance_type() == JS_ARRAY_TYPE; } |
| 4808 bool Map::IsJSFunctionMap() { return instance_type() == JS_FUNCTION_TYPE; } | |
| 4809 bool Map::IsStringMap() { return instance_type() < FIRST_NONSTRING_TYPE; } | 4798 bool Map::IsStringMap() { return instance_type() < FIRST_NONSTRING_TYPE; } |
| 4810 bool Map::IsJSProxyMap() { | 4799 bool Map::IsJSProxyMap() { |
| 4811 InstanceType type = instance_type(); | 4800 InstanceType type = instance_type(); |
| 4812 return FIRST_JS_PROXY_TYPE <= type && type <= LAST_JS_PROXY_TYPE; | 4801 return FIRST_JS_PROXY_TYPE <= type && type <= LAST_JS_PROXY_TYPE; |
| 4813 } | 4802 } |
| 4814 bool Map::IsJSGlobalProxyMap() { | 4803 bool Map::IsJSGlobalProxyMap() { |
| 4815 return instance_type() == JS_GLOBAL_PROXY_TYPE; | 4804 return instance_type() == JS_GLOBAL_PROXY_TYPE; |
| 4816 } | 4805 } |
| 4817 bool Map::IsJSGlobalObjectMap() { | 4806 bool Map::IsJSGlobalObjectMap() { |
| 4818 return instance_type() == JS_GLOBAL_OBJECT_TYPE; | 4807 return instance_type() == JS_GLOBAL_OBJECT_TYPE; |
| (...skipping 1441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6260 if (map()->has_non_instance_prototype()) { | 6249 if (map()->has_non_instance_prototype()) { |
| 6261 Object* prototype = map()->GetConstructor(); | 6250 Object* prototype = map()->GetConstructor(); |
| 6262 // The map must have a prototype in that field, not a back pointer. | 6251 // The map must have a prototype in that field, not a back pointer. |
| 6263 DCHECK(!prototype->IsMap()); | 6252 DCHECK(!prototype->IsMap()); |
| 6264 return prototype; | 6253 return prototype; |
| 6265 } | 6254 } |
| 6266 return instance_prototype(); | 6255 return instance_prototype(); |
| 6267 } | 6256 } |
| 6268 | 6257 |
| 6269 | 6258 |
| 6259 bool JSFunction::should_have_prototype() { |
| 6260 return map()->function_with_prototype(); |
| 6261 } |
| 6262 |
| 6263 |
| 6270 bool JSFunction::is_compiled() { | 6264 bool JSFunction::is_compiled() { |
| 6271 Builtins* builtins = GetIsolate()->builtins(); | 6265 Builtins* builtins = GetIsolate()->builtins(); |
| 6272 return code() != builtins->builtin(Builtins::kCompileLazy) && | 6266 return code() != builtins->builtin(Builtins::kCompileLazy) && |
| 6273 code() != builtins->builtin(Builtins::kCompileOptimized) && | 6267 code() != builtins->builtin(Builtins::kCompileOptimized) && |
| 6274 code() != builtins->builtin(Builtins::kCompileOptimizedConcurrent); | 6268 code() != builtins->builtin(Builtins::kCompileOptimizedConcurrent); |
| 6275 } | 6269 } |
| 6276 | 6270 |
| 6277 | 6271 |
| 6278 bool JSFunction::has_simple_parameters() { | 6272 bool JSFunction::has_simple_parameters() { |
| 6279 return shared()->has_simple_parameters(); | 6273 return shared()->has_simple_parameters(); |
| (...skipping 1733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8013 #undef READ_INT64_FIELD | 8007 #undef READ_INT64_FIELD |
| 8014 #undef WRITE_INT64_FIELD | 8008 #undef WRITE_INT64_FIELD |
| 8015 #undef READ_BYTE_FIELD | 8009 #undef READ_BYTE_FIELD |
| 8016 #undef WRITE_BYTE_FIELD | 8010 #undef WRITE_BYTE_FIELD |
| 8017 #undef NOBARRIER_READ_BYTE_FIELD | 8011 #undef NOBARRIER_READ_BYTE_FIELD |
| 8018 #undef NOBARRIER_WRITE_BYTE_FIELD | 8012 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 8019 | 8013 |
| 8020 } } // namespace v8::internal | 8014 } } // namespace v8::internal |
| 8021 | 8015 |
| 8022 #endif // V8_OBJECTS_INL_H_ | 8016 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |