| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 700ae041cea4708833a419ec159145b042dd7ef2..1863dfd1e0ad8104fc0f9dee91e96fbd7103e417 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -1529,20 +1529,36 @@ int HeapObject::Size() {
|
| }
|
|
|
|
|
| -bool HeapObject::MayContainRawValues() {
|
| +HeapObjectContents HeapObject::ContentType() {
|
| InstanceType type = map()->instance_type();
|
| if (type <= LAST_NAME_TYPE) {
|
| if (type == SYMBOL_TYPE) {
|
| - return false;
|
| + return HeapObjectContents::kTaggedValues;
|
| }
|
| DCHECK(type < FIRST_NONSTRING_TYPE);
|
| // There are four string representations: sequential strings, external
|
| // strings, cons strings, and sliced strings.
|
| // Only the former two contain raw values and no heap pointers (besides the
|
| // map-word).
|
| - return ((type & kIsIndirectStringMask) != kIsIndirectStringTag);
|
| + if (((type & kIsIndirectStringMask) != kIsIndirectStringTag))
|
| + return HeapObjectContents::kRawValues;
|
| + else
|
| + return HeapObjectContents::kTaggedValues;
|
| +#if 0
|
| + // TODO(jochen): Enable eventually.
|
| + } else if (type == JS_FUNCTION_TYPE) {
|
| + return HeapObjectContents::kMixedValues;
|
| +#endif
|
| + } else if (type <= LAST_DATA_TYPE) {
|
| + // TODO(jochen): Why do we claim that Code and Map contain only raw values?
|
| + return HeapObjectContents::kRawValues;
|
| + } else {
|
| + if (FLAG_unbox_double_fields) {
|
| + LayoutDescriptorHelper helper(map());
|
| + if (!helper.all_fields_tagged()) return HeapObjectContents::kMixedValues;
|
| + }
|
| + return HeapObjectContents::kTaggedValues;
|
| }
|
| - return (type <= LAST_DATA_TYPE);
|
| }
|
|
|
|
|
|
|