diff options
Diffstat (limited to 'deps/v8/src/string-constants.h')
-rw-r--r-- | deps/v8/src/string-constants.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/deps/v8/src/string-constants.h b/deps/v8/src/string-constants.h new file mode 100644 index 0000000000..b7134849db --- /dev/null +++ b/deps/v8/src/string-constants.h @@ -0,0 +1,115 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_STRING_CONSTANTS_H_ +#define V8_STRING_CONSTANTS_H_ + +#include "src/objects/string.h" +#include "src/zone/zone.h" + +namespace v8 { +namespace internal { + +enum class StringConstantKind { + kStringLiteral, + kNumberToStringConstant, + kStringCons +}; + +class StringConstantBase : public ZoneObject { + public: + explicit StringConstantBase(StringConstantKind kind) : kind_(kind) {} + + StringConstantKind kind() const { return kind_; } + Handle<String> AllocateStringConstant(Isolate* isolate) const; + + size_t GetMaxStringConstantLength() const; + + bool operator==(const StringConstantBase& other) const; + + private: + void Memoize(Handle<String> flattened) const { flattened_ = flattened; } + + StringConstantKind kind_; + mutable Handle<String> flattened_ = Handle<String>::null(); +}; + +size_t hash_value(StringConstantBase const& base); + +class StringLiteral final : public StringConstantBase { + public: + explicit StringLiteral(Handle<String> str, size_t length) + : StringConstantBase(StringConstantKind::kStringLiteral), + str_(str), + length_(length) {} + + Handle<String> str() const { return str_; } + + size_t GetMaxStringConstantLength() const; + + private: + Handle<String> str_; + size_t length_; // We store this separately to avoid accessing the heap. +}; + +bool operator==(StringLiteral const& lhs, StringLiteral const& rhs); +bool operator!=(StringLiteral const& lhs, StringLiteral const& rhs); + +size_t hash_value(StringLiteral const& parameters); + +std::ostream& operator<<(std::ostream& os, StringLiteral const& parameters); + +class NumberToStringConstant final : public StringConstantBase { + public: + explicit NumberToStringConstant(double num) + : StringConstantBase(StringConstantKind::kNumberToStringConstant), + num_(num) {} + + double num() const { return num_; } + + size_t GetMaxStringConstantLength() const; + + private: + double num_; +}; + +bool operator==(NumberToStringConstant const& lhs, + NumberToStringConstant const& rhs); +bool operator!=(NumberToStringConstant const& lhs, + NumberToStringConstant const& rhs); + +size_t hash_value(NumberToStringConstant const& parameters); + +std::ostream& operator<<(std::ostream& os, + NumberToStringConstant const& parameters); + +class StringCons final : public StringConstantBase { + public: + explicit StringCons(const StringConstantBase* lhs, + const StringConstantBase* rhs) + : StringConstantBase(StringConstantKind::kStringCons), + lhs_(lhs), + rhs_(rhs) {} + + const StringConstantBase* lhs() const { return lhs_; } + const StringConstantBase* rhs() const { return rhs_; } + + size_t GetMaxStringConstantLength() const; + + private: + const StringConstantBase* lhs_; + const StringConstantBase* rhs_; +}; + +bool operator==(StringCons const& lhs, StringCons const& rhs); +bool operator!=(StringCons const& lhs, StringCons const& rhs); + +size_t hash_value(StringCons const& parameters); + +std::ostream& operator<<(std::ostream& os, StringCons const& parameters); + +} // namespace internal +} // namespace v8 + +#endif // V8_STRING_CONSTANTS_H_ |