Replace StringPiece with std::string_view in RegType.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 123750182
Change-Id: I888a268bbec4eb0e5a19b0bc2a4a97e3492feda5
diff --git a/runtime/verifier/reg_type.cc b/runtime/verifier/reg_type.cc
index 91be00d..150d35c 100644
--- a/runtime/verifier/reg_type.cc
+++ b/runtime/verifier/reg_type.cc
@@ -55,18 +55,22 @@
const NullType* NullType::instance_ = nullptr;
PrimitiveType::PrimitiveType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
: RegType(klass, descriptor, cache_id) {
CHECK(klass != nullptr);
CHECK(!descriptor.empty());
}
-Cat1Type::Cat1Type(ObjPtr<mirror::Class> klass, const StringPiece& descriptor, uint16_t cache_id)
+Cat1Type::Cat1Type(ObjPtr<mirror::Class> klass,
+ const std::string_view& descriptor,
+ uint16_t cache_id)
: PrimitiveType(klass, descriptor, cache_id) {
}
-Cat2Type::Cat2Type(ObjPtr<mirror::Class> klass, const StringPiece& descriptor, uint16_t cache_id)
+Cat2Type::Cat2Type(ObjPtr<mirror::Class> klass,
+ const std::string_view& descriptor,
+ uint16_t cache_id)
: PrimitiveType(klass, descriptor, cache_id) {
}
@@ -132,7 +136,7 @@
}
const DoubleHiType* DoubleHiType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new DoubleHiType(klass, descriptor, cache_id);
@@ -147,7 +151,7 @@
}
const DoubleLoType* DoubleLoType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new DoubleLoType(klass, descriptor, cache_id);
@@ -162,7 +166,7 @@
}
const LongLoType* LongLoType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new LongLoType(klass, descriptor, cache_id);
@@ -170,7 +174,7 @@
}
const LongHiType* LongHiType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new LongHiType(klass, descriptor, cache_id);
@@ -192,7 +196,7 @@
}
const FloatType* FloatType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new FloatType(klass, descriptor, cache_id);
@@ -207,7 +211,7 @@
}
const CharType* CharType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new CharType(klass, descriptor, cache_id);
@@ -222,7 +226,7 @@
}
const ShortType* ShortType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new ShortType(klass, descriptor, cache_id);
@@ -237,7 +241,7 @@
}
const ByteType* ByteType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new ByteType(klass, descriptor, cache_id);
@@ -252,7 +256,7 @@
}
const IntegerType* IntegerType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new IntegerType(klass, descriptor, cache_id);
@@ -267,7 +271,7 @@
}
const ConflictType* ConflictType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new ConflictType(klass, descriptor, cache_id);
@@ -282,7 +286,7 @@
}
const BooleanType* BooleanType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(BooleanType::instance_ == nullptr);
instance_ = new BooleanType(klass, descriptor, cache_id);
@@ -301,7 +305,7 @@
}
const UndefinedType* UndefinedType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new UndefinedType(klass, descriptor, cache_id);
@@ -316,7 +320,7 @@
}
PreciseReferenceType::PreciseReferenceType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
: RegType(klass, descriptor, cache_id) {
// Note: no check for IsInstantiable() here. We may produce this in case an InstantiationError
@@ -352,47 +356,47 @@
std::string UnresolvedReferenceType::Dump() const {
std::stringstream result;
- result << "Unresolved Reference" << ": " << PrettyDescriptor(GetDescriptor().as_string().c_str());
+ result << "Unresolved Reference: " << PrettyDescriptor(std::string(GetDescriptor()).c_str());
return result.str();
}
std::string UnresolvedUninitializedRefType::Dump() const {
std::stringstream result;
- result << "Unresolved And Uninitialized Reference" << ": "
- << PrettyDescriptor(GetDescriptor().as_string().c_str())
+ result << "Unresolved And Uninitialized Reference: "
+ << PrettyDescriptor(std::string(GetDescriptor()).c_str())
<< " Allocation PC: " << GetAllocationPc();
return result.str();
}
std::string UnresolvedUninitializedThisRefType::Dump() const {
std::stringstream result;
- result << "Unresolved And Uninitialized This Reference"
- << PrettyDescriptor(GetDescriptor().as_string().c_str());
+ result << "Unresolved And Uninitialized This Reference: "
+ << PrettyDescriptor(std::string(GetDescriptor()).c_str());
return result.str();
}
std::string ReferenceType::Dump() const {
std::stringstream result;
- result << "Reference" << ": " << mirror::Class::PrettyDescriptor(GetClass());
+ result << "Reference: " << mirror::Class::PrettyDescriptor(GetClass());
return result.str();
}
std::string PreciseReferenceType::Dump() const {
std::stringstream result;
- result << "Precise Reference" << ": "<< mirror::Class::PrettyDescriptor(GetClass());
+ result << "Precise Reference: " << mirror::Class::PrettyDescriptor(GetClass());
return result.str();
}
std::string UninitializedReferenceType::Dump() const {
std::stringstream result;
- result << "Uninitialized Reference" << ": " << mirror::Class::PrettyDescriptor(GetClass());
+ result << "Uninitialized Reference: " << mirror::Class::PrettyDescriptor(GetClass());
result << " Allocation PC: " << GetAllocationPc();
return result.str();
}
std::string UninitializedThisReferenceType::Dump() const {
std::stringstream result;
- result << "Uninitialized This Reference" << ": " << mirror::Class::PrettyDescriptor(GetClass());
+ result << "Uninitialized This Reference: " << mirror::Class::PrettyDescriptor(GetClass());
result << "Allocation PC: " << GetAllocationPc();
return result.str();
}
@@ -990,7 +994,7 @@
}
const NullType* NullType::CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) {
CHECK(instance_ == nullptr);
instance_ = new NullType(klass, descriptor, cache_id);
diff --git a/runtime/verifier/reg_type.h b/runtime/verifier/reg_type.h
index 3369784..56073db 100644
--- a/runtime/verifier/reg_type.h
+++ b/runtime/verifier/reg_type.h
@@ -21,12 +21,12 @@
#include <limits>
#include <set>
#include <string>
+#include <string_view>
#include "base/arena_object.h"
#include "base/bit_vector.h"
#include "base/locks.h"
#include "base/macros.h"
-#include "base/stringpiece.h"
#include "dex/primitive.h"
#include "gc_root.h"
#include "handle_scope.h"
@@ -185,7 +185,7 @@
bool IsJavaLangObjectArray() const
REQUIRES_SHARED(Locks::mutator_lock_);
bool IsInstantiableTypes() const REQUIRES_SHARED(Locks::mutator_lock_);
- const StringPiece& GetDescriptor() const {
+ const std::string_view& GetDescriptor() const {
DCHECK(HasClass() ||
(IsUnresolvedTypes() && !IsUnresolvedMergedReference() &&
!IsUnresolvedSuperClass()));
@@ -319,7 +319,7 @@
protected:
RegType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: descriptor_(descriptor),
klass_(klass),
@@ -336,7 +336,7 @@
virtual AssignmentType GetAssignmentTypeImpl() const = 0;
- const StringPiece descriptor_;
+ const std::string_view descriptor_;
mutable GcRoot<mirror::Class> klass_; // Non-const only due to moving classes.
const uint16_t cache_id_;
@@ -389,7 +389,7 @@
// Create the singleton instance.
static const ConflictType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -402,7 +402,7 @@
private:
ConflictType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: RegType(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -425,7 +425,7 @@
// Create the singleton instance.
static const UndefinedType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -438,7 +438,7 @@
private:
UndefinedType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: RegType(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -450,7 +450,7 @@
class PrimitiveType : public RegType {
public:
PrimitiveType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_);
bool HasClassVirtual() const override { return true; }
@@ -458,7 +458,8 @@
class Cat1Type : public PrimitiveType {
public:
- Cat1Type(ObjPtr<mirror::Class> klass, const StringPiece& descriptor,
+ Cat1Type(ObjPtr<mirror::Class> klass,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_);
};
@@ -467,7 +468,7 @@
bool IsInteger() const override { return true; }
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
static const IntegerType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const IntegerType* GetInstance() PURE;
@@ -479,7 +480,7 @@
private:
IntegerType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat1Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -492,7 +493,7 @@
bool IsBoolean() const override { return true; }
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
static const BooleanType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const BooleanType* GetInstance() PURE;
@@ -504,7 +505,7 @@
private:
BooleanType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat1Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -518,7 +519,7 @@
bool IsByte() const override { return true; }
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
static const ByteType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const ByteType* GetInstance() PURE;
@@ -530,7 +531,7 @@
private:
ByteType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat1Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -543,7 +544,7 @@
bool IsShort() const override { return true; }
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
static const ShortType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const ShortType* GetInstance() PURE;
@@ -554,7 +555,7 @@
}
private:
- ShortType(ObjPtr<mirror::Class> klass, const StringPiece& descriptor,
+ ShortType(ObjPtr<mirror::Class> klass, const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat1Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -567,7 +568,7 @@
bool IsChar() const override { return true; }
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
static const CharType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const CharType* GetInstance() PURE;
@@ -579,7 +580,7 @@
private:
CharType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat1Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -592,7 +593,7 @@
bool IsFloat() const override { return true; }
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
static const FloatType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const FloatType* GetInstance() PURE;
@@ -604,7 +605,7 @@
private:
FloatType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat1Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -615,7 +616,7 @@
class Cat2Type : public PrimitiveType {
public:
Cat2Type(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_);
};
@@ -625,7 +626,7 @@
bool IsLongLo() const override { return true; }
bool IsLong() const override { return true; }
static const LongLoType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const LongLoType* GetInstance() PURE;
@@ -637,7 +638,7 @@
private:
LongLoType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat2Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -650,7 +651,7 @@
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
bool IsLongHi() const override { return true; }
static const LongHiType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const LongHiType* GetInstance() PURE;
@@ -662,7 +663,7 @@
private:
LongHiType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat2Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -676,7 +677,7 @@
bool IsDoubleLo() const override { return true; }
bool IsDouble() const override { return true; }
static const DoubleLoType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const DoubleLoType* GetInstance() PURE;
@@ -688,7 +689,7 @@
private:
DoubleLoType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat2Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -701,7 +702,7 @@
std::string Dump() const override REQUIRES_SHARED(Locks::mutator_lock_);
bool IsDoubleHi() const override { return true; }
static const DoubleHiType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
static const DoubleHiType* GetInstance() PURE;
@@ -713,7 +714,7 @@
private:
DoubleHiType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: Cat2Type(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -886,7 +887,7 @@
// Create the singleton instance.
static const NullType* CreateInstance(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -905,7 +906,7 @@
}
private:
- NullType(ObjPtr<mirror::Class> klass, const StringPiece& descriptor, uint16_t cache_id)
+ NullType(ObjPtr<mirror::Class> klass, const std::string_view& descriptor, uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
: RegType(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -920,7 +921,7 @@
class UninitializedType : public RegType {
public:
UninitializedType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint32_t allocation_pc,
uint16_t cache_id)
: RegType(klass, descriptor, cache_id), allocation_pc_(allocation_pc) {}
@@ -945,7 +946,7 @@
class UninitializedReferenceType final : public UninitializedType {
public:
UninitializedReferenceType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint32_t allocation_pc,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
@@ -964,8 +965,9 @@
// constructor.
class UnresolvedUninitializedRefType final : public UninitializedType {
public:
- UnresolvedUninitializedRefType(const StringPiece& descriptor,
- uint32_t allocation_pc, uint16_t cache_id)
+ UnresolvedUninitializedRefType(const std::string_view& descriptor,
+ uint32_t allocation_pc,
+ uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
: UninitializedType(nullptr, descriptor, allocation_pc, cache_id) {
CheckConstructorInvariants(this);
@@ -986,7 +988,7 @@
class UninitializedThisReferenceType final : public UninitializedType {
public:
UninitializedThisReferenceType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
: UninitializedType(klass, descriptor, 0, cache_id) {
@@ -1005,8 +1007,7 @@
class UnresolvedUninitializedThisRefType final : public UninitializedType {
public:
- UnresolvedUninitializedThisRefType(const StringPiece& descriptor,
- uint16_t cache_id)
+ UnresolvedUninitializedThisRefType(const std::string_view& descriptor, uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
: UninitializedType(nullptr, descriptor, 0, cache_id) {
CheckConstructorInvariants(this);
@@ -1027,7 +1028,7 @@
class ReferenceType final : public RegType {
public:
ReferenceType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id) REQUIRES_SHARED(Locks::mutator_lock_)
: RegType(klass, descriptor, cache_id) {
CheckConstructorInvariants(this);
@@ -1052,7 +1053,7 @@
class PreciseReferenceType final : public RegType {
public:
PreciseReferenceType(ObjPtr<mirror::Class> klass,
- const StringPiece& descriptor,
+ const std::string_view& descriptor,
uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -1072,7 +1073,7 @@
// Common parent of unresolved types.
class UnresolvedType : public RegType {
public:
- UnresolvedType(const StringPiece& descriptor, uint16_t cache_id)
+ UnresolvedType(const std::string_view& descriptor, uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
: RegType(nullptr, descriptor, cache_id) {}
@@ -1088,7 +1089,7 @@
// of this type must be conservative.
class UnresolvedReferenceType final : public UnresolvedType {
public:
- UnresolvedReferenceType(const StringPiece& descriptor, uint16_t cache_id)
+ UnresolvedReferenceType(const std::string_view& descriptor, uint16_t cache_id)
REQUIRES_SHARED(Locks::mutator_lock_)
: UnresolvedType(descriptor, cache_id) {
CheckConstructorInvariants(this);
diff --git a/runtime/verifier/reg_type_cache.cc b/runtime/verifier/reg_type_cache.cc
index ceba748..7bff255 100644
--- a/runtime/verifier/reg_type_cache.cc
+++ b/runtime/verifier/reg_type_cache.cc
@@ -135,7 +135,7 @@
}
}
-bool RegTypeCache::MatchDescriptor(size_t idx, const StringPiece& descriptor, bool precise) {
+bool RegTypeCache::MatchDescriptor(size_t idx, const std::string_view& descriptor, bool precise) {
const RegType* entry = entries_[idx];
if (descriptor != entry->descriptor_) {
return false;
@@ -170,20 +170,20 @@
return klass;
}
-StringPiece RegTypeCache::AddString(const StringPiece& string_piece) {
- char* ptr = allocator_.AllocArray<char>(string_piece.length());
- memcpy(ptr, string_piece.data(), string_piece.length());
- return StringPiece(ptr, string_piece.length());
+std::string_view RegTypeCache::AddString(const std::string_view& str) {
+ char* ptr = allocator_.AllocArray<char>(str.length());
+ memcpy(ptr, str.data(), str.length());
+ return std::string_view(ptr, str.length());
}
const RegType& RegTypeCache::From(ObjPtr<mirror::ClassLoader> loader,
const char* descriptor,
bool precise) {
- StringPiece sp_descriptor(descriptor);
- // Try looking up the class in the cache first. We use a StringPiece to avoid continual strlen
- // operations on the descriptor.
+ std::string_view sv_descriptor(descriptor);
+ // Try looking up the class in the cache first. We use a std::string_view to avoid
+ // repeated strlen operations on the descriptor.
for (size_t i = primitive_count_; i < entries_.size(); i++) {
- if (MatchDescriptor(i, sp_descriptor, precise)) {
+ if (MatchDescriptor(i, sv_descriptor, precise)) {
return *(entries_[i]);
}
}
@@ -205,9 +205,9 @@
DCHECK(!(klass->IsAbstract()) || klass->IsArrayClass());
DCHECK(!klass->IsInterface());
entry =
- new (&allocator_) PreciseReferenceType(klass, AddString(sp_descriptor), entries_.size());
+ new (&allocator_) PreciseReferenceType(klass, AddString(sv_descriptor), entries_.size());
} else {
- entry = new (&allocator_) ReferenceType(klass, AddString(sp_descriptor), entries_.size());
+ entry = new (&allocator_) ReferenceType(klass, AddString(sv_descriptor), entries_.size());
}
return AddEntry(entry);
} else { // Class not resolved.
@@ -221,7 +221,7 @@
}
if (IsValidDescriptor(descriptor)) {
return AddEntry(
- new (&allocator_) UnresolvedReferenceType(AddString(sp_descriptor), entries_.size()));
+ new (&allocator_) UnresolvedReferenceType(AddString(sv_descriptor), entries_.size()));
} else {
// The descriptor is broken return the unknown type as there's nothing sensible that
// could be done at runtime
@@ -254,7 +254,7 @@
return nullptr;
}
-const RegType* RegTypeCache::InsertClass(const StringPiece& descriptor,
+const RegType* RegTypeCache::InsertClass(const std::string_view& descriptor,
ObjPtr<mirror::Class> klass,
bool precise) {
// No reference to the class was found, create new reference.
@@ -272,7 +272,7 @@
DCHECK(klass != nullptr);
const RegType* reg_type = FindClass(klass, precise);
if (reg_type == nullptr) {
- reg_type = InsertClass(AddString(StringPiece(descriptor)), klass, precise);
+ reg_type = InsertClass(AddString(std::string_view(descriptor)), klass, precise);
}
return *reg_type;
}
@@ -488,7 +488,7 @@
const UninitializedType& RegTypeCache::Uninitialized(const RegType& type, uint32_t allocation_pc) {
UninitializedType* entry = nullptr;
- const StringPiece& descriptor(type.GetDescriptor());
+ const std::string_view& descriptor(type.GetDescriptor());
if (type.IsUnresolvedTypes()) {
for (size_t i = primitive_count_; i < entries_.size(); i++) {
const RegType* cur_entry = entries_[i];
@@ -525,7 +525,7 @@
RegType* entry;
if (uninit_type.IsUnresolvedTypes()) {
- const StringPiece& descriptor(uninit_type.GetDescriptor());
+ const std::string_view& descriptor(uninit_type.GetDescriptor());
for (size_t i = primitive_count_; i < entries_.size(); i++) {
const RegType* cur_entry = entries_[i];
if (cur_entry->IsUnresolvedReference() &&
@@ -575,7 +575,7 @@
const UninitializedType& RegTypeCache::UninitializedThisArgument(const RegType& type) {
UninitializedType* entry;
- const StringPiece& descriptor(type.GetDescriptor());
+ const std::string_view& descriptor(type.GetDescriptor());
if (type.IsUnresolvedTypes()) {
for (size_t i = primitive_count_; i < entries_.size(); i++) {
const RegType* cur_entry = entries_[i];
@@ -656,7 +656,7 @@
return Conflict();
} else if (array.IsUnresolvedTypes()) {
DCHECK(!array.IsUnresolvedMergedReference()); // Caller must make sure not to ask for this.
- const std::string descriptor(array.GetDescriptor().as_string());
+ const std::string descriptor(array.GetDescriptor());
return FromDescriptor(loader, descriptor.c_str() + 1, false);
} else {
ObjPtr<mirror::Class> klass = array.GetClass()->GetComponentType();
diff --git a/runtime/verifier/reg_type_cache.h b/runtime/verifier/reg_type_cache.h
index d668222..a9a8116 100644
--- a/runtime/verifier/reg_type_cache.h
+++ b/runtime/verifier/reg_type_cache.h
@@ -18,6 +18,7 @@
#define ART_RUNTIME_VERIFIER_REG_TYPE_CACHE_H_
#include <stdint.h>
+#include <string_view>
#include <vector>
#include "base/casts.h"
@@ -32,7 +33,6 @@
class ClassLoader;
} // namespace mirror
class ScopedArenaAllocator;
-class StringPiece;
namespace verifier {
@@ -80,7 +80,7 @@
const RegType* FindClass(ObjPtr<mirror::Class> klass, bool precise) const
REQUIRES_SHARED(Locks::mutator_lock_);
// Insert a new class with a specified descriptor, must not already be in the cache.
- const RegType* InsertClass(const StringPiece& descriptor,
+ const RegType* InsertClass(const std::string_view& descriptor,
ObjPtr<mirror::Class> klass,
bool precise)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -164,7 +164,7 @@
void FillPrimitiveAndSmallConstantTypes() REQUIRES_SHARED(Locks::mutator_lock_);
ObjPtr<mirror::Class> ResolveClass(const char* descriptor, ObjPtr<mirror::ClassLoader> loader)
REQUIRES_SHARED(Locks::mutator_lock_);
- bool MatchDescriptor(size_t idx, const StringPiece& descriptor, bool precise)
+ bool MatchDescriptor(size_t idx, const std::string_view& descriptor, bool precise)
REQUIRES_SHARED(Locks::mutator_lock_);
const ConstantType& FromCat1NonSmallConstant(int32_t value, bool precise)
REQUIRES_SHARED(Locks::mutator_lock_);
@@ -173,9 +173,9 @@
template <class RegTypeType>
RegTypeType& AddEntry(RegTypeType* new_entry) REQUIRES_SHARED(Locks::mutator_lock_);
- // Add a string piece to the arena allocator so that it stays live for the lifetime of the
- // verifier.
- StringPiece AddString(const StringPiece& string_piece);
+ // Add a string to the arena allocator so that it stays live for the lifetime of the
+ // verifier and return a string view.
+ std::string_view AddString(const std::string_view& str);
static void CreatePrimitiveAndSmallConstantTypes() REQUIRES_SHARED(Locks::mutator_lock_);