Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1209)

Unified Diff: runtime/vm/kernel_to_il.cc

Issue 2860823002: Introduce classes for string and name indexes (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/kernel_to_il.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_to_il.cc
diff --git a/runtime/vm/kernel_to_il.cc b/runtime/vm/kernel_to_il.cc
index 392ada66538ef3ff4e65c38f6bd6c3df4bb76ebe..2edca96cab454731b579d82feae59355ff90cc16 100644
--- a/runtime/vm/kernel_to_il.cc
+++ b/runtime/vm/kernel_to_il.cc
@@ -1067,23 +1067,25 @@ void TranslationHelper::SetCanonicalNames(const TypedData& canonical_names) {
}
-intptr_t TranslationHelper::StringOffset(intptr_t string_index) const {
- return string_offsets_.GetUint32(string_index << 2);
+intptr_t TranslationHelper::StringOffset(StringIndex index) const {
+ return string_offsets_.GetUint32(index << 2);
}
-intptr_t TranslationHelper::StringSize(intptr_t string_index) const {
- return StringOffset(string_index + 1) - StringOffset(string_index);
+intptr_t TranslationHelper::StringSize(StringIndex index) const {
+ return StringOffset(StringIndex(index + 1)) - StringOffset(index);
}
-uint8_t TranslationHelper::CharacterAt(intptr_t string_index, intptr_t index) {
+uint8_t TranslationHelper::CharacterAt(StringIndex string_index,
+ intptr_t index) {
ASSERT(index < StringSize(string_index));
return string_data_.GetUint8(StringOffset(string_index) + index);
}
-bool TranslationHelper::StringEquals(intptr_t string_index, const char* other) {
+bool TranslationHelper::StringEquals(StringIndex string_index,
+ const char* other) {
NoSafepointScope no_safepoint;
intptr_t length = strlen(other);
return (length == StringSize(string_index)) &&
@@ -1092,45 +1094,46 @@ bool TranslationHelper::StringEquals(intptr_t string_index, const char* other) {
}
-intptr_t TranslationHelper::CanonicalNameParent(intptr_t name) {
+NameIndex TranslationHelper::CanonicalNameParent(NameIndex name) {
// Canonical names are pairs of 4-byte parent and string indexes, so the size
// of an entry is 8 bytes. The parent is biased: 0 represents the root name
// and N+1 represents the name with index N.
- return static_cast<intptr_t>(canonical_names_.GetUint32(8 * name)) - 1;
+ return NameIndex(static_cast<intptr_t>(canonical_names_.GetUint32(8 * name)) -
+ 1);
}
-intptr_t TranslationHelper::CanonicalNameString(intptr_t name) {
- return canonical_names_.GetUint32((8 * name) + 4);
+StringIndex TranslationHelper::CanonicalNameString(NameIndex name) {
+ return StringIndex(canonical_names_.GetUint32((8 * name) + 4));
}
-bool TranslationHelper::IsAdministrative(intptr_t name) {
+bool TranslationHelper::IsAdministrative(NameIndex name) {
// Administrative names start with '@'.
- intptr_t name_string = CanonicalNameString(name);
+ StringIndex name_string = CanonicalNameString(name);
return (StringSize(name_string) > 0) && (CharacterAt(name_string, 0) == '@');
}
-bool TranslationHelper::IsPrivate(intptr_t name) {
+bool TranslationHelper::IsPrivate(NameIndex name) {
// Private names start with '_'.
- intptr_t name_string = CanonicalNameString(name);
+ StringIndex name_string = CanonicalNameString(name);
return (StringSize(name_string) > 0) && (CharacterAt(name_string, 0) == '_');
}
-bool TranslationHelper::IsRoot(intptr_t name) {
+bool TranslationHelper::IsRoot(NameIndex name) {
return name == -1;
}
-bool TranslationHelper::IsLibrary(intptr_t name) {
+bool TranslationHelper::IsLibrary(NameIndex name) {
// Libraries are the only canonical names with the root as their parent.
return !IsRoot(name) && IsRoot(CanonicalNameParent(name));
}
-bool TranslationHelper::IsClass(intptr_t name) {
+bool TranslationHelper::IsClass(NameIndex name) {
// Classes have the library as their parent and are not an administrative
// name starting with @.
return !IsAdministrative(name) && !IsRoot(name) &&
@@ -1138,19 +1141,19 @@ bool TranslationHelper::IsClass(intptr_t name) {
}
-bool TranslationHelper::IsMember(intptr_t name) {
+bool TranslationHelper::IsMember(NameIndex name) {
return IsConstructor(name) || IsField(name) || IsProcedure(name);
}
-bool TranslationHelper::IsField(intptr_t name) {
+bool TranslationHelper::IsField(NameIndex name) {
// Fields with private names have the import URI of the library where they are
// visible as the parent and the string "@fields" as the parent's parent.
// Fields with non-private names have the string "@fields' as the parent.
if (IsRoot(name)) {
return false;
}
- intptr_t kind = CanonicalNameParent(name);
+ NameIndex kind = CanonicalNameParent(name);
if (IsPrivate(name)) {
kind = CanonicalNameParent(kind);
}
@@ -1158,7 +1161,7 @@ bool TranslationHelper::IsField(intptr_t name) {
}
-bool TranslationHelper::IsConstructor(intptr_t name) {
+bool TranslationHelper::IsConstructor(NameIndex name) {
// Constructors with private names have the import URI of the library where
// they are visible as the parent and the string "@constructors" as the
// parent's parent. Constructors with non-private names have the string
@@ -1166,7 +1169,7 @@ bool TranslationHelper::IsConstructor(intptr_t name) {
if (IsRoot(name)) {
return false;
}
- intptr_t kind = CanonicalNameParent(name);
+ NameIndex kind = CanonicalNameParent(name);
if (IsPrivate(name)) {
kind = CanonicalNameParent(kind);
}
@@ -1174,19 +1177,19 @@ bool TranslationHelper::IsConstructor(intptr_t name) {
}
-bool TranslationHelper::IsProcedure(intptr_t name) {
+bool TranslationHelper::IsProcedure(NameIndex name) {
return IsMethod(name) || IsGetter(name) || IsSetter(name) || IsFactory(name);
}
-bool TranslationHelper::IsMethod(intptr_t name) {
+bool TranslationHelper::IsMethod(NameIndex name) {
// Methods with private names have the import URI of the library where they
// are visible as the parent and the string "@methods" as the parent's parent.
// Methods with non-private names have the string "@methods" as the parent.
if (IsRoot(name)) {
return false;
}
- intptr_t kind = CanonicalNameParent(name);
+ NameIndex kind = CanonicalNameParent(name);
if (IsPrivate(name)) {
kind = CanonicalNameParent(kind);
}
@@ -1194,14 +1197,14 @@ bool TranslationHelper::IsMethod(intptr_t name) {
}
-bool TranslationHelper::IsGetter(intptr_t name) {
+bool TranslationHelper::IsGetter(NameIndex name) {
// Getters with private names have the import URI of the library where they
// are visible as the parent and the string "@getters" as the parent's parent.
// Getters with non-private names have the string "@getters" as the parent.
if (IsRoot(name)) {
return false;
}
- intptr_t kind = CanonicalNameParent(name);
+ NameIndex kind = CanonicalNameParent(name);
if (IsPrivate(name)) {
kind = CanonicalNameParent(kind);
}
@@ -1209,14 +1212,14 @@ bool TranslationHelper::IsGetter(intptr_t name) {
}
-bool TranslationHelper::IsSetter(intptr_t name) {
+bool TranslationHelper::IsSetter(NameIndex name) {
// Setters with private names have the import URI of the library where they
// are visible as the parent and the string "@setters" as the parent's parent.
// Setters with non-private names have the string "@setters" as the parent.
if (IsRoot(name)) {
return false;
}
- intptr_t kind = CanonicalNameParent(name);
+ NameIndex kind = CanonicalNameParent(name);
if (IsPrivate(name)) {
kind = CanonicalNameParent(kind);
}
@@ -1224,7 +1227,7 @@ bool TranslationHelper::IsSetter(intptr_t name) {
}
-bool TranslationHelper::IsFactory(intptr_t name) {
+bool TranslationHelper::IsFactory(NameIndex name) {
// Factories with private names have the import URI of the library where they
// are visible as the parent and the string "@factories" as the parent's
// parent. Factories with non-private names have the string "@factories" as
@@ -1232,7 +1235,7 @@ bool TranslationHelper::IsFactory(intptr_t name) {
if (IsRoot(name)) {
return false;
}
- intptr_t kind = CanonicalNameParent(name);
+ NameIndex kind = CanonicalNameParent(name);
if (IsPrivate(name)) {
kind = CanonicalNameParent(kind);
}
@@ -1240,9 +1243,9 @@ bool TranslationHelper::IsFactory(intptr_t name) {
}
-intptr_t TranslationHelper::EnclosingName(intptr_t name) {
+NameIndex TranslationHelper::EnclosingName(NameIndex name) {
ASSERT(IsField(name) || IsConstructor(name) || IsProcedure(name));
- intptr_t enclosing = CanonicalNameParent(CanonicalNameParent(name));
+ NameIndex enclosing = CanonicalNameParent(CanonicalNameParent(name));
if (IsPrivate(name)) {
enclosing = CanonicalNameParent(enclosing);
}
@@ -1269,7 +1272,7 @@ const dart::String& TranslationHelper::DartString(const char* content,
}
-dart::String& TranslationHelper::DartString(intptr_t string_index,
+dart::String& TranslationHelper::DartString(StringIndex string_index,
Heap::Space space) {
intptr_t length = StringSize(string_index);
uint8_t* buffer = Z->Alloc<uint8_t>(length);
@@ -1295,7 +1298,7 @@ const dart::String& TranslationHelper::DartSymbol(const char* content) const {
}
-dart::String& TranslationHelper::DartSymbol(intptr_t string_index) const {
+dart::String& TranslationHelper::DartSymbol(StringIndex string_index) const {
intptr_t length = StringSize(string_index);
uint8_t* buffer = Z->Alloc<uint8_t>(length);
{
@@ -1312,7 +1315,7 @@ dart::String& TranslationHelper::DartSymbol(const uint8_t* utf8_array,
Symbols::FromUTF8(thread_, utf8_array, len));
}
-const dart::String& TranslationHelper::DartClassName(intptr_t kernel_class) {
+const dart::String& TranslationHelper::DartClassName(NameIndex kernel_class) {
ASSERT(IsClass(kernel_class));
dart::String& name = DartString(CanonicalNameString(kernel_class));
return ManglePrivateName(CanonicalNameParent(kernel_class), &name);
@@ -1320,13 +1323,13 @@ const dart::String& TranslationHelper::DartClassName(intptr_t kernel_class) {
const dart::String& TranslationHelper::DartConstructorName(
- intptr_t constructor) {
+ NameIndex constructor) {
ASSERT(IsConstructor(constructor));
return DartFactoryName(constructor);
}
-const dart::String& TranslationHelper::DartProcedureName(intptr_t procedure) {
+const dart::String& TranslationHelper::DartProcedureName(NameIndex procedure) {
ASSERT(IsProcedure(procedure));
if (IsSetter(procedure)) {
return DartSetterName(procedure);
@@ -1340,7 +1343,7 @@ const dart::String& TranslationHelper::DartProcedureName(intptr_t procedure) {
}
-const dart::String& TranslationHelper::DartSetterName(intptr_t setter) {
+const dart::String& TranslationHelper::DartSetterName(NameIndex setter) {
return DartSetterName(CanonicalNameParent(setter),
CanonicalNameString(setter));
}
@@ -1351,8 +1354,8 @@ const dart::String& TranslationHelper::DartSetterName(Name* setter_name) {
}
-const dart::String& TranslationHelper::DartSetterName(intptr_t parent,
- intptr_t setter) {
+const dart::String& TranslationHelper::DartSetterName(NameIndex parent,
+ StringIndex setter) {
// The names flowing into [setter] are coming from the Kernel file:
// * user-defined setters: `fieldname=`
// * property-set expressions: `fieldname`
@@ -1379,7 +1382,7 @@ const dart::String& TranslationHelper::DartSetterName(intptr_t parent,
}
-const dart::String& TranslationHelper::DartGetterName(intptr_t getter) {
+const dart::String& TranslationHelper::DartGetterName(NameIndex getter) {
return DartGetterName(CanonicalNameParent(getter),
CanonicalNameString(getter));
}
@@ -1390,8 +1393,8 @@ const dart::String& TranslationHelper::DartGetterName(Name* getter_name) {
}
-const dart::String& TranslationHelper::DartGetterName(intptr_t parent,
- intptr_t getter) {
+const dart::String& TranslationHelper::DartGetterName(NameIndex parent,
+ StringIndex getter) {
dart::String& name = DartString(getter);
ManglePrivateName(parent, &name, false);
name = dart::Field::GetterSymbol(name);
@@ -1414,7 +1417,7 @@ const dart::String& TranslationHelper::DartInitializerName(Name* kernel_name) {
}
-const dart::String& TranslationHelper::DartMethodName(intptr_t method) {
+const dart::String& TranslationHelper::DartMethodName(NameIndex method) {
return DartMethodName(CanonicalNameParent(method),
CanonicalNameString(method));
}
@@ -1425,14 +1428,14 @@ const dart::String& TranslationHelper::DartMethodName(Name* method_name) {
}
-const dart::String& TranslationHelper::DartMethodName(intptr_t parent,
- intptr_t method) {
+const dart::String& TranslationHelper::DartMethodName(NameIndex parent,
+ StringIndex method) {
dart::String& name = DartString(method);
return ManglePrivateName(parent, &name);
}
-const dart::String& TranslationHelper::DartFactoryName(intptr_t factory) {
+const dart::String& TranslationHelper::DartFactoryName(NameIndex factory) {
ASSERT(IsConstructor(factory) || IsFactory(factory));
GrowableHandlePtrArray<const dart::String> pieces(Z, 3);
pieces.Add(DartClassName(EnclosingName(factory)));
@@ -1444,7 +1447,7 @@ const dart::String& TranslationHelper::DartFactoryName(intptr_t factory) {
RawLibrary* TranslationHelper::LookupLibraryByKernelLibrary(
- intptr_t kernel_library) {
+ NameIndex kernel_library) {
// We only use the string and don't rely on having any particular parent.
// This ASSERT is just a sanity check.
ASSERT(IsLibrary(kernel_library) ||
@@ -1458,10 +1461,10 @@ RawLibrary* TranslationHelper::LookupLibraryByKernelLibrary(
}
-RawClass* TranslationHelper::LookupClassByKernelClass(intptr_t kernel_class) {
+RawClass* TranslationHelper::LookupClassByKernelClass(NameIndex kernel_class) {
ASSERT(IsClass(kernel_class));
const dart::String& class_name = DartClassName(kernel_class);
- intptr_t kernel_library = CanonicalNameParent(kernel_class);
+ NameIndex kernel_library = CanonicalNameParent(kernel_class);
dart::Library& library =
dart::Library::Handle(Z, LookupLibraryByKernelLibrary(kernel_library));
RawClass* klass = library.LookupClassAllowPrivate(class_name);
@@ -1471,9 +1474,9 @@ RawClass* TranslationHelper::LookupClassByKernelClass(intptr_t kernel_class) {
}
-RawField* TranslationHelper::LookupFieldByKernelField(intptr_t kernel_field) {
+RawField* TranslationHelper::LookupFieldByKernelField(NameIndex kernel_field) {
ASSERT(IsField(kernel_field));
- intptr_t enclosing = EnclosingName(kernel_field);
+ NameIndex enclosing = EnclosingName(kernel_field);
dart::Class& klass = dart::Class::Handle(Z);
if (IsLibrary(enclosing)) {
@@ -1492,12 +1495,12 @@ RawField* TranslationHelper::LookupFieldByKernelField(intptr_t kernel_field) {
RawFunction* TranslationHelper::LookupStaticMethodByKernelProcedure(
- intptr_t procedure) {
+ NameIndex procedure) {
const dart::String& procedure_name = DartProcedureName(procedure);
// The parent is either a library or a class (in which case the procedure is a
// static method).
- intptr_t enclosing = EnclosingName(procedure);
+ NameIndex enclosing = EnclosingName(procedure);
if (IsLibrary(enclosing)) {
dart::Library& library =
dart::Library::Handle(Z, LookupLibraryByKernelLibrary(enclosing));
@@ -1524,7 +1527,7 @@ RawFunction* TranslationHelper::LookupStaticMethodByKernelProcedure(
RawFunction* TranslationHelper::LookupConstructorByKernelConstructor(
- intptr_t constructor) {
+ NameIndex constructor) {
ASSERT(IsConstructor(constructor));
dart::Class& klass = dart::Class::Handle(
Z, LookupClassByKernelClass(EnclosingName(constructor)));
@@ -1534,7 +1537,7 @@ RawFunction* TranslationHelper::LookupConstructorByKernelConstructor(
RawFunction* TranslationHelper::LookupConstructorByKernelConstructor(
const dart::Class& owner,
- intptr_t constructor) {
+ NameIndex constructor) {
ASSERT(IsConstructor(constructor));
RawFunction* function =
owner.LookupConstructorAllowPrivate(DartConstructorName(constructor));
@@ -1588,7 +1591,7 @@ void TranslationHelper::ReportError(const Error& prev_error,
}
-dart::String& TranslationHelper::ManglePrivateName(intptr_t parent,
+dart::String& TranslationHelper::ManglePrivateName(NameIndex parent,
dart::String* name_to_modify,
bool symbolize) {
if (name_to_modify->Length() >= 1 && name_to_modify->CharAt(0) == '_') {
@@ -1961,7 +1964,7 @@ void ConstantEvaluator::VisitMethodInvocation(MethodInvocation* node) {
void ConstantEvaluator::VisitStaticGet(StaticGet* node) {
- intptr_t target = node->target();
+ NameIndex target = node->target();
if (H.IsField(target)) {
const dart::Field& field =
dart::Field::Handle(Z, H.LookupFieldByKernelField(target));
@@ -2092,7 +2095,7 @@ void ConstantEvaluator::VisitNot(Not* node) {
void ConstantEvaluator::VisitPropertyGet(PropertyGet* node) {
- intptr_t string_index = node->name()->string_index();
+ StringIndex string_index = node->name()->string_index();
if (H.StringEquals(string_index, "length")) {
node->receiver()->AcceptExpressionVisitor(this);
if (result_.IsString()) {
@@ -3140,9 +3143,9 @@ Fragment FlowGraphBuilder::ThrowNoSuchMethodError() {
RawFunction* FlowGraphBuilder::LookupMethodByMember(
- intptr_t target,
+ NameIndex target,
const dart::String& method_name) {
- intptr_t kernel_class = H.EnclosingName(target);
+ NameIndex kernel_class = H.EnclosingName(target);
dart::Class& klass =
dart::Class::Handle(Z, H.LookupClassByKernelClass(kernel_class));
@@ -4413,7 +4416,7 @@ JoinEntryInstr* FlowGraphBuilder::BuildJoinEntry() {
}
-Fragment FlowGraphBuilder::TranslateFieldInitializer(intptr_t canonical_name,
+Fragment FlowGraphBuilder::TranslateFieldInitializer(NameIndex canonical_name,
Expression* init) {
dart::Field& field =
dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(canonical_name));
@@ -4989,7 +4992,7 @@ void FlowGraphBuilder::VisitStaticGet(StaticGet* node) {
void FlowGraphBuilder::VisitStaticSet(StaticSet* node) {
- intptr_t target = node->target();
+ NameIndex target = node->target();
if (H.IsField(target)) {
const dart::Field& field =
dart::Field::ZoneHandle(Z, H.LookupFieldByKernelField(target));
@@ -5051,7 +5054,7 @@ void FlowGraphBuilder::VisitPropertySet(PropertySet* node) {
void FlowGraphBuilder::VisitDirectPropertyGet(DirectPropertyGet* node) {
Function& target = Function::ZoneHandle(Z);
- intptr_t kernel_name = node->target();
+ NameIndex kernel_name = node->target();
if (H.IsProcedure(kernel_name)) {
if (H.IsGetter(kernel_name)) {
target = LookupMethodByMember(kernel_name, H.DartGetterName(kernel_name));
« no previous file with comments | « runtime/vm/kernel_to_il.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698