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

Unified Diff: runtime/vm/kernel_binary_flowgraph.cc

Issue 2776373002: Initial steps into streaming the kernel flowgraph (Closed)
Patch Set: Rebase + fix lint error 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
« no previous file with comments | « runtime/vm/kernel_binary_flowgraph.h ('k') | runtime/vm/kernel_to_il.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..4aa9585b626158fbc581909156ef9f50ad477d0f
--- /dev/null
+++ b/runtime/vm/kernel_binary_flowgraph.cc
@@ -0,0 +1,153 @@
+// 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 StreamingFlowGraphBuilder::BuildAt(intptr_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();
+ }
+
+ return Fragment();
+}
+
+TokenPosition StreamingFlowGraphBuilder::ReadPosition(bool record) {
+ return reader_->ReadPosition(record);
+}
+
+CatchBlock* StreamingFlowGraphBuilder::catch_block() {
+ return flow_graph_builder_->catch_block_;
+}
+
+Fragment StreamingFlowGraphBuilder::DebugStepCheck(TokenPosition position) {
+ return flow_graph_builder_->DebugStepCheck(position);
+}
+
+Fragment StreamingFlowGraphBuilder::LoadLocal(LocalVariable* variable) {
+ return flow_graph_builder_->LoadLocal(variable);
+}
+
+Fragment StreamingFlowGraphBuilder::PushArgument() {
+ return flow_graph_builder_->PushArgument();
+}
+
+Fragment StreamingFlowGraphBuilder::RethrowException(TokenPosition position,
+ int catch_try_index) {
+ return flow_graph_builder_->RethrowException(position, catch_try_index);
+}
+
+Fragment StreamingFlowGraphBuilder::BuildRethrow() {
+ TokenPosition position = ReadPosition();
+ Fragment instructions = DebugStepCheck(position);
+ instructions += LoadLocal(catch_block()->exception_var());
+ instructions += PushArgument();
+ instructions += LoadLocal(catch_block()->stack_trace_var());
+ instructions += PushArgument();
+ instructions += RethrowException(position, catch_block()->catch_try_index());
+
+ return instructions;
+}
+
+} // namespace kernel
+} // namespace dart
+
+#endif // !defined(DART_PRECOMPILED_RUNTIME)
« no previous file with comments | « runtime/vm/kernel_binary_flowgraph.h ('k') | runtime/vm/kernel_to_il.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698