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

Unified Diff: runtime/vm/object_test.cc

Issue 2941643002: Check for a passed-in type argument vector in the prolog of generic functions. (Closed)
Patch Set: address review comments Created 3 years, 6 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/object.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object_test.cc
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 6e8de6bbc95b272e6a257b5bf659a5b052e0e86f..b4e9f6e83405bf7bedade4f6e96994734d120326 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -2524,6 +2524,11 @@ ISOLATE_UNIT_TEST_CASE(ContextScope) {
new LocalScope(parent_scope, local_scope_function_level, 0);
const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType());
+ const String& ta = Symbols::FunctionTypeArgumentsVar();
+ LocalVariable* var_ta = new LocalVariable(
+ TokenPosition::kNoSource, TokenPosition::kNoSource, ta, dynamic_type);
+ parent_scope->AddVariable(var_ta);
+
const String& a = String::ZoneHandle(Symbols::New(thread, "a"));
LocalVariable* var_a = new LocalVariable(
TokenPosition::kNoSource, TokenPosition::kNoSource, a, dynamic_type);
@@ -2540,6 +2545,11 @@ ISOLATE_UNIT_TEST_CASE(ContextScope) {
parent_scope->AddVariable(var_c);
bool test_only = false; // Please, insert alias.
+ var_ta = local_scope->LookupVariable(ta, test_only);
+ EXPECT(var_ta->is_captured());
+ EXPECT_EQ(parent_scope_function_level, var_ta->owner()->function_level());
+ EXPECT(local_scope->LocalLookupVariable(ta) == var_ta); // Alias.
+
var_a = local_scope->LookupVariable(a, test_only);
EXPECT(var_a->is_captured());
EXPECT_EQ(parent_scope_function_level, var_a->owner()->function_level());
@@ -2561,8 +2571,8 @@ ISOLATE_UNIT_TEST_CASE(ContextScope) {
var_c = local_scope->LookupVariable(c, test_only);
EXPECT(var_c->is_captured());
- EXPECT_EQ(3, local_scope->num_variables()); // a, b, and c alias.
- EXPECT_EQ(2, local_scope->NumCapturedVariables()); // a, c alias.
+ EXPECT_EQ(4, local_scope->num_variables()); // ta, a, b, c.
+ EXPECT_EQ(3, local_scope->NumCapturedVariables()); // ta, a, c.
const int first_parameter_index = 0;
const int num_parameters = 0;
@@ -2571,7 +2581,9 @@ ISOLATE_UNIT_TEST_CASE(ContextScope) {
int next_frame_index = parent_scope->AllocateVariables(
first_parameter_index, num_parameters, first_frame_index, NULL,
&found_captured_vars);
- EXPECT_EQ(first_frame_index, next_frame_index); // a and c not in frame.
+ // Variables a and c are captured, therefore are not allocated in frame.
+ // Variable var_ta, although captured, still requires a slot in frame.
+ EXPECT_EQ(-1, next_frame_index - first_frame_index); // Indices in frame < 0.
const intptr_t parent_scope_context_level = 1;
EXPECT_EQ(parent_scope_context_level, parent_scope->context_level());
EXPECT(found_captured_vars);
@@ -2580,11 +2592,17 @@ ISOLATE_UNIT_TEST_CASE(ContextScope) {
const ContextScope& context_scope = ContextScope::Handle(
local_scope->PreserveOuterScope(local_scope_context_level));
LocalScope* outer_scope = LocalScope::RestoreOuterScope(context_scope);
- EXPECT_EQ(2, outer_scope->num_variables());
+ EXPECT_EQ(3, outer_scope->num_variables());
+
+ var_ta = outer_scope->LocalLookupVariable(ta);
+ EXPECT(var_ta->is_captured());
+ EXPECT_EQ(0, var_ta->index()); // First index.
+ EXPECT_EQ(parent_scope_context_level - local_scope_context_level,
+ var_ta->owner()->context_level()); // Adjusted context level.
var_a = outer_scope->LocalLookupVariable(a);
EXPECT(var_a->is_captured());
- EXPECT_EQ(0, var_a->index()); // First index.
+ EXPECT_EQ(1, var_a->index()); // First index.
EXPECT_EQ(parent_scope_context_level - local_scope_context_level,
var_a->owner()->context_level()); // Adjusted context level.
@@ -2593,7 +2611,7 @@ ISOLATE_UNIT_TEST_CASE(ContextScope) {
var_c = outer_scope->LocalLookupVariable(c);
EXPECT(var_c->is_captured());
- EXPECT_EQ(1, var_c->index());
+ EXPECT_EQ(2, var_c->index());
EXPECT_EQ(parent_scope_context_level - local_scope_context_level,
var_c->owner()->context_level()); // Adjusted context level.
}
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698