LCOV - code coverage report
Current view: top level - src - field-type.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 29 35 82.9 %
Date: 2019-01-20 Functions: 14 16 87.5 %

          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     1372846 : FieldType FieldType::None() { return FieldType(Smi::FromInt(2).ptr()); }
      17             : 
      18             : // static
      19      237992 : FieldType FieldType::Any() { return FieldType(Smi::FromInt(1).ptr()); }
      20             : 
      21             : // static
      22      237756 : Handle<FieldType> FieldType::None(Isolate* isolate) {
      23      237756 :   return handle(None(), isolate);
      24             : }
      25             : 
      26             : // static
      27     6892472 : Handle<FieldType> FieldType::Any(Isolate* isolate) {
      28     6892471 :   return handle(Any(), isolate);
      29             : }
      30             : 
      31             : // static
      32           0 : FieldType FieldType::Class(Map map) { return FieldType::cast(map); }
      33             : 
      34             : // static
      35      782117 : Handle<FieldType> FieldType::Class(Handle<Map> map, Isolate* isolate) {
      36      782118 :   return handle(Class(*map), isolate);
      37             : }
      38             : 
      39             : // static
      40    39430272 : FieldType FieldType::cast(Object object) {
      41             :   DCHECK(object == None() || object == Any() || object->IsMap());
      42    39430272 :   return FieldType(object->ptr());
      43             : }
      44             : 
      45    15214768 : bool FieldType::IsClass() const { return this->IsMap(); }
      46             : 
      47      749051 : Map FieldType::AsClass() const {
      48             :   DCHECK(IsClass());
      49      749051 :   return Map::cast(*this);
      50             : }
      51             : 
      52           0 : bool FieldType::NowStable() const {
      53           0 :   return !this->IsClass() || AsClass()->is_stable();
      54             : }
      55             : 
      56       43572 : bool FieldType::NowIs(FieldType other) const {
      57      878183 :   if (other->IsAny()) return true;
      58      187574 :   if (IsNone()) return true;
      59      122722 :   if (other->IsNone()) return false;
      60       97218 :   if (IsAny()) return false;
      61             :   DCHECK(IsClass());
      62             :   DCHECK(other->IsClass());
      63        1390 :   return *this == other;
      64             : }
      65             : 
      66     1669215 : bool FieldType::NowIs(Handle<FieldType> other) const { return NowIs(*other); }
      67             : 
      68       10744 : void FieldType::PrintTo(std::ostream& os) const {
      69       10744 :   if (IsAny()) {
      70       10744 :     os << "Any";
      71           0 :   } else if (IsNone()) {
      72           0 :     os << "None";
      73             :   } else {
      74             :     DCHECK(IsClass());
      75           0 :     os << "Class(" << reinterpret_cast<void*>(AsClass()->ptr()) << ")";
      76             :   }
      77       10744 : }
      78             : 
      79    37006182 : bool FieldType::NowContains(Object value) const {
      80    37006182 :   if (*this == Any()) return true;
      81     2492112 :   if (*this == None()) return false;
      82     2492100 :   if (!value->IsHeapObject()) return false;
      83             :   return HeapObject::cast(value)->map() == Map::cast(*this);
      84             : }
      85             : 
      86             : }  // namespace internal
      87      183867 : }  // namespace v8

Generated by: LCOV version 1.10