LCOV - code coverage report
Current view: top level - src/objects - js-regexp-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 33 34 97.1 %
Date: 2019-02-19 Functions: 14 15 93.3 %

          Line data    Source code
       1             : // Copyright 2017 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             : #ifndef V8_OBJECTS_JS_REGEXP_INL_H_
       6             : #define V8_OBJECTS_JS_REGEXP_INL_H_
       7             : 
       8             : #include "src/objects/js-regexp.h"
       9             : 
      10             : #include "src/objects-inl.h"  // Needed for write barriers
      11             : #include "src/objects/smi.h"
      12             : #include "src/objects/string.h"
      13             : 
      14             : // Has to be the last include (doesn't have include guards):
      15             : #include "src/objects/object-macros.h"
      16             : 
      17             : namespace v8 {
      18             : namespace internal {
      19             : 
      20     9912200 : OBJECT_CONSTRUCTORS_IMPL(JSRegExp, JSObject)
      21             : 
      22     4956100 : CAST_ACCESSOR(JSRegExp)
      23             : 
      24    29608292 : ACCESSORS(JSRegExp, data, Object, kDataOffset)
      25     2285574 : ACCESSORS(JSRegExp, flags, Object, kFlagsOffset)
      26     2285592 : ACCESSORS(JSRegExp, source, Object, kSourceOffset)
      27       16380 : ACCESSORS(JSRegExp, last_index, Object, kLastIndexOffset)
      28             : 
      29     4776558 : JSRegExp::Type JSRegExp::TypeTag() const {
      30     4776558 :   Object data = this->data();
      31     4776558 :   if (data->IsUndefined()) return JSRegExp::NOT_COMPILED;
      32             :   Smi smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex));
      33     4776558 :   return static_cast<JSRegExp::Type>(smi->value());
      34             : }
      35             : 
      36      188789 : int JSRegExp::CaptureCount() {
      37      188789 :   switch (TypeTag()) {
      38             :     case ATOM:
      39             :       return 0;
      40             :     case IRREGEXP:
      41        8324 :       return Smi::ToInt(DataAt(kIrregexpCaptureCountIndex));
      42             :     default:
      43           0 :       UNREACHABLE();
      44             :   }
      45             : }
      46             : 
      47      194007 : JSRegExp::Flags JSRegExp::GetFlags() {
      48             :   DCHECK(this->data()->IsFixedArray());
      49             :   Object data = this->data();
      50             :   Smi smi = Smi::cast(FixedArray::cast(data)->get(kFlagsIndex));
      51      194007 :   return Flags(smi->value());
      52             : }
      53             : 
      54       86034 : String JSRegExp::Pattern() {
      55             :   DCHECK(this->data()->IsFixedArray());
      56             :   Object data = this->data();
      57             :   String pattern = String::cast(FixedArray::cast(data)->get(kSourceIndex));
      58       86034 :   return pattern;
      59             : }
      60             : 
      61         108 : Object JSRegExp::CaptureNameMap() {
      62             :   DCHECK(this->data()->IsFixedArray());
      63             :   DCHECK_EQ(TypeTag(), IRREGEXP);
      64      177003 :   Object value = DataAt(kIrregexpCaptureNameMapIndex);
      65             :   DCHECK_NE(value, Smi::FromInt(JSRegExp::kUninitializedValue));
      66      177003 :   return value;
      67             : }
      68             : 
      69     4747262 : Object JSRegExp::DataAt(int index) const {
      70             :   DCHECK(TypeTag() != NOT_COMPILED);
      71     4747262 :   return FixedArray::cast(data())->get(index);
      72             : }
      73             : 
      74          10 : void JSRegExp::SetDataAt(int index, Object value) {
      75             :   DCHECK(TypeTag() != NOT_COMPILED);
      76             :   DCHECK_GE(index,
      77             :             kDataIndex);  // Only implementation data can be set this way.
      78          10 :   FixedArray::cast(data())->set(index, value);
      79          10 : }
      80             : 
      81          30 : bool JSRegExp::HasCompiledCode() const {
      82          30 :   if (TypeTag() != IRREGEXP) return false;
      83             : #ifdef DEBUG
      84             :   DCHECK(DataAt(kIrregexpLatin1CodeIndex)->IsCode() ||
      85             :          DataAt(kIrregexpLatin1CodeIndex)->IsByteArray() ||
      86             :          DataAt(kIrregexpLatin1CodeIndex) == Smi::FromInt(kUninitializedValue));
      87             :   DCHECK(DataAt(kIrregexpUC16CodeIndex)->IsCode() ||
      88             :          DataAt(kIrregexpUC16CodeIndex)->IsByteArray() ||
      89             :          DataAt(kIrregexpUC16CodeIndex) == Smi::FromInt(kUninitializedValue));
      90             : #endif  // DEBUG
      91             :   Smi uninitialized = Smi::FromInt(kUninitializedValue);
      92          50 :   return (DataAt(kIrregexpLatin1CodeIndex) != uninitialized ||
      93          20 :           DataAt(kIrregexpUC16CodeIndex) != uninitialized);
      94             : }
      95             : 
      96           5 : void JSRegExp::DiscardCompiledCodeForSerialization() {
      97             :   DCHECK(HasCompiledCode());
      98           5 :   SetDataAt(kIrregexpLatin1CodeIndex, Smi::FromInt(kUninitializedValue));
      99           5 :   SetDataAt(kIrregexpUC16CodeIndex, Smi::FromInt(kUninitializedValue));
     100           5 : }
     101             : 
     102             : }  // namespace internal
     103             : }  // namespace v8
     104             : 
     105             : #include "src/objects/object-macros-undef.h"
     106             : 
     107             : #endif  // V8_OBJECTS_JS_REGEXP_INL_H_

Generated by: LCOV version 1.10