OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/scopes.h" | 5 #include "src/scopes.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
9 #include "src/messages.h" | 9 #include "src/messages.h" |
10 #include "src/parser.h" | 10 #include "src/parser.h" |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 while (!top->is_script_scope() && !top->outer_scope()->already_resolved()) { | 837 while (!top->is_script_scope() && !top->outer_scope()->already_resolved()) { |
838 top = top->outer_scope(); | 838 top = top->outer_scope(); |
839 } | 839 } |
840 | 840 |
841 top->pending_error_handler_.ReportMessageAt(start_position, end_position, | 841 top->pending_error_handler_.ReportMessageAt(start_position, end_position, |
842 message, arg, kReferenceError); | 842 message, arg, kReferenceError); |
843 } | 843 } |
844 | 844 |
845 | 845 |
846 #ifdef DEBUG | 846 #ifdef DEBUG |
847 static const char* Header(ScopeType scope_type, bool is_declaration_scope) { | 847 static const char* Header(ScopeType scope_type, FunctionKind function_kind, |
| 848 bool is_declaration_scope) { |
848 switch (scope_type) { | 849 switch (scope_type) { |
849 case EVAL_SCOPE: return "eval"; | 850 case EVAL_SCOPE: return "eval"; |
850 case FUNCTION_SCOPE: return "function"; | 851 // TODO(adamk): Should we print concise method scopes specially? |
| 852 case FUNCTION_SCOPE: |
| 853 return IsArrowFunction(function_kind) ? "arrow" : "function"; |
851 case MODULE_SCOPE: return "module"; | 854 case MODULE_SCOPE: return "module"; |
852 case SCRIPT_SCOPE: return "global"; | 855 case SCRIPT_SCOPE: return "global"; |
853 case CATCH_SCOPE: return "catch"; | 856 case CATCH_SCOPE: return "catch"; |
854 case BLOCK_SCOPE: return is_declaration_scope ? "varblock" : "block"; | 857 case BLOCK_SCOPE: return is_declaration_scope ? "varblock" : "block"; |
855 case WITH_SCOPE: return "with"; | 858 case WITH_SCOPE: return "with"; |
856 case ARROW_SCOPE: return "arrow"; | |
857 } | 859 } |
858 UNREACHABLE(); | 860 UNREACHABLE(); |
859 return NULL; | 861 return NULL; |
860 } | 862 } |
861 | 863 |
862 | 864 |
863 static void Indent(int n, const char* str) { | 865 static void Indent(int n, const char* str) { |
864 PrintF("%*s%s", n, "", str); | 866 PrintF("%*s%s", n, "", str); |
865 } | 867 } |
866 | 868 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 } | 930 } |
929 } | 931 } |
930 } | 932 } |
931 | 933 |
932 | 934 |
933 void Scope::Print(int n) { | 935 void Scope::Print(int n) { |
934 int n0 = (n > 0 ? n : 0); | 936 int n0 = (n > 0 ? n : 0); |
935 int n1 = n0 + 2; // indentation | 937 int n1 = n0 + 2; // indentation |
936 | 938 |
937 // Print header. | 939 // Print header. |
938 Indent(n0, Header(scope_type_, is_declaration_scope())); | 940 Indent(n0, Header(scope_type_, function_kind_, is_declaration_scope())); |
939 if (!scope_name_->IsEmpty()) { | 941 if (!scope_name_->IsEmpty()) { |
940 PrintF(" "); | 942 PrintF(" "); |
941 PrintName(scope_name_); | 943 PrintName(scope_name_); |
942 } | 944 } |
943 | 945 |
944 // Print parameters, if any. | 946 // Print parameters, if any. |
945 if (is_function_scope()) { | 947 if (is_function_scope()) { |
946 PrintF(" ("); | 948 PrintF(" ("); |
947 for (int i = 0; i < params_.length(); i++) { | 949 for (int i = 0; i < params_.length(); i++) { |
948 if (i > 0) PrintF(", "); | 950 if (i > 0) PrintF(", "); |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1645 function_ != NULL && function_->proxy()->var()->IsContextSlot(); | 1647 function_ != NULL && function_->proxy()->var()->IsContextSlot(); |
1646 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - num_global_slots() - | 1648 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - num_global_slots() - |
1647 (is_function_var_in_context ? 1 : 0); | 1649 (is_function_var_in_context ? 1 : 0); |
1648 } | 1650 } |
1649 | 1651 |
1650 | 1652 |
1651 int Scope::ContextGlobalCount() const { return num_global_slots(); } | 1653 int Scope::ContextGlobalCount() const { return num_global_slots(); } |
1652 | 1654 |
1653 } // namespace internal | 1655 } // namespace internal |
1654 } // namespace v8 | 1656 } // namespace v8 |
OLD | NEW |