Chromium Code Reviews| Index: src/ast.cc |
| diff --git a/src/ast.cc b/src/ast.cc |
| index 6f9fd7afb23a6c33cdcbaa081e70650269e94033..cea701f0c4d1cfd71db749090463823433357f2a 100644 |
| --- a/src/ast.cc |
| +++ b/src/ast.cc |
| @@ -242,8 +242,10 @@ bool IsEqualNumber(void* first, void* second) { |
| } |
| -void ObjectLiteral::CalculateEmitStore() { |
| - ZoneHashMap table(Literal::Match); |
| +void ObjectLiteral::CalculateEmitStore(Zone* zone) { |
| + ZoneAllocationPolicy allocator(zone); |
| + |
| + ZoneHashMap table(Literal::Match, 8, allocator); |
|
danno
2012/06/05 13:42:35
Please use a constant for this. Didn't you add one
sanjoy
2012/06/05 14:21:39
Fixed.
|
| for (int i = properties()->length() - 1; i >= 0; i--) { |
| ObjectLiteral::Property* property = properties()->at(i); |
| Literal* literal = property->key(); |
| @@ -252,23 +254,23 @@ void ObjectLiteral::CalculateEmitStore() { |
| // If the key of a computed property is in the table, do not emit |
| // a store for the property later. |
| if (property->kind() == ObjectLiteral::Property::COMPUTED && |
| - table.Lookup(literal, hash, false) != NULL) { |
| + table.Lookup(literal, hash, false, allocator) != NULL) { |
| property->set_emit_store(false); |
| } else { |
| // Add key to the table. |
| - table.Lookup(literal, hash, true); |
| + table.Lookup(literal, hash, true, allocator); |
| } |
| } |
| } |
| -void TargetCollector::AddTarget(Label* target) { |
| +void TargetCollector::AddTarget(Label* target, Zone* zone) { |
| // Add the label to the collector, but discard duplicates. |
| int length = targets_.length(); |
| for (int i = 0; i < length; i++) { |
| if (targets_[i] == target) return; |
| } |
| - targets_.Add(target); |
| + targets_.Add(target, zone); |
| } |
| @@ -397,7 +399,8 @@ bool FunctionDeclaration::IsInlineable() const { |
| // ---------------------------------------------------------------------------- |
| // Recording of type feedback |
| -void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
| +void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle, |
| + Zone* zone) { |
| // Record type feedback from the oracle in the AST. |
| is_uninitialized_ = oracle->LoadIsUninitialized(this); |
| if (is_uninitialized_) return; |
| @@ -421,15 +424,17 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
| } else if (oracle->LoadIsBuiltin(this, Builtins::kKeyedLoadIC_String)) { |
| is_string_access_ = true; |
| } else if (is_monomorphic_) { |
| - receiver_types_.Add(oracle->LoadMonomorphicReceiverType(this)); |
| + receiver_types_.Add(oracle->LoadMonomorphicReceiverType(this), |
| + zone); |
| } else if (oracle->LoadIsMegamorphicWithTypeInfo(this)) { |
| - receiver_types_.Reserve(kMaxKeyedPolymorphism); |
| + receiver_types_.Reserve(kMaxKeyedPolymorphism, zone); |
| oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_); |
| } |
| } |
| -void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
| +void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle, |
| + Zone* zone) { |
| Property* prop = target()->AsProperty(); |
| ASSERT(prop != NULL); |
| is_monomorphic_ = oracle->StoreIsMonomorphicNormal(this); |
| @@ -441,22 +446,23 @@ void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
| oracle->StoreReceiverTypes(this, name, &receiver_types_); |
| } else if (is_monomorphic_) { |
| // Record receiver type for monomorphic keyed stores. |
| - receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this)); |
| + receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this), zone); |
| } else if (oracle->StoreIsMegamorphicWithTypeInfo(this)) { |
| - receiver_types_.Reserve(kMaxKeyedPolymorphism); |
| + receiver_types_.Reserve(kMaxKeyedPolymorphism, zone); |
| oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_); |
| } |
| } |
| -void CountOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
| +void CountOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle, |
| + Zone* zone) { |
| is_monomorphic_ = oracle->StoreIsMonomorphicNormal(this); |
| receiver_types_.Clear(); |
| if (is_monomorphic_) { |
| // Record receiver type for monomorphic keyed stores. |
| - receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this)); |
| + receiver_types_.Add(oracle->StoreMonomorphicReceiverType(this), zone); |
| } else if (oracle->StoreIsMegamorphicWithTypeInfo(this)) { |
| - receiver_types_.Reserve(kMaxKeyedPolymorphism); |
| + receiver_types_.Reserve(kMaxKeyedPolymorphism, zone); |
| oracle->CollectKeyedReceiverTypes(this->id(), &receiver_types_); |
| } |
| } |
| @@ -784,7 +790,7 @@ bool RegExpCapture::IsAnchoredAtEnd() { |
| // output formats are alike. |
| class RegExpUnparser: public RegExpVisitor { |
| public: |
| - RegExpUnparser(); |
| + explicit RegExpUnparser(Zone* zone); |
| void VisitCharacterRange(CharacterRange that); |
| SmartArrayPointer<const char> ToString() { return stream_.ToCString(); } |
| #define MAKE_CASE(Name) virtual void* Visit##Name(RegExp##Name*, void* data); |
| @@ -794,10 +800,11 @@ class RegExpUnparser: public RegExpVisitor { |
| StringStream* stream() { return &stream_; } |
| HeapStringAllocator alloc_; |
| StringStream stream_; |
| + Zone* zone_; |
| }; |
| -RegExpUnparser::RegExpUnparser() : stream_(&alloc_) { |
| +RegExpUnparser::RegExpUnparser(Zone* zone) : stream_(&alloc_), zone_(zone) { |
| } |
| @@ -837,9 +844,9 @@ void* RegExpUnparser::VisitCharacterClass(RegExpCharacterClass* that, |
| if (that->is_negated()) |
| stream()->Add("^"); |
| stream()->Add("["); |
| - for (int i = 0; i < that->ranges()->length(); i++) { |
| + for (int i = 0; i < that->ranges(zone_)->length(); i++) { |
| if (i > 0) stream()->Add(" "); |
| - VisitCharacterRange(that->ranges()->at(i)); |
| + VisitCharacterRange(that->ranges(zone_)->at(i)); |
| } |
| stream()->Add("]"); |
| return NULL; |
| @@ -941,8 +948,8 @@ void* RegExpUnparser::VisitEmpty(RegExpEmpty* that, void* data) { |
| } |
| -SmartArrayPointer<const char> RegExpTree::ToString() { |
| - RegExpUnparser unparser; |
| +SmartArrayPointer<const char> RegExpTree::ToString(Zone* zone) { |
| + RegExpUnparser unparser(zone); |
| Accept(&unparser, NULL); |
| return unparser.ToString(); |
| } |