LCOV - code coverage report
Current view: top level - src/objects - js-regexp-inl.h (source / functions) Hit Total Coverage
Test: app.info Lines: 18 19 94.7 %
Date: 2019-04-18 Functions: 8 8 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    29628250 : ACCESSORS(JSRegExp, data, Object, kDataOffset)
      25     2288570 : ACCESSORS(JSRegExp, flags, Object, kFlagsOffset)
      26     2288588 : ACCESSORS(JSRegExp, source, Object, kSourceOffset)
      27        9997 : ACCESSORS(JSRegExp, last_index, Object, kLastIndexOffset)
      28             : 
      29     4774206 : JSRegExp::Type JSRegExp::TypeTag() const {
      30             :   Object data = this->data();
      31     4774206 :   if (data->IsUndefined()) return JSRegExp::NOT_COMPILED;
      32             :   Smi smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex));
      33     4774206 :   return static_cast<JSRegExp::Type>(smi->value());
      34             : }
      35             : 
      36      188782 : int JSRegExp::CaptureCount() {
      37      188782 :   switch (TypeTag()) {
      38             :     case ATOM:
      39             :       return 0;
      40             :     case IRREGEXP:
      41        8317 :       return Smi::ToInt(DataAt(kIrregexpCaptureCountIndex));
      42             :     default:
      43           0 :       UNREACHABLE();
      44             :   }
      45             : }
      46             : 
      47       93248 : 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       93248 :   return Flags(smi->value());
      52             : }
      53             : 
      54             : String JSRegExp::Pattern() {
      55             :   DCHECK(this->data()->IsFixedArray());
      56             :   Object data = this->data();
      57             :   String pattern = String::cast(FixedArray::cast(data)->get(kSourceIndex));
      58             :   return pattern;
      59             : }
      60             : 
      61             : Object JSRegExp::CaptureNameMap() {
      62             :   DCHECK(this->data()->IsFixedArray());
      63             :   DCHECK_EQ(TypeTag(), IRREGEXP);
      64             :   Object value = DataAt(kIrregexpCaptureNameMapIndex);
      65             :   DCHECK_NE(value, Smi::FromInt(JSRegExp::kUninitializedValue));
      66             :   return value;
      67             : }
      68             : 
      69             : Object JSRegExp::DataAt(int index) const {
      70             :   DCHECK(TypeTag() != NOT_COMPILED);
      71             :   return FixedArray::cast(data())->get(index);
      72             : }
      73             : 
      74             : 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             : }
      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          20 :   return (DataAt(kIrregexpLatin1CodeIndex) != uninitialized ||
      93             :           DataAt(kIrregexpUC16CodeIndex) != uninitialized);
      94             : }
      95             : 
      96           5 : void JSRegExp::DiscardCompiledCodeForSerialization() {
      97             :   DCHECK(HasCompiledCode());
      98             :   SetDataAt(kIrregexpLatin1CodeIndex, Smi::FromInt(kUninitializedValue));
      99             :   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