OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "vm/ast.h" | 6 #include "vm/ast.h" |
7 #include "vm/scopes.h" | 7 #include "vm/scopes.h" |
8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
9 | 9 |
10 namespace dart { | 10 namespace dart { |
11 | 11 |
12 TEST_CASE(LocalScope) { | 12 TEST_CASE(LocalScope) { |
13 // Allocate a couple of local variables first. | 13 // Allocate a couple of local variables first. |
14 const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType()); | 14 const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType()); |
15 const String& a = String::ZoneHandle(Symbols::New(thread, "a")); | 15 const String& a = String::ZoneHandle(Symbols::New(thread, "a")); |
16 LocalVariable* var_a = | 16 LocalVariable* var_a = new LocalVariable( |
17 new LocalVariable(TokenPosition::kNoSource, | 17 TokenPosition::kNoSource, TokenPosition::kNoSource, a, dynamic_type); |
18 TokenPosition::kNoSource, a, dynamic_type); | 18 LocalVariable* inner_var_a = new LocalVariable( |
19 LocalVariable* inner_var_a = | 19 TokenPosition::kNoSource, TokenPosition::kNoSource, a, dynamic_type); |
20 new LocalVariable(TokenPosition::kNoSource, | |
21 TokenPosition::kNoSource, a, dynamic_type); | |
22 const String& b = String::ZoneHandle(Symbols::New(thread, "b")); | 20 const String& b = String::ZoneHandle(Symbols::New(thread, "b")); |
23 LocalVariable* var_b = | 21 LocalVariable* var_b = new LocalVariable( |
24 new LocalVariable(TokenPosition::kNoSource, | 22 TokenPosition::kNoSource, TokenPosition::kNoSource, b, dynamic_type); |
25 TokenPosition::kNoSource, b, dynamic_type); | |
26 const String& c = String::ZoneHandle(Symbols::New(thread, "c")); | 23 const String& c = String::ZoneHandle(Symbols::New(thread, "c")); |
27 LocalVariable* var_c = | 24 LocalVariable* var_c = new LocalVariable( |
28 new LocalVariable(TokenPosition::kNoSource, | 25 TokenPosition::kNoSource, TokenPosition::kNoSource, c, dynamic_type); |
29 TokenPosition::kNoSource, c, dynamic_type); | |
30 const String& L = String::ZoneHandle(Symbols::New(thread, "L")); | 26 const String& L = String::ZoneHandle(Symbols::New(thread, "L")); |
31 SourceLabel* label_L = | 27 SourceLabel* label_L = |
32 new SourceLabel(TokenPosition::kNoSource, L, SourceLabel::kFor); | 28 new SourceLabel(TokenPosition::kNoSource, L, SourceLabel::kFor); |
33 | 29 |
34 LocalScope* outer_scope = new LocalScope(NULL, 0, 0); | 30 LocalScope* outer_scope = new LocalScope(NULL, 0, 0); |
35 LocalScope* inner_scope1 = new LocalScope(outer_scope, 0, 0); | 31 LocalScope* inner_scope1 = new LocalScope(outer_scope, 0, 0); |
36 LocalScope* inner_scope2 = new LocalScope(outer_scope, 0, 0); | 32 LocalScope* inner_scope2 = new LocalScope(outer_scope, 0, 0); |
37 | 33 |
38 EXPECT(outer_scope->parent() == NULL); | 34 EXPECT(outer_scope->parent() == NULL); |
39 EXPECT_EQ(outer_scope, inner_scope1->parent()); | 35 EXPECT_EQ(outer_scope, inner_scope1->parent()); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 (inner_scope1->VariableAt(1) == var_b)); | 106 (inner_scope1->VariableAt(1) == var_b)); |
111 EXPECT((inner_scope2->VariableAt(0) == var_a) || | 107 EXPECT((inner_scope2->VariableAt(0) == var_a) || |
112 (inner_scope2->VariableAt(1) == var_a) || | 108 (inner_scope2->VariableAt(1) == var_a) || |
113 (inner_scope2->VariableAt(2) == var_a)); | 109 (inner_scope2->VariableAt(2) == var_a)); |
114 EXPECT((inner_scope2->VariableAt(0) == var_c) || | 110 EXPECT((inner_scope2->VariableAt(0) == var_c) || |
115 (inner_scope2->VariableAt(1) == var_c) || | 111 (inner_scope2->VariableAt(1) == var_c) || |
116 (inner_scope2->VariableAt(2) == var_c)); | 112 (inner_scope2->VariableAt(2) == var_c)); |
117 } | 113 } |
118 | 114 |
119 } // namespace dart | 115 } // namespace dart |
OLD | NEW |