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

Unified Diff: runtime/vm/kernel_to_il.cc

Issue 2485993002: VM: Support bootstrapping core libraries from Kernel binaries instead of source. (Closed)
Patch Set: Done Created 4 years, 1 month 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
Index: runtime/vm/kernel_to_il.cc
diff --git a/runtime/vm/kernel_to_il.cc b/runtime/vm/kernel_to_il.cc
index 38900f10b9a2efb5a1c96073f314a77ec985e258..0a1a9a556807427ba53a2ca3e1d3e146cfe1169a 100644
--- a/runtime/vm/kernel_to_il.cc
+++ b/runtime/vm/kernel_to_il.cc
@@ -599,6 +599,16 @@ void ScopeBuilder::VisitFunctionNode(FunctionNode* node) {
for (intptr_t i = 0; i < type_parameters.length(); ++i) {
VisitTypeParameter(type_parameters[i]);
}
+
+ if (node->async_marker() == FunctionNode::kSyncYielding) {
+ LocalScope* scope = parsed_function_->node_sequence()->scope();
+ for (intptr_t i = 0;
+ i < parsed_function_->function().NumOptionalPositionalParameters();
+ i++) {
+ scope->VariableAt(i)->set_is_forced_stack();
+ }
+ }
+
// Do not visit the positional and named parameters, because they've
// already been added to the scope.
if (node->body() != NULL) {
@@ -1056,6 +1066,21 @@ dart::RawClass* TranslationHelper::LookupClassByKernelClass(
}
+dart::RawUnresolvedClass* TranslationHelper::ToUnresolvedClass(
+ Class* kernel_klass) {
+ dart::RawClass* klass = NULL;
+
+ const dart::String& class_name = DartClassName(kernel_klass);
+ Library* kernel_library = Library::Cast(kernel_klass->parent());
+ dart::Library& library =
+ dart::Library::Handle(Z, LookupLibraryByKernelLibrary(kernel_library));
+
+ ASSERT(klass != Object::null());
+ return dart::UnresolvedClass::New(library, class_name,
+ TokenPosition::kNoSource);
+}
+
+
dart::RawField* TranslationHelper::LookupFieldByKernelField(
Field* kernel_field) {
TreeNode* node = kernel_field->parent();
@@ -1753,12 +1778,15 @@ const Object& ConstantEvaluator::RunFunction(const Function& function,
FlowGraphBuilder::FlowGraphBuilder(
- TreeNode* node, ParsedFunction* parsed_function,
+ TreeNode* node,
+ ParsedFunction* parsed_function,
const ZoneGrowableArray<const ICData*>& ic_data_array,
- InlineExitCollector* exit_collector, intptr_t osr_id,
+ InlineExitCollector* exit_collector,
+ intptr_t osr_id,
intptr_t first_block_id)
: zone_(Thread::Current()->zone()),
- translation_helper_(Thread::Current(), zone_,
+ translation_helper_(Thread::Current(),
+ zone_,
Thread::Current()->isolate()),
node_(node),
parsed_function_(parsed_function),
@@ -1782,8 +1810,12 @@ FlowGraphBuilder::FlowGraphBuilder(
try_catch_block_(NULL),
next_used_try_index_(0),
catch_block_(NULL),
- type_translator_(&translation_helper_, &active_class_),
- constant_evaluator_(this, zone_, &translation_helper_,
+ type_translator_(&translation_helper_,
+ &active_class_,
+ /* finalize= */ true),
+ constant_evaluator_(this,
+ zone_,
+ &translation_helper_,
&type_translator_) {}
@@ -3796,10 +3828,8 @@ AbstractType& DartTypeTranslator::TranslateTypeWithoutFinalization(
DartType* node) {
bool saved_finalize = finalize_;
finalize_ = false;
- H.SetFinalize(false);
AbstractType& result = TranslateType(node);
finalize_ = saved_finalize;
- H.SetFinalize(saved_finalize);
return result;
}
@@ -3937,13 +3967,20 @@ void DartTypeTranslator::VisitInterfaceType(InterfaceType* node) {
const TypeArguments& type_arguments = TranslateTypeArguments(
node->type_arguments().raw_array(), node->type_arguments().length());
- const dart::Class& klass =
- dart::Class::Handle(Z, H.LookupClassByKernelClass(node->klass()));
+
+ dart::Object& klass = dart::Object::Handle(Z);
+
+ if (finalize_) {
+ klass = H.LookupClassByKernelClass(node->klass());
+ } else {
+ klass = H.ToUnresolvedClass(node->klass());
+ }
+
result_ = Type::New(klass, type_arguments, TokenPosition::kNoSource);
- result_.SetIsResolved();
if (finalize_) {
- result_ = ClassFinalizer::FinalizeType(klass, result_,
+ result_.SetIsResolved();
+ result_ = ClassFinalizer::FinalizeType(dart::Class::Cast(klass), result_,
ClassFinalizer::kCanonicalize);
}
}
@@ -5568,9 +5605,6 @@ void FlowGraphBuilder::VisitYieldStatement(YieldStatement* node) {
ASSERT(stack_trace_var->name().raw() ==
Symbols::StackTraceParameter().raw());
- exception_var->set_is_forced_stack();
- stack_trace_var->set_is_forced_stack();
-
TargetEntryInstr* no_error;
TargetEntryInstr* error;

Powered by Google App Engine
This is Rietveld 408576698