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

Unified Diff: runtime/vm/kernel_binary_flowgraph.cc

Issue 2776373002: Initial steps into streaming the kernel flowgraph (Closed)
Patch Set: Changed type Created 3 years, 9 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
Index: runtime/vm/kernel_binary_flowgraph.cc
diff --git a/runtime/vm/kernel_binary_flowgraph.cc b/runtime/vm/kernel_binary_flowgraph.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1db13b823c3e968f8cfdbf4625b3d1132d75310e
--- /dev/null
+++ b/runtime/vm/kernel_binary_flowgraph.cc
@@ -0,0 +1,134 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "vm/kernel_binary_flowgraph.h"
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+
+namespace dart {
+namespace kernel {
+
+Fragment KernelFlowgraphBuilder::BuildAt(int64_t kernel_offset) {
+ reader_->set_offset(kernel_offset);
+
+ uint8_t payload = 0;
+ Tag tag = reader_->ReadTag(&payload);
+ switch (tag) {
+ // case kInvalidExpression:
+ // return InvalidExpression::ReadFrom(reader_);
+ // case kVariableGet:
+ // return VariableGet::ReadFrom(reader_);
+ // case kSpecializedVariableGet:
+ // return VariableGet::ReadFrom(reader_, payload);
+ // case kVariableSet:
+ // return VariableSet::ReadFrom(reader_);
+ // case kSpecializedVariableSet:
+ // return VariableSet::ReadFrom(reader_, payload);
+ // case kPropertyGet:
+ // return PropertyGet::ReadFrom(reader_);
+ // case kPropertySet:
+ // return PropertySet::ReadFrom(reader_);
+ // case kDirectPropertyGet:
+ // return DirectPropertyGet::ReadFrom(reader_);
+ // case kDirectPropertySet:
+ // return DirectPropertySet::ReadFrom(reader_);
+ // case kStaticGet:
+ // return StaticGet::ReadFrom(reader_);
+ // case kStaticSet:
+ // return StaticSet::ReadFrom(reader_);
+ // case kMethodInvocation:
+ // return MethodInvocation::ReadFrom(reader_);
+ // case kDirectMethodInvocation:
+ // return DirectMethodInvocation::ReadFrom(reader_);
+ // case kStaticInvocation:
+ // return StaticInvocation::ReadFrom(reader_, false);
+ // case kConstStaticInvocation:
+ // return StaticInvocation::ReadFrom(reader_, true);
+ // case kConstructorInvocation:
+ // return ConstructorInvocation::ReadFrom(reader_, false);
+ // case kConstConstructorInvocation:
+ // return ConstructorInvocation::ReadFrom(reader_, true);
+ // case kNot:
+ // return Not::ReadFrom(reader_);
+ // case kLogicalExpression:
+ // return LogicalExpression::ReadFrom(reader_);
+ // case kConditionalExpression:
+ // return ConditionalExpression::ReadFrom(reader_);
+ // case kStringConcatenation:
+ // return StringConcatenation::ReadFrom(reader_);
+ // case kIsExpression:
+ // return IsExpression::ReadFrom(reader_);
+ // case kAsExpression:
+ // return AsExpression::ReadFrom(reader_);
+ // case kSymbolLiteral:
+ // return SymbolLiteral::ReadFrom(reader_);
+ // case kTypeLiteral:
+ // return TypeLiteral::ReadFrom(reader_);
+ // case kThisExpression:
+ // return ThisExpression::ReadFrom(reader_);
+ case kRethrow:
+ return buildRethrow();
+ // case kThrow:
+ // return Throw::ReadFrom(reader_);
+ // case kListLiteral:
+ // return ListLiteral::ReadFrom(reader_, false);
+ // case kConstListLiteral:
+ // return ListLiteral::ReadFrom(reader_, true);
+ // case kMapLiteral:
+ // return MapLiteral::ReadFrom(reader_, false);
+ // case kConstMapLiteral:
+ // return MapLiteral::ReadFrom(reader_, true);
+ // case kAwaitExpression:
+ // return AwaitExpression::ReadFrom(reader_);
+ // case kFunctionExpression:
+ // return FunctionExpression::ReadFrom(reader_);
+ // case kLet:
+ // return Let::ReadFrom(reader_);
+ // case kBigIntLiteral:
+ // return BigintLiteral::ReadFrom(reader_);
+ // case kStringLiteral:
+ // return StringLiteral::ReadFrom(reader_);
+ // case kSpecialIntLiteral:
+ // return IntLiteral::ReadFrom(reader_, payload);
+ // case kNegativeIntLiteral:
+ // return IntLiteral::ReadFrom(reader_, true);
+ // case kPositiveIntLiteral:
+ // return IntLiteral::ReadFrom(reader_, false);
+ // case kDoubleLiteral:
+ // return DoubleLiteral::ReadFrom(reader_);
+ // case kTrueLiteral:
+ // return BoolLiteral::ReadFrom(reader_, true);
+ // case kFalseLiteral:
+ // return BoolLiteral::ReadFrom(reader_, false);
+ // case kNullLiteral:
+ // return NullLiteral::ReadFrom(reader_);
+ default:
+ UNREACHABLE();
+ }
+
+ Fragment instructions;
Kevin Millikin (Google) 2017/03/28 12:50:00 return Fragment();
jensj 2017/03/29 09:30:42 Done.
+ return instructions;
+}
+
+Fragment KernelFlowgraphBuilder::buildRethrow() {
+ Fragment instructions;
+
+ TokenPosition position = reader_->ReadPosition();
Kevin Millikin (Google) 2017/03/28 12:50:00 I would take all these functions (KernelReader::Re
jensj 2017/03/29 09:30:41 Done.
+ instructions = flowGraph_builder_->DebugStepCheck(position);
Kevin Millikin (Google) 2017/03/28 12:50:00 Fragment instructions = DebugStepCheck(position);
jensj 2017/03/29 09:30:41 Done.
+ instructions += flowGraph_builder_->LoadLocal(
+ flowGraph_builder_->catch_block_->exception_var());
+ instructions += flowGraph_builder_->PushArgument();
+ instructions += flowGraph_builder_->LoadLocal(
+ flowGraph_builder_->catch_block_->stack_trace_var());
+ instructions += flowGraph_builder_->PushArgument();
+ instructions += flowGraph_builder_->RethrowException(
+ position, flowGraph_builder_->catch_block_->catch_try_index());
+
+ return instructions;
+}
+
+} // namespace kernel
+} // namespace dart
+
+#endif // !defined(DART_PRECOMPILED_RUNTIME)

Powered by Google App Engine
This is Rietveld 408576698