Chromium Code Reviews| 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 #ifndef V8_AST_H_ | 5 #ifndef V8_AST_H_ |
| 6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
| (...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1440 // Property is used for passing information | 1440 // Property is used for passing information |
| 1441 // about an object literal's properties from the parser | 1441 // about an object literal's properties from the parser |
| 1442 // to the code generator. | 1442 // to the code generator. |
| 1443 class ObjectLiteralProperty V8_FINAL : public ZoneObject { | 1443 class ObjectLiteralProperty V8_FINAL : public ZoneObject { |
| 1444 public: | 1444 public: |
| 1445 enum Kind { | 1445 enum Kind { |
| 1446 CONSTANT, // Property with constant value (compile time). | 1446 CONSTANT, // Property with constant value (compile time). |
| 1447 COMPUTED, // Property with computed value (execution time). | 1447 COMPUTED, // Property with computed value (execution time). |
| 1448 MATERIALIZED_LITERAL, // Property value is a materialized literal. | 1448 MATERIALIZED_LITERAL, // Property value is a materialized literal. |
| 1449 GETTER, SETTER, // Property is an accessor function. | 1449 GETTER, SETTER, // Property is an accessor function. |
| 1450 PROTOTYPE // Property is __proto__. | 1450 PROTOTYPE, // Property is __proto__. |
| 1451 COMPUTED_NAME // Property with computed name. | |
| 1451 }; | 1452 }; |
| 1452 | 1453 |
| 1453 ObjectLiteralProperty(Zone* zone, Literal* key, Expression* value); | 1454 ObjectLiteralProperty(Zone* zone, Expression* key, Expression* value, |
| 1455 bool is_computed_name); | |
|
rossberg
2014/06/13 15:19:24
Is this flag needed? Isn't it implied by the type
wingo
2014/06/16 08:32:27
The flag is needed. ['foo']:42 has a Literal as t
rossberg
2014/06/18 14:13:40
Apparently, it was decided to drop duplicate check
| |
| 1454 | 1456 |
| 1455 Literal* key() { return key_; } | 1457 Expression* key() { return key_; } |
| 1456 Expression* value() { return value_; } | 1458 Expression* value() { return value_; } |
| 1457 Kind kind() { return kind_; } | 1459 Kind kind() { return kind_; } |
| 1458 | 1460 |
| 1459 // Type feedback information. | 1461 // Type feedback information. |
| 1460 void RecordTypeFeedback(TypeFeedbackOracle* oracle); | 1462 void RecordTypeFeedback(TypeFeedbackOracle* oracle); |
| 1461 bool IsMonomorphic() { return !receiver_type_.is_null(); } | 1463 bool IsMonomorphic() { return !receiver_type_.is_null(); } |
| 1462 Handle<Map> GetReceiverType() { return receiver_type_; } | 1464 Handle<Map> GetReceiverType() { return receiver_type_; } |
| 1463 | 1465 |
| 1464 bool IsCompileTimeValue(); | 1466 bool IsCompileTimeValue(); |
| 1465 | 1467 |
| 1466 void set_emit_store(bool emit_store); | 1468 void set_emit_store(bool emit_store); |
| 1467 bool emit_store(); | 1469 bool emit_store(); |
| 1468 | 1470 |
| 1469 protected: | 1471 protected: |
| 1470 template<class> friend class AstNodeFactory; | 1472 template<class> friend class AstNodeFactory; |
| 1471 | 1473 |
| 1472 ObjectLiteralProperty(Zone* zone, bool is_getter, FunctionLiteral* value); | 1474 ObjectLiteralProperty(Zone* zone, bool is_getter, FunctionLiteral* value); |
| 1473 void set_key(Literal* key) { key_ = key; } | 1475 void set_key(Expression* key) { key_ = key; } |
| 1474 | 1476 |
| 1475 private: | 1477 private: |
| 1476 Literal* key_; | 1478 Expression* key_; |
| 1477 Expression* value_; | 1479 Expression* value_; |
| 1478 Kind kind_; | 1480 Kind kind_; |
| 1479 bool emit_store_; | 1481 bool emit_store_; |
| 1480 Handle<Map> receiver_type_; | 1482 Handle<Map> receiver_type_; |
| 1481 }; | 1483 }; |
| 1482 | 1484 |
| 1483 | 1485 |
| 1484 // An object literal has a boilerplate object that is used | 1486 // An object literal has a boilerplate object that is used |
| 1485 // for minimizing the work when constructing it at runtime. | 1487 // for minimizing the work when constructing it at runtime. |
| 1486 class ObjectLiteral V8_FINAL : public MaterializedLiteral { | 1488 class ObjectLiteral V8_FINAL : public MaterializedLiteral { |
| (...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3147 int literal_index, | 3149 int literal_index, |
| 3148 int boilerplate_properties, | 3150 int boilerplate_properties, |
| 3149 bool has_function, | 3151 bool has_function, |
| 3150 int pos) { | 3152 int pos) { |
| 3151 ObjectLiteral* lit = new(zone_) ObjectLiteral( | 3153 ObjectLiteral* lit = new(zone_) ObjectLiteral( |
| 3152 zone_, properties, literal_index, boilerplate_properties, | 3154 zone_, properties, literal_index, boilerplate_properties, |
| 3153 has_function, pos); | 3155 has_function, pos); |
| 3154 VISIT_AND_RETURN(ObjectLiteral, lit) | 3156 VISIT_AND_RETURN(ObjectLiteral, lit) |
| 3155 } | 3157 } |
| 3156 | 3158 |
| 3157 ObjectLiteral::Property* NewObjectLiteralProperty(Literal* key, | 3159 ObjectLiteral::Property* NewObjectLiteralProperty(Expression* key, |
| 3158 Expression* value) { | 3160 Expression* value, |
| 3159 return new(zone_) ObjectLiteral::Property(zone_, key, value); | 3161 bool is_computed_name) { |
| 3162 return new(zone_) ObjectLiteral::Property(zone_, key, value, | |
| 3163 is_computed_name); | |
| 3160 } | 3164 } |
| 3161 | 3165 |
| 3162 ObjectLiteral::Property* NewObjectLiteralProperty(bool is_getter, | 3166 ObjectLiteral::Property* NewObjectLiteralProperty(bool is_getter, |
| 3163 FunctionLiteral* value, | 3167 FunctionLiteral* value, |
| 3164 int pos) { | 3168 int pos) { |
| 3165 ObjectLiteral::Property* prop = | 3169 ObjectLiteral::Property* prop = |
| 3166 new(zone_) ObjectLiteral::Property(zone_, is_getter, value); | 3170 new(zone_) ObjectLiteral::Property(zone_, is_getter, value); |
| 3167 prop->set_key(NewLiteral(value->name(), pos)); | 3171 prop->set_key(NewLiteral(value->name(), pos)); |
| 3168 return prop; // Not an AST node, will not be visited. | 3172 return prop; // Not an AST node, will not be visited. |
| 3169 } | 3173 } |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3338 | 3342 |
| 3339 private: | 3343 private: |
| 3340 Zone* zone_; | 3344 Zone* zone_; |
| 3341 Visitor visitor_; | 3345 Visitor visitor_; |
| 3342 }; | 3346 }; |
| 3343 | 3347 |
| 3344 | 3348 |
| 3345 } } // namespace v8::internal | 3349 } } // namespace v8::internal |
| 3346 | 3350 |
| 3347 #endif // V8_AST_H_ | 3351 #endif // V8_AST_H_ |
| OLD | NEW |