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

Unified Diff: src/ast/ast.cc

Issue 2651523002: [ast] Count index keys in AST not runtime. (Closed)
Patch Set: Treat getters with numbers as their name correctly. Created 3 years, 11 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 | « no previous file | src/factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/ast.cc
diff --git a/src/ast/ast.cc b/src/ast/ast.cc
index 67b51fec9764bc50c299cfb81b4d49627e2b6124..426b03a48f3d350e130a2999eb79f78cf2e7c4b7 100644
--- a/src/ast/ast.cc
+++ b/src/ast/ast.cc
@@ -520,6 +520,7 @@ void ObjectLiteral::InitDepthAndFlags() {
for (int i = 0; i < properties()->length(); i++) {
ObjectLiteral::Property* property = properties()->at(i);
if (!IsBoilerplateProperty(property)) {
+ DCHECK(has_seen_proto());
is_simple = false;
continue;
}
@@ -582,9 +583,26 @@ void ObjectLiteral::InitDepthAndFlags() {
void ObjectLiteral::BuildConstantProperties(Isolate* isolate) {
if (!constant_properties_.is_null()) return;
+ int index_keys = 0;
+ for (int i = 0; i < properties()->length(); i++) {
+ ObjectLiteral::Property* property = properties()->at(i);
+ if (!IsBoilerplateProperty(property) || property->is_computed_name()) {
+ continue;
+ }
+
+ Handle<Object> key = property->key()->AsLiteral()->value();
+
+ uint32_t element_index = 0;
+ if (key->ToArrayIndex(&element_index) ||
+ (key->IsString() && String::cast(*key)->AsArrayIndex(&element_index))) {
+ index_keys++;
+ }
+ }
+
Handle<BoilerplateDescription> constant_properties =
isolate->factory()->NewBoilerplateDescription(
- boilerplate_properties_, properties()->length(), has_seen_proto());
+ boilerplate_properties_, properties()->length() - index_keys,
+ has_seen_proto());
int position = 0;
for (int i = 0; i < properties()->length(); i++) {
« no previous file with comments | « no previous file | src/factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698