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

Unified Diff: runtime/vm/scopes.h

Issue 2411823003: VM support for running Kernel binaries. (Closed)
Patch Set: Address comments Created 4 years, 2 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/redundancy_elimination.cc ('k') | runtime/vm/scopes.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/scopes.h
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index c2fbfe07f720d6ba3d7b6d80a032ca46bf01f5e0..9b1877e4f8c37ccc05db7420b05c5df2fdcfe19f 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -33,6 +33,7 @@ class LocalVariable : public ZoneAllocated {
is_captured_(false),
is_invisible_(false),
is_captured_parameter_(false),
+ is_forced_stack_(false),
index_(LocalVariable::kUninitializedIndex) {
ASSERT(type.IsZoneHandle() || type.IsReadOnlyHandle());
ASSERT(type.IsFinalized());
@@ -55,6 +56,13 @@ class LocalVariable : public ZoneAllocated {
bool is_captured() const { return is_captured_; }
void set_is_captured() { is_captured_ = true; }
+ // Variables marked as forced to stack are skipped and not captured by
+ // CaptureLocalVariables - which iterates scope chain between two scopes
+ // and indiscriminately marks all variables as captured.
+ // TODO(27590) remove the hardcoded blacklist from CaptureLocalVariables
+ bool is_forced_stack() const { return is_forced_stack_; }
+ void set_is_forced_stack() { is_forced_stack_ = true; }
+
bool HasIndex() const {
return index_ != kUninitializedIndex;
}
@@ -122,6 +130,7 @@ class LocalVariable : public ZoneAllocated {
// in the stack frame.
bool is_invisible_;
bool is_captured_parameter_;
+ bool is_forced_stack_;
int index_; // Allocation index in words relative to frame pointer (if not
// captured), or relative to the context pointer (if captured).
@@ -331,7 +340,7 @@ class LocalScope : public ZoneAllocated {
RawContextScope* PreserveOuterScope(int current_context_level) const;
// Mark all local variables that are accessible from this scope up to
- // top_scope (included) as captured.
+ // top_scope (included) as captured unless they are marked as forced to stack.
void CaptureLocalVariables(LocalScope* top_scope);
// Creates a LocalScope representing the outer scope of a local function to be
« no previous file with comments | « runtime/vm/redundancy_elimination.cc ('k') | runtime/vm/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698