LCOV - code coverage report
Current view: top level - src - string-constants.h (source / functions) Hit Total Coverage
Test: app.info Lines: 5 5 100.0 %
Date: 2019-04-18 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2018 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_STRING_CONSTANTS_H_
       6             : #define V8_STRING_CONSTANTS_H_
       7             : 
       8             : #include "src/handles.h"
       9             : #include "src/objects/string.h"
      10             : #include "src/zone/zone.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : enum class StringConstantKind {
      16             :   kStringLiteral,
      17             :   kNumberToStringConstant,
      18             :   kStringCons
      19             : };
      20             : 
      21             : class StringConstantBase : public ZoneObject {
      22             :  public:
      23       12056 :   explicit StringConstantBase(StringConstantKind kind) : kind_(kind) {}
      24             : 
      25             :   StringConstantKind kind() const { return kind_; }
      26             :   Handle<String> AllocateStringConstant(Isolate* isolate) const;
      27             : 
      28             :   size_t GetMaxStringConstantLength() const;
      29             : 
      30             :   bool operator==(const StringConstantBase& other) const;
      31             : 
      32             :  private:
      33        9851 :   void Memoize(Handle<String> flattened) const { flattened_ = flattened; }
      34             : 
      35             :   StringConstantKind kind_;
      36             :   mutable Handle<String> flattened_ = Handle<String>::null();
      37             : };
      38             : 
      39             : size_t hash_value(StringConstantBase const& base);
      40             : 
      41             : class StringLiteral final : public StringConstantBase {
      42             :  public:
      43             :   explicit StringLiteral(Handle<String> str, size_t length)
      44             :       : StringConstantBase(StringConstantKind::kStringLiteral),
      45             :         str_(str),
      46        6730 :         length_(length) {}
      47             : 
      48             :   Handle<String> str() const { return str_; }
      49             : 
      50             :   size_t GetMaxStringConstantLength() const;
      51             : 
      52             :  private:
      53             :   Handle<String> str_;
      54             :   size_t length_;  // We store this separately to avoid accessing the heap.
      55             : };
      56             : 
      57             : bool operator==(StringLiteral const& lhs, StringLiteral const& rhs);
      58             : bool operator!=(StringLiteral const& lhs, StringLiteral const& rhs);
      59             : 
      60             : size_t hash_value(StringLiteral const& parameters);
      61             : 
      62             : std::ostream& operator<<(std::ostream& os, StringLiteral const& parameters);
      63             : 
      64             : class NumberToStringConstant final : public StringConstantBase {
      65             :  public:
      66             :   explicit NumberToStringConstant(double num)
      67             :       : StringConstantBase(StringConstantKind::kNumberToStringConstant),
      68         269 :         num_(num) {}
      69             : 
      70             :   double num() const { return num_; }
      71             : 
      72             :   size_t GetMaxStringConstantLength() const;
      73             : 
      74             :  private:
      75             :   double num_;
      76             : };
      77             : 
      78             : bool operator==(NumberToStringConstant const& lhs,
      79             :                 NumberToStringConstant const& rhs);
      80             : bool operator!=(NumberToStringConstant const& lhs,
      81             :                 NumberToStringConstant const& rhs);
      82             : 
      83             : size_t hash_value(NumberToStringConstant const& parameters);
      84             : 
      85             : std::ostream& operator<<(std::ostream& os,
      86             :                          NumberToStringConstant const& parameters);
      87             : 
      88             : class StringCons final : public StringConstantBase {
      89             :  public:
      90             :   explicit StringCons(const StringConstantBase* lhs,
      91             :                       const StringConstantBase* rhs)
      92             :       : StringConstantBase(StringConstantKind::kStringCons),
      93             :         lhs_(lhs),
      94        5057 :         rhs_(rhs) {}
      95             : 
      96             :   const StringConstantBase* lhs() const { return lhs_; }
      97             :   const StringConstantBase* rhs() const { return rhs_; }
      98             : 
      99             :   size_t GetMaxStringConstantLength() const;
     100             : 
     101             :  private:
     102             :   const StringConstantBase* lhs_;
     103             :   const StringConstantBase* rhs_;
     104             : };
     105             : 
     106             : bool operator==(StringCons const& lhs, StringCons const& rhs);
     107             : bool operator!=(StringCons const& lhs, StringCons const& rhs);
     108             : 
     109             : size_t hash_value(StringCons const& parameters);
     110             : 
     111             : std::ostream& operator<<(std::ostream& os, StringCons const& parameters);
     112             : 
     113             : }  // namespace internal
     114             : }  // namespace v8
     115             : 
     116             : #endif  // V8_STRING_CONSTANTS_H_

Generated by: LCOV version 1.10