Chromium Code Reviews| Index: src/ast/ast-value-factory.h |
| diff --git a/src/ast/ast-value-factory.h b/src/ast/ast-value-factory.h |
| index 51c0df7a807416ad69e3361c338eef356e75a105..9c176f7a19eabeb9d04b1fc1fbc0a060e91d4cd6 100644 |
| --- a/src/ast/ast-value-factory.h |
| +++ b/src/ast/ast-value-factory.h |
| @@ -332,6 +332,7 @@ class AstValueFactory { |
| AstValueFactory(Zone* zone, uint32_t hash_seed) |
| : string_table_(AstRawStringCompare), |
| values_(nullptr), |
| + smis_(), |
| strings_(nullptr), |
| strings_end_(&strings_), |
| zone_(zone), |
| @@ -342,6 +343,7 @@ class AstValueFactory { |
| #define F(name) name##_ = NULL; |
| OTHER_CONSTANTS(F) |
| #undef F |
| + std::fill(&smis_[0], &smis_[kMaxCachedSmi + 1], nullptr); |
|
vogelheim
2016/11/09 15:04:10
I'd use std::fill(smis_, smis_ + arraysize(smis_),
|
| } |
| Zone* zone() const { return zone_; } |
| @@ -381,7 +383,7 @@ class AstValueFactory { |
| // A JavaScript symbol (ECMA-262 edition 6). |
| const AstValue* NewSymbol(const char* name); |
| const AstValue* NewNumber(double number, bool with_dot = false); |
| - const AstValue* NewSmi(int number); |
| + const AstValue* NewSmi(uint32_t number); |
| const AstValue* NewBoolean(bool b); |
| const AstValue* NewStringList(ZoneList<const AstRawString*>* strings); |
| const AstValue* NewNull(); |
| @@ -389,6 +391,10 @@ class AstValueFactory { |
| const AstValue* NewTheHole(); |
| private: |
| + static const uint32_t kMaxCachedSmi = 1 << 10; |
| + |
| + STATIC_ASSERT(kMaxCachedSmi <= Smi::kMaxValue); |
| + |
| AstValue* AddValue(AstValue* value) { |
| value->set_next(values_); |
| values_ = value; |
| @@ -416,6 +422,8 @@ class AstValueFactory { |
| // For keeping track of all AstValues and AstRawStrings we've created (so that |
| // they can be internalized later). |
| AstValue* values_; |
| + |
| + AstValue* smis_[kMaxCachedSmi + 1]; |
| // We need to keep track of strings_ in order since cons strings require their |
| // members to be internalized first. |
| AstString* strings_; |