LCOV - code coverage report
Current view: top level - src - field-type.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 33 35 94.3 %
Date: 2019-04-18 Functions: 14 15 93.3 %

          Line data    Source code
       1             : // Copyright 2016 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/field-type.h"
       6             : 
       7             : #include "src/handles-inl.h"
       8             : #include "src/objects-inl.h"
       9             : #include "src/objects/smi.h"
      10             : #include "src/ostreams.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : // static
      16     1792874 : FieldType FieldType::None() { return FieldType(Smi::FromInt(2).ptr()); }
      17             : 
      18             : // static
      19     4516779 : FieldType FieldType::Any() { return FieldType(Smi::FromInt(1).ptr()); }
      20             : 
      21             : // static
      22      224273 : Handle<FieldType> FieldType::None(Isolate* isolate) {
      23      224273 :   return handle(None(), isolate);
      24             : }
      25             : 
      26             : // static
      27    12717153 : Handle<FieldType> FieldType::Any(Isolate* isolate) {
      28    12717164 :   return handle(Any(), isolate);
      29             : }
      30             : 
      31             : // static
      32          40 : FieldType FieldType::Class(Map map) { return FieldType::cast(map); }
      33             : 
      34             : // static
      35     5839984 : Handle<FieldType> FieldType::Class(Handle<Map> map, Isolate* isolate) {
      36     5839985 :   return handle(Class(*map), isolate);
      37             : }
      38             : 
      39             : // static
      40    37188801 : FieldType FieldType::cast(Object object) {
      41             :   DCHECK(object == None() || object == Any() || object->IsMap());
      42    37188801 :   return FieldType(object->ptr());
      43             : }
      44             : 
      45    34769392 : bool FieldType::IsClass() const { return this->IsMap(); }
      46             : 
      47     5817105 : Map FieldType::AsClass() const {
      48             :   DCHECK(IsClass());
      49     5817105 :   return Map::cast(*this);
      50             : }
      51             : 
      52           0 : bool FieldType::NowStable() const {
      53           0 :   return !this->IsClass() || AsClass()->is_stable();
      54             : }
      55             : 
      56       31013 : bool FieldType::NowIs(FieldType other) const {
      57     1169886 :   if (other->IsAny()) return true;
      58      196047 :   if (IsNone()) return true;
      59      134793 :   if (other->IsNone()) return false;
      60      108500 :   if (IsAny()) return false;
      61             :   DCHECK(IsClass());
      62             :   DCHECK(other->IsClass());
      63         140 :   return *this == other;
      64             : }
      65             : 
      66     2277746 : bool FieldType::NowIs(Handle<FieldType> other) const { return NowIs(*other); }
      67             : 
      68       32105 : void FieldType::PrintTo(std::ostream& os) const {
      69       32105 :   if (IsAny()) {
      70       30995 :     os << "Any";
      71        1110 :   } else if (IsNone()) {
      72          25 :     os << "None";
      73             :   } else {
      74             :     DCHECK(IsClass());
      75        2170 :     os << "Class(" << reinterpret_cast<void*>(AsClass()->ptr()) << ")";
      76             :   }
      77       32105 : }
      78             : 
      79    34159400 : bool FieldType::NowContains(Object value) const {
      80    34159400 :   if (*this == Any()) return true;
      81     1183847 :   if (*this == None()) return false;
      82     1183846 :   if (!value->IsHeapObject()) return false;
      83             :   return HeapObject::cast(value)->map() == Map::cast(*this);
      84             : }
      85             : 
      86             : }  // namespace internal
      87      122036 : }  // namespace v8

Generated by: LCOV version 1.10