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

Unified Diff: runtime/vm/kernel_reader.cc

Issue 2973943002: [kernel] Allow reflection on some fields; add metadata on fields too. (Closed)
Patch Set: Created 3 years, 5 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 | « no previous file | tests/co19/co19-kernel.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_reader.cc
diff --git a/runtime/vm/kernel_reader.cc b/runtime/vm/kernel_reader.cc
index dbf4eabe1783168d0263ec0f6d0ee6934642d64c..104a563e96cfd580889b7012e9f90e586f185bcd 100644
--- a/runtime/vm/kernel_reader.cc
+++ b/runtime/vm/kernel_reader.cc
@@ -283,6 +283,9 @@ void KernelReader::ReadLibrary(intptr_t kernel_offset) {
field.set_has_initializer(builder_.PeekTag() == kSomething);
GenerateFieldAccessors(toplevel_class, field, &field_helper, field_offset);
field_helper.ReadUntilExcluding(FieldHelper::kEnd);
+ if (FLAG_enable_mirrors) {
+ library.AddFieldMetadata(field, TokenPosition::kNoSource, field_offset);
+ }
fields_.Add(&field);
library.AddObject(field, name);
}
@@ -445,6 +448,10 @@ dart::Class& KernelReader::ReadClass(const dart::Library& library,
field_helper.SetJustRead(FieldHelper::kType);
const Object& script_class =
ClassForScriptAt(klass, field_helper.source_uri_index_);
+
+ const bool is_reflectable =
+ field_helper.position_.IsReal() &&
+ !(library.is_dart_scheme() && library.IsPrivate(name));
dart::Field& field = dart::Field::Handle(
Z,
dart::Field::New(name, field_helper.IsStatic(),
@@ -452,14 +459,16 @@ dart::Class& KernelReader::ReadClass(const dart::Library& library,
// whereas in Kernel they are not final because they
// are not explicitly declared that way.
field_helper.IsFinal() || field_helper.IsConst(),
- field_helper.IsConst(),
- false, // is_reflectable
- script_class, type, field_helper.position_));
+ field_helper.IsConst(), is_reflectable, script_class,
+ type, field_helper.position_));
field.set_kernel_offset(field_offset);
field_helper.ReadUntilExcluding(FieldHelper::kInitializer);
field.set_has_initializer(builder_.PeekTag() == kSomething);
GenerateFieldAccessors(klass, field, &field_helper, field_offset);
field_helper.ReadUntilExcluding(FieldHelper::kEnd);
+ if (FLAG_enable_mirrors) {
+ library.AddFieldMetadata(field, TokenPosition::kNoSource, field_offset);
+ }
fields_.Add(&field);
}
klass.AddFields(fields_);
« no previous file with comments | « no previous file | tests/co19/co19-kernel.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698