[vm,modular_aot] Dynamic calls
TEST=ci Issue: https://github.com/dart-lang/sdk/issues/61635 Change-Id: I13eaccbefae4917500ee3aeb6a09d71f480a4c94 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/485560 Reviewed-by: Slava Egorov <vegorov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
8a6955a272
commit
fd18bbb4a3
@@ -99,6 +99,7 @@ class ModuleSnapshot : public AllStatic {
|
||||
kNewObjectTags,
|
||||
kStaticFieldOffset,
|
||||
kInterfaceCall,
|
||||
kDynamicCall,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1183,7 +1184,8 @@ class ObjectPoolDeserializationCluster : public DeserializationCluster {
|
||||
Smi::Value(field->untag()->host_offset_or_field_id()));
|
||||
break;
|
||||
}
|
||||
case ModuleSnapshot::kInterfaceCall: {
|
||||
case ModuleSnapshot::kInterfaceCall:
|
||||
case ModuleSnapshot::kDynamicCall: {
|
||||
pool->untag()->entry_bits()[j] = tagged_entry_bits;
|
||||
UntaggedObjectPool::Entry& entry = pool->untag()->data()[j];
|
||||
entry.raw_obj_ = d.ReadRef();
|
||||
|
||||
+24
-6
@@ -14611,12 +14611,30 @@ void Library::CopyPragmas(const Library& old_lib) {
|
||||
#endif // !defined(DART_PRECOMPILED_RUNTIME)
|
||||
|
||||
static bool ShouldBePrivate(const String& name) {
|
||||
return (name.Length() >= 1 && name.CharAt(0) == '_') ||
|
||||
(name.Length() >= 5 &&
|
||||
(name.CharAt(4) == '_' &&
|
||||
(name.CharAt(0) == 'g' || name.CharAt(0) == 's') &&
|
||||
name.CharAt(1) == 'e' && name.CharAt(2) == 't' &&
|
||||
name.CharAt(3) == ':'));
|
||||
// _foo
|
||||
if (name.Length() >= 1 && name.CharAt(0) == '_') {
|
||||
return true;
|
||||
}
|
||||
// get:_foo, set:_foo or dyn:_foo
|
||||
if (name.Length() >= 5 && name.CharAt(3) == ':' && name.CharAt(4) == '_') {
|
||||
if ((name.CharAt(0) == 'g' || name.CharAt(0) == 's') &&
|
||||
name.CharAt(1) == 'e' && name.CharAt(2) == 't') {
|
||||
return true;
|
||||
}
|
||||
if (name.CharAt(0) == 'd' && name.CharAt(1) == 'y' &&
|
||||
name.CharAt(2) == 'n') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// dyn:get:_foo, dyn:set:_foo
|
||||
if (name.Length() >= 9 && name.CharAt(0) == 'd' && name.CharAt(1) == 'y' &&
|
||||
name.CharAt(2) == 'n' && name.CharAt(3) == ':' &&
|
||||
(name.CharAt(4) == 'g' || name.CharAt(4) == 's') &&
|
||||
name.CharAt(5) == 'e' && name.CharAt(6) == 't' && name.CharAt(7) == ':' &&
|
||||
name.CharAt(8) == '_') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Library::RehashDictionary(const Array& old_dict,
|
||||
|
||||
Reference in New Issue
Block a user