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

Side by Side Diff: src/ast/prettyprinter.cc

Issue 2302643002: Split the AST representation of class properties from object properties (Closed)
Patch Set: rebase Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « src/ast/prettyprinter.h ('k') | src/compiler/ast-graph-builder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/ast/prettyprinter.h" 5 #include "src/ast/prettyprinter.h"
6 6
7 #include <stdarg.h> 7 #include <stdarg.h>
8 8
9 #include "src/ast/ast-value-factory.h" 9 #include "src/ast/ast-value-factory.h"
10 #include "src/ast/scopes.h" 10 #include "src/ast/scopes.h"
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 // PrintStatements(node->body()); 890 // PrintStatements(node->body());
891 } 891 }
892 892
893 893
894 void AstPrinter::VisitClassLiteral(ClassLiteral* node) { 894 void AstPrinter::VisitClassLiteral(ClassLiteral* node) {
895 IndentedScope indent(this, "CLASS LITERAL", node->position()); 895 IndentedScope indent(this, "CLASS LITERAL", node->position());
896 PrintLiteralIndented("NAME", node->constructor()->name(), false); 896 PrintLiteralIndented("NAME", node->constructor()->name(), false);
897 if (node->extends() != nullptr) { 897 if (node->extends() != nullptr) {
898 PrintIndentedVisit("EXTENDS", node->extends()); 898 PrintIndentedVisit("EXTENDS", node->extends());
899 } 899 }
900 PrintProperties(node->properties()); 900 PrintClassProperties(node->properties());
901 } 901 }
902 902
903 903 void AstPrinter::PrintClassProperties(
904 void AstPrinter::PrintProperties( 904 ZoneList<ClassLiteral::Property*>* properties) {
905 ZoneList<ObjectLiteral::Property*>* properties) {
906 for (int i = 0; i < properties->length(); i++) { 905 for (int i = 0; i < properties->length(); i++) {
907 ObjectLiteral::Property* property = properties->at(i); 906 ClassLiteral::Property* property = properties->at(i);
908 const char* prop_kind = nullptr; 907 const char* prop_kind = nullptr;
909 switch (property->kind()) { 908 switch (property->kind()) {
910 case ObjectLiteral::Property::CONSTANT: 909 case ClassLiteral::Property::METHOD:
911 prop_kind = "CONSTANT"; 910 prop_kind = "METHOD";
912 break; 911 break;
913 case ObjectLiteral::Property::COMPUTED: 912 case ClassLiteral::Property::GETTER:
914 prop_kind = "COMPUTED";
915 break;
916 case ObjectLiteral::Property::MATERIALIZED_LITERAL:
917 prop_kind = "MATERIALIZED_LITERAL";
918 break;
919 case ObjectLiteral::Property::PROTOTYPE:
920 prop_kind = "PROTOTYPE";
921 break;
922 case ObjectLiteral::Property::GETTER:
923 prop_kind = "GETTER"; 913 prop_kind = "GETTER";
924 break; 914 break;
925 case ObjectLiteral::Property::SETTER: 915 case ClassLiteral::Property::SETTER:
926 prop_kind = "SETTER"; 916 prop_kind = "SETTER";
927 break; 917 break;
928 } 918 }
929 EmbeddedVector<char, 128> buf; 919 EmbeddedVector<char, 128> buf;
930 SNPrintF(buf, "PROPERTY%s - %s", property->is_static() ? " - STATIC" : "", 920 SNPrintF(buf, "PROPERTY%s - %s", property->is_static() ? " - STATIC" : "",
931 prop_kind); 921 prop_kind);
932 IndentedScope prop(this, buf.start()); 922 IndentedScope prop(this, buf.start());
933 PrintIndentedVisit("KEY", properties->at(i)->key()); 923 PrintIndentedVisit("KEY", properties->at(i)->key());
934 PrintIndentedVisit("VALUE", properties->at(i)->value()); 924 PrintIndentedVisit("VALUE", properties->at(i)->value());
935 } 925 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 Print("%s", buf.start()); 969 Print("%s", buf.start());
980 Print("\n"); 970 Print("\n");
981 } 971 }
982 972
983 973
984 void AstPrinter::VisitObjectLiteral(ObjectLiteral* node) { 974 void AstPrinter::VisitObjectLiteral(ObjectLiteral* node) {
985 IndentedScope indent(this, "OBJ LITERAL", node->position()); 975 IndentedScope indent(this, "OBJ LITERAL", node->position());
986 EmbeddedVector<char, 128> buf; 976 EmbeddedVector<char, 128> buf;
987 SNPrintF(buf, "literal_index = %d\n", node->literal_index()); 977 SNPrintF(buf, "literal_index = %d\n", node->literal_index());
988 PrintIndented(buf.start()); 978 PrintIndented(buf.start());
989 PrintProperties(node->properties()); 979 PrintObjectProperties(node->properties());
980 }
981
982 void AstPrinter::PrintObjectProperties(
983 ZoneList<ObjectLiteral::Property*>* properties) {
984 for (int i = 0; i < properties->length(); i++) {
985 ObjectLiteral::Property* property = properties->at(i);
986 const char* prop_kind = nullptr;
987 switch (property->kind()) {
988 case ObjectLiteral::Property::CONSTANT:
989 prop_kind = "CONSTANT";
990 break;
991 case ObjectLiteral::Property::COMPUTED:
992 prop_kind = "COMPUTED";
993 break;
994 case ObjectLiteral::Property::MATERIALIZED_LITERAL:
995 prop_kind = "MATERIALIZED_LITERAL";
996 break;
997 case ObjectLiteral::Property::PROTOTYPE:
998 prop_kind = "PROTOTYPE";
999 break;
1000 case ObjectLiteral::Property::GETTER:
1001 prop_kind = "GETTER";
1002 break;
1003 case ObjectLiteral::Property::SETTER:
1004 prop_kind = "SETTER";
1005 break;
1006 }
1007 EmbeddedVector<char, 128> buf;
1008 SNPrintF(buf, "PROPERTY - %s", prop_kind);
1009 IndentedScope prop(this, buf.start());
1010 PrintIndentedVisit("KEY", properties->at(i)->key());
1011 PrintIndentedVisit("VALUE", properties->at(i)->value());
1012 }
990 } 1013 }
991 1014
992 1015
993 void AstPrinter::VisitArrayLiteral(ArrayLiteral* node) { 1016 void AstPrinter::VisitArrayLiteral(ArrayLiteral* node) {
994 IndentedScope indent(this, "ARRAY LITERAL", node->position()); 1017 IndentedScope indent(this, "ARRAY LITERAL", node->position());
995 1018
996 EmbeddedVector<char, 128> buf; 1019 EmbeddedVector<char, 128> buf;
997 SNPrintF(buf, "literal_index = %d\n", node->literal_index()); 1020 SNPrintF(buf, "literal_index = %d\n", node->literal_index());
998 PrintIndented(buf.start()); 1021 PrintIndented(buf.start());
999 if (node->values()->length() > 0) { 1022 if (node->values()->length() > 0) {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 1183
1161 void AstPrinter::VisitRewritableExpression(RewritableExpression* node) { 1184 void AstPrinter::VisitRewritableExpression(RewritableExpression* node) {
1162 Visit(node->expression()); 1185 Visit(node->expression());
1163 } 1186 }
1164 1187
1165 1188
1166 #endif // DEBUG 1189 #endif // DEBUG
1167 1190
1168 } // namespace internal 1191 } // namespace internal
1169 } // namespace v8 1192 } // namespace v8
OLDNEW
« no previous file with comments | « src/ast/prettyprinter.h ('k') | src/compiler/ast-graph-builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698