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_AST_H_ | 5 #ifndef V8_AST_AST_H_ |
| 6 #define V8_AST_AST_H_ | 6 #define V8_AST_AST_H_ |
| 7 | 7 |
| 8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
| 9 #include "src/ast/ast-value-factory.h" | 9 #include "src/ast/ast-value-factory.h" |
| 10 #include "src/ast/modules.h" | 10 #include "src/ast/modules.h" |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 358 virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle); | 358 virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle); |
| 359 uint16_t to_boolean_types() const { | 359 uint16_t to_boolean_types() const { |
| 360 return ToBooleanTypesField::decode(bit_field_); | 360 return ToBooleanTypesField::decode(bit_field_); |
| 361 } | 361 } |
| 362 | 362 |
| 363 void set_base_id(int id) { base_id_ = id; } | 363 void set_base_id(int id) { base_id_ = id; } |
| 364 static int num_ids() { return parent_num_ids() + 2; } | 364 static int num_ids() { return parent_num_ids() + 2; } |
| 365 BailoutId id() const { return BailoutId(local_id(0)); } | 365 BailoutId id() const { return BailoutId(local_id(0)); } |
| 366 TypeFeedbackId test_id() const { return TypeFeedbackId(local_id(1)); } | 366 TypeFeedbackId test_id() const { return TypeFeedbackId(local_id(1)); } |
| 367 | 367 |
| 368 // Parenthesized expressions in the form `( Expression )`. | |
| 369 void set_is_parenthesized() { | |
| 370 bit_field_ |= ParenthesizedField::encode(true); | |
|
adamk
2016/01/08 16:24:23
Please use ParenthesizedField::update() for consis
caitp (gmail)
2016/01/08 16:36:01
all of the other uses seem to use ::encode() when
| |
| 371 } | |
| 372 bool is_parenthesized() const { | |
| 373 return ParenthesizedField::decode(bit_field_); | |
| 374 } | |
| 375 | |
| 368 protected: | 376 protected: |
| 369 Expression(Zone* zone, int pos) | 377 Expression(Zone* zone, int pos) |
| 370 : AstNode(pos), | 378 : AstNode(pos), |
| 371 base_id_(BailoutId::None().ToInt()), | 379 base_id_(BailoutId::None().ToInt()), |
| 372 bounds_(Bounds::Unbounded()), | 380 bounds_(Bounds::Unbounded()), |
| 373 bit_field_(0) {} | 381 bit_field_(0) {} |
| 374 static int parent_num_ids() { return 0; } | 382 static int parent_num_ids() { return 0; } |
| 375 void set_to_boolean_types(uint16_t types) { | 383 void set_to_boolean_types(uint16_t types) { |
| 376 bit_field_ = ToBooleanTypesField::update(bit_field_, types); | 384 bit_field_ = ToBooleanTypesField::update(bit_field_, types); |
| 377 } | 385 } |
| 378 | 386 |
| 379 int base_id() const { | 387 int base_id() const { |
| 380 DCHECK(!BailoutId(base_id_).IsNone()); | 388 DCHECK(!BailoutId(base_id_).IsNone()); |
| 381 return base_id_; | 389 return base_id_; |
| 382 } | 390 } |
| 383 | 391 |
| 384 private: | 392 private: |
| 385 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 393 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
| 386 | 394 |
| 387 int base_id_; | 395 int base_id_; |
| 388 Bounds bounds_; | 396 Bounds bounds_; |
| 389 class ToBooleanTypesField : public BitField16<uint16_t, 0, 9> {}; | 397 class ToBooleanTypesField : public BitField16<uint16_t, 0, 9> {}; |
| 398 class ParenthesizedField | |
| 399 : public BitField16<bool, ToBooleanTypesField::kNext, 1> {}; | |
| 390 uint16_t bit_field_; | 400 uint16_t bit_field_; |
| 391 // Ends with 16-bit field; deriving classes in turn begin with | 401 // Ends with 16-bit field; deriving classes in turn begin with |
| 392 // 16-bit fields for optimum packing efficiency. | 402 // 16-bit fields for optimum packing efficiency. |
| 393 }; | 403 }; |
| 394 | 404 |
| 395 | 405 |
| 396 class BreakableStatement : public Statement { | 406 class BreakableStatement : public Statement { |
| 397 public: | 407 public: |
| 398 enum BreakableType { | 408 enum BreakableType { |
| 399 TARGET_FOR_ANONYMOUS, | 409 TARGET_FOR_ANONYMOUS, |
| (...skipping 3004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3404 // the parser-level zone. | 3414 // the parser-level zone. |
| 3405 Zone* parser_zone_; | 3415 Zone* parser_zone_; |
| 3406 AstValueFactory* ast_value_factory_; | 3416 AstValueFactory* ast_value_factory_; |
| 3407 }; | 3417 }; |
| 3408 | 3418 |
| 3409 | 3419 |
| 3410 } // namespace internal | 3420 } // namespace internal |
| 3411 } // namespace v8 | 3421 } // namespace v8 |
| 3412 | 3422 |
| 3413 #endif // V8_AST_AST_H_ | 3423 #endif // V8_AST_AST_H_ |
| OLD | NEW |