LCOV - code coverage report
Current view: top level - src/objects - js-regexp-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 29 30 96.7 %
Date: 2019-03-21 Functions: 11 11 100.0 %

          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             : OBJECT_CONSTRUCTORS_IMPL(JSRegExp, JSObject)
      21             : 
      22             : CAST_ACCESSOR(JSRegExp)
      23             : 
      24    29605317 : ACCESSORS(JSRegExp, data, Object, kDataOffset)
      25     2286793 : ACCESSORS(JSRegExp, flags, Object, kFlagsOffset)
      26     2286811 : ACCESSORS(JSRegExp, source, Object, kSourceOffset)
      27        9941 : ACCESSORS(JSRegExp, last_index, Object, kLastIndexOffset)
      28             : 
      29     4775533 : JSRegExp::Type JSRegExp::TypeTag() const {
      30             :   Object data = this->data();
      31     4775533 :   if (data->IsUndefined()) return JSRegExp::NOT_COMPILED;
      32             :   Smi smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex));
      33     4775533 :   return static_cast<JSRegExp::Type>(smi->value());
      34             : }
      35             : 
      36      188788 : int JSRegExp::CaptureCount() {
      37      188788 :   switch (TypeTag()) {
      38             :     case ATOM:
      39             :       return 0;
      40             :     case IRREGEXP:
      41       16646 :       return Smi::ToInt(DataAt(kIrregexpCaptureCountIndex));
      42             :     default:
      43           0 :       UNREACHABLE();
      44             :   }
      45             : }
      46             : 
      47      194187 : 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      194187 :   return Flags(smi->value());
      52             : }
      53             : 
      54       86187 : String JSRegExp::Pattern() {
      55             :   DCHECK(this->data()->IsFixedArray());
      56             :   Object data = this->data();
      57             :   String pattern = String::cast(FixedArray::cast(data)->get(kSourceIndex));
      58       86187 :   return pattern;
      59             : }
      60             : 
      61             : Object JSRegExp::CaptureNameMap() {
      62             :   DCHECK(this->data()->IsFixedArray());
      63             :   DCHECK_EQ(TypeTag(), IRREGEXP);
      64      176993 :   Object value = DataAt(kIrregexpCaptureNameMapIndex);
      65             :   DCHECK_NE(value, Smi::FromInt(JSRegExp::kUninitializedValue));
      66      176993 :   return value;
      67             : }
      68             : 
      69     4748599 : Object JSRegExp::DataAt(int index) const {
      70             :   DCHECK(TypeTag() != NOT_COMPILED);
      71     4748599 :   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          35 :   return (DataAt(kIrregexpLatin1CodeIndex) != uninitialized ||
      93           5 :           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