| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 type* As##type() { return Is##type() ? reinterpret_cast<type*>(this) : NULL; } | 219 type* As##type() { return Is##type() ? reinterpret_cast<type*>(this) : NULL; } |
| 220 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 220 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
| 221 #undef DECLARE_NODE_FUNCTIONS | 221 #undef DECLARE_NODE_FUNCTIONS |
| 222 | 222 |
| 223 virtual TargetCollector* AsTargetCollector() { return NULL; } | 223 virtual TargetCollector* AsTargetCollector() { return NULL; } |
| 224 virtual BreakableStatement* AsBreakableStatement() { return NULL; } | 224 virtual BreakableStatement* AsBreakableStatement() { return NULL; } |
| 225 virtual IterationStatement* AsIterationStatement() { return NULL; } | 225 virtual IterationStatement* AsIterationStatement() { return NULL; } |
| 226 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; } | 226 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; } |
| 227 | 227 |
| 228 protected: | 228 protected: |
| 229 static int GetNextId(Isolate* isolate) { | 229 static int GetNextId(Zone* zone) { |
| 230 return ReserveIdRange(isolate, 1); | 230 return ReserveIdRange(zone, 1); |
| 231 } | 231 } |
| 232 | 232 |
| 233 static int ReserveIdRange(Isolate* isolate, int n) { | 233 static int ReserveIdRange(Zone* zone, int n) { |
| 234 int tmp = isolate->ast_node_id(); | 234 int tmp = zone->isolate()->ast_node_id(); |
| 235 isolate->set_ast_node_id(tmp + n); | 235 zone->isolate()->set_ast_node_id(tmp + n); |
| 236 return tmp; | 236 return tmp; |
| 237 } | 237 } |
| 238 | 238 |
| 239 // Some nodes re-use bailout IDs for type feedback. | 239 // Some nodes re-use bailout IDs for type feedback. |
| 240 static TypeFeedbackId reuse(BailoutId id) { | 240 static TypeFeedbackId reuse(BailoutId id) { |
| 241 return TypeFeedbackId(id.ToInt()); | 241 return TypeFeedbackId(id.ToInt()); |
| 242 } | 242 } |
| 243 | 243 |
| 244 | 244 |
| 245 private: | 245 private: |
| 246 // Hidden to prevent accidental usage. It would have to load the | 246 // Hidden to prevent accidental usage. It would have to load the |
| 247 // current zone from the TLS. | 247 // current zone from the TLS. |
| 248 void* operator new(size_t size); | 248 void* operator new(size_t size); |
| 249 | 249 |
| 250 friend class CaseClause; // Generates AST IDs. | 250 friend class CaseClause; // Generates AST IDs. |
| 251 | 251 |
| 252 int position_; | 252 int position_; |
| 253 }; | 253 }; |
| 254 | 254 |
| 255 | 255 |
| 256 class Statement : public AstNode { | 256 class Statement : public AstNode { |
| 257 public: | 257 public: |
| 258 explicit Statement(int position) : AstNode(position) {} | 258 explicit Statement(Zone* zone, int position) : AstNode(position) {} |
| 259 | 259 |
| 260 bool IsEmpty() { return AsEmptyStatement() != NULL; } | 260 bool IsEmpty() { return AsEmptyStatement() != NULL; } |
| 261 virtual bool IsJump() const { return false; } | 261 virtual bool IsJump() const { return false; } |
| 262 }; | 262 }; |
| 263 | 263 |
| 264 | 264 |
| 265 class SmallMapList V8_FINAL { | 265 class SmallMapList V8_FINAL { |
| 266 public: | 266 public: |
| 267 SmallMapList() {} | 267 SmallMapList() {} |
| 268 SmallMapList(int capacity, Zone* zone) : list_(capacity, zone) {} | 268 SmallMapList(int capacity, Zone* zone) : list_(capacity, zone) {} |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 } | 370 } |
| 371 | 371 |
| 372 // TODO(rossberg): this should move to its own AST node eventually. | 372 // TODO(rossberg): this should move to its own AST node eventually. |
| 373 virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle); | 373 virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle); |
| 374 byte to_boolean_types() const { return to_boolean_types_; } | 374 byte to_boolean_types() const { return to_boolean_types_; } |
| 375 | 375 |
| 376 BailoutId id() const { return id_; } | 376 BailoutId id() const { return id_; } |
| 377 TypeFeedbackId test_id() const { return test_id_; } | 377 TypeFeedbackId test_id() const { return test_id_; } |
| 378 | 378 |
| 379 protected: | 379 protected: |
| 380 Expression(Isolate* isolate, int pos) | 380 Expression(Zone* zone, int pos) |
| 381 : AstNode(pos), | 381 : AstNode(pos), |
| 382 bounds_(Bounds::Unbounded(isolate)), | 382 bounds_(Bounds::Unbounded(zone)), |
| 383 id_(GetNextId(isolate)), | 383 id_(GetNextId(zone)), |
| 384 test_id_(GetNextId(isolate)) {} | 384 test_id_(GetNextId(zone)) {} |
| 385 void set_to_boolean_types(byte types) { to_boolean_types_ = types; } | 385 void set_to_boolean_types(byte types) { to_boolean_types_ = types; } |
| 386 | 386 |
| 387 private: | 387 private: |
| 388 Bounds bounds_; | 388 Bounds bounds_; |
| 389 byte to_boolean_types_; | 389 byte to_boolean_types_; |
| 390 | 390 |
| 391 const BailoutId id_; | 391 const BailoutId id_; |
| 392 const TypeFeedbackId test_id_; | 392 const TypeFeedbackId test_id_; |
| 393 }; | 393 }; |
| 394 | 394 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 415 // Testers. | 415 // Testers. |
| 416 bool is_target_for_anonymous() const { | 416 bool is_target_for_anonymous() const { |
| 417 return breakable_type_ == TARGET_FOR_ANONYMOUS; | 417 return breakable_type_ == TARGET_FOR_ANONYMOUS; |
| 418 } | 418 } |
| 419 | 419 |
| 420 BailoutId EntryId() const { return entry_id_; } | 420 BailoutId EntryId() const { return entry_id_; } |
| 421 BailoutId ExitId() const { return exit_id_; } | 421 BailoutId ExitId() const { return exit_id_; } |
| 422 | 422 |
| 423 protected: | 423 protected: |
| 424 BreakableStatement( | 424 BreakableStatement( |
| 425 Isolate* isolate, ZoneStringList* labels, | 425 Zone* zone, ZoneStringList* labels, |
| 426 BreakableType breakable_type, int position) | 426 BreakableType breakable_type, int position) |
| 427 : Statement(position), | 427 : Statement(zone, position), |
| 428 labels_(labels), | 428 labels_(labels), |
| 429 breakable_type_(breakable_type), | 429 breakable_type_(breakable_type), |
| 430 entry_id_(GetNextId(isolate)), | 430 entry_id_(GetNextId(zone)), |
| 431 exit_id_(GetNextId(isolate)) { | 431 exit_id_(GetNextId(zone)) { |
| 432 ASSERT(labels == NULL || labels->length() > 0); | 432 ASSERT(labels == NULL || labels->length() > 0); |
| 433 } | 433 } |
| 434 | 434 |
| 435 | 435 |
| 436 private: | 436 private: |
| 437 ZoneStringList* labels_; | 437 ZoneStringList* labels_; |
| 438 BreakableType breakable_type_; | 438 BreakableType breakable_type_; |
| 439 Label break_target_; | 439 Label break_target_; |
| 440 const BailoutId entry_id_; | 440 const BailoutId entry_id_; |
| 441 const BailoutId exit_id_; | 441 const BailoutId exit_id_; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 455 | 455 |
| 456 virtual bool IsJump() const V8_OVERRIDE { | 456 virtual bool IsJump() const V8_OVERRIDE { |
| 457 return !statements_.is_empty() && statements_.last()->IsJump() | 457 return !statements_.is_empty() && statements_.last()->IsJump() |
| 458 && labels() == NULL; // Good enough as an approximation... | 458 && labels() == NULL; // Good enough as an approximation... |
| 459 } | 459 } |
| 460 | 460 |
| 461 Scope* scope() const { return scope_; } | 461 Scope* scope() const { return scope_; } |
| 462 void set_scope(Scope* scope) { scope_ = scope; } | 462 void set_scope(Scope* scope) { scope_ = scope; } |
| 463 | 463 |
| 464 protected: | 464 protected: |
| 465 Block(Isolate* isolate, | 465 Block(Zone* zone, |
| 466 ZoneStringList* labels, | 466 ZoneStringList* labels, |
| 467 int capacity, | 467 int capacity, |
| 468 bool is_initializer_block, | 468 bool is_initializer_block, |
| 469 int pos, | 469 int pos) |
| 470 Zone* zone) | 470 : BreakableStatement(zone, labels, TARGET_FOR_NAMED_ONLY, pos), |
| 471 : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY, pos), | |
| 472 statements_(capacity, zone), | 471 statements_(capacity, zone), |
| 473 is_initializer_block_(is_initializer_block), | 472 is_initializer_block_(is_initializer_block), |
| 474 scope_(NULL) { | 473 scope_(NULL) { |
| 475 } | 474 } |
| 476 | 475 |
| 477 private: | 476 private: |
| 478 ZoneList<Statement*> statements_; | 477 ZoneList<Statement*> statements_; |
| 479 bool is_initializer_block_; | 478 bool is_initializer_block_; |
| 480 Scope* scope_; | 479 Scope* scope_; |
| 481 }; | 480 }; |
| 482 | 481 |
| 483 | 482 |
| 484 class Declaration : public AstNode { | 483 class Declaration : public AstNode { |
| 485 public: | 484 public: |
| 486 VariableProxy* proxy() const { return proxy_; } | 485 VariableProxy* proxy() const { return proxy_; } |
| 487 VariableMode mode() const { return mode_; } | 486 VariableMode mode() const { return mode_; } |
| 488 Scope* scope() const { return scope_; } | 487 Scope* scope() const { return scope_; } |
| 489 virtual InitializationFlag initialization() const = 0; | 488 virtual InitializationFlag initialization() const = 0; |
| 490 virtual bool IsInlineable() const; | 489 virtual bool IsInlineable() const; |
| 491 | 490 |
| 492 protected: | 491 protected: |
| 493 Declaration(VariableProxy* proxy, | 492 Declaration(Zone* zone, |
| 493 VariableProxy* proxy, |
| 494 VariableMode mode, | 494 VariableMode mode, |
| 495 Scope* scope, | 495 Scope* scope, |
| 496 int pos) | 496 int pos) |
| 497 : AstNode(pos), | 497 : AstNode(pos), |
| 498 proxy_(proxy), | 498 proxy_(proxy), |
| 499 mode_(mode), | 499 mode_(mode), |
| 500 scope_(scope) { | 500 scope_(scope) { |
| 501 ASSERT(IsDeclaredVariableMode(mode)); | 501 ASSERT(IsDeclaredVariableMode(mode)); |
| 502 } | 502 } |
| 503 | 503 |
| 504 private: | 504 private: |
| 505 VariableProxy* proxy_; | 505 VariableProxy* proxy_; |
| 506 VariableMode mode_; | 506 VariableMode mode_; |
| 507 | 507 |
| 508 // Nested scope from which the declaration originated. | 508 // Nested scope from which the declaration originated. |
| 509 Scope* scope_; | 509 Scope* scope_; |
| 510 }; | 510 }; |
| 511 | 511 |
| 512 | 512 |
| 513 class VariableDeclaration V8_FINAL : public Declaration { | 513 class VariableDeclaration V8_FINAL : public Declaration { |
| 514 public: | 514 public: |
| 515 DECLARE_NODE_TYPE(VariableDeclaration) | 515 DECLARE_NODE_TYPE(VariableDeclaration) |
| 516 | 516 |
| 517 virtual InitializationFlag initialization() const V8_OVERRIDE { | 517 virtual InitializationFlag initialization() const V8_OVERRIDE { |
| 518 return mode() == VAR ? kCreatedInitialized : kNeedsInitialization; | 518 return mode() == VAR ? kCreatedInitialized : kNeedsInitialization; |
| 519 } | 519 } |
| 520 | 520 |
| 521 protected: | 521 protected: |
| 522 VariableDeclaration(VariableProxy* proxy, | 522 VariableDeclaration(Zone* zone, |
| 523 VariableProxy* proxy, |
| 523 VariableMode mode, | 524 VariableMode mode, |
| 524 Scope* scope, | 525 Scope* scope, |
| 525 int pos) | 526 int pos) |
| 526 : Declaration(proxy, mode, scope, pos) { | 527 : Declaration(zone, proxy, mode, scope, pos) { |
| 527 } | 528 } |
| 528 }; | 529 }; |
| 529 | 530 |
| 530 | 531 |
| 531 class FunctionDeclaration V8_FINAL : public Declaration { | 532 class FunctionDeclaration V8_FINAL : public Declaration { |
| 532 public: | 533 public: |
| 533 DECLARE_NODE_TYPE(FunctionDeclaration) | 534 DECLARE_NODE_TYPE(FunctionDeclaration) |
| 534 | 535 |
| 535 FunctionLiteral* fun() const { return fun_; } | 536 FunctionLiteral* fun() const { return fun_; } |
| 536 virtual InitializationFlag initialization() const V8_OVERRIDE { | 537 virtual InitializationFlag initialization() const V8_OVERRIDE { |
| 537 return kCreatedInitialized; | 538 return kCreatedInitialized; |
| 538 } | 539 } |
| 539 virtual bool IsInlineable() const V8_OVERRIDE; | 540 virtual bool IsInlineable() const V8_OVERRIDE; |
| 540 | 541 |
| 541 protected: | 542 protected: |
| 542 FunctionDeclaration(VariableProxy* proxy, | 543 FunctionDeclaration(Zone* zone, |
| 544 VariableProxy* proxy, |
| 543 VariableMode mode, | 545 VariableMode mode, |
| 544 FunctionLiteral* fun, | 546 FunctionLiteral* fun, |
| 545 Scope* scope, | 547 Scope* scope, |
| 546 int pos) | 548 int pos) |
| 547 : Declaration(proxy, mode, scope, pos), | 549 : Declaration(zone, proxy, mode, scope, pos), |
| 548 fun_(fun) { | 550 fun_(fun) { |
| 549 // At the moment there are no "const functions" in JavaScript... | 551 // At the moment there are no "const functions" in JavaScript... |
| 550 ASSERT(mode == VAR || mode == LET); | 552 ASSERT(mode == VAR || mode == LET); |
| 551 ASSERT(fun != NULL); | 553 ASSERT(fun != NULL); |
| 552 } | 554 } |
| 553 | 555 |
| 554 private: | 556 private: |
| 555 FunctionLiteral* fun_; | 557 FunctionLiteral* fun_; |
| 556 }; | 558 }; |
| 557 | 559 |
| 558 | 560 |
| 559 class ModuleDeclaration V8_FINAL : public Declaration { | 561 class ModuleDeclaration V8_FINAL : public Declaration { |
| 560 public: | 562 public: |
| 561 DECLARE_NODE_TYPE(ModuleDeclaration) | 563 DECLARE_NODE_TYPE(ModuleDeclaration) |
| 562 | 564 |
| 563 Module* module() const { return module_; } | 565 Module* module() const { return module_; } |
| 564 virtual InitializationFlag initialization() const V8_OVERRIDE { | 566 virtual InitializationFlag initialization() const V8_OVERRIDE { |
| 565 return kCreatedInitialized; | 567 return kCreatedInitialized; |
| 566 } | 568 } |
| 567 | 569 |
| 568 protected: | 570 protected: |
| 569 ModuleDeclaration(VariableProxy* proxy, | 571 ModuleDeclaration(Zone* zone, |
| 572 VariableProxy* proxy, |
| 570 Module* module, | 573 Module* module, |
| 571 Scope* scope, | 574 Scope* scope, |
| 572 int pos) | 575 int pos) |
| 573 : Declaration(proxy, MODULE, scope, pos), | 576 : Declaration(zone, proxy, MODULE, scope, pos), |
| 574 module_(module) { | 577 module_(module) { |
| 575 } | 578 } |
| 576 | 579 |
| 577 private: | 580 private: |
| 578 Module* module_; | 581 Module* module_; |
| 579 }; | 582 }; |
| 580 | 583 |
| 581 | 584 |
| 582 class ImportDeclaration V8_FINAL : public Declaration { | 585 class ImportDeclaration V8_FINAL : public Declaration { |
| 583 public: | 586 public: |
| 584 DECLARE_NODE_TYPE(ImportDeclaration) | 587 DECLARE_NODE_TYPE(ImportDeclaration) |
| 585 | 588 |
| 586 Module* module() const { return module_; } | 589 Module* module() const { return module_; } |
| 587 virtual InitializationFlag initialization() const V8_OVERRIDE { | 590 virtual InitializationFlag initialization() const V8_OVERRIDE { |
| 588 return kCreatedInitialized; | 591 return kCreatedInitialized; |
| 589 } | 592 } |
| 590 | 593 |
| 591 protected: | 594 protected: |
| 592 ImportDeclaration(VariableProxy* proxy, | 595 ImportDeclaration(Zone* zone, |
| 596 VariableProxy* proxy, |
| 593 Module* module, | 597 Module* module, |
| 594 Scope* scope, | 598 Scope* scope, |
| 595 int pos) | 599 int pos) |
| 596 : Declaration(proxy, LET, scope, pos), | 600 : Declaration(zone, proxy, LET, scope, pos), |
| 597 module_(module) { | 601 module_(module) { |
| 598 } | 602 } |
| 599 | 603 |
| 600 private: | 604 private: |
| 601 Module* module_; | 605 Module* module_; |
| 602 }; | 606 }; |
| 603 | 607 |
| 604 | 608 |
| 605 class ExportDeclaration V8_FINAL : public Declaration { | 609 class ExportDeclaration V8_FINAL : public Declaration { |
| 606 public: | 610 public: |
| 607 DECLARE_NODE_TYPE(ExportDeclaration) | 611 DECLARE_NODE_TYPE(ExportDeclaration) |
| 608 | 612 |
| 609 virtual InitializationFlag initialization() const V8_OVERRIDE { | 613 virtual InitializationFlag initialization() const V8_OVERRIDE { |
| 610 return kCreatedInitialized; | 614 return kCreatedInitialized; |
| 611 } | 615 } |
| 612 | 616 |
| 613 protected: | 617 protected: |
| 614 ExportDeclaration(VariableProxy* proxy, Scope* scope, int pos) | 618 ExportDeclaration(Zone* zone, VariableProxy* proxy, Scope* scope, int pos) |
| 615 : Declaration(proxy, LET, scope, pos) {} | 619 : Declaration(zone, proxy, LET, scope, pos) {} |
| 616 }; | 620 }; |
| 617 | 621 |
| 618 | 622 |
| 619 class Module : public AstNode { | 623 class Module : public AstNode { |
| 620 public: | 624 public: |
| 621 Interface* interface() const { return interface_; } | 625 Interface* interface() const { return interface_; } |
| 622 Block* body() const { return body_; } | 626 Block* body() const { return body_; } |
| 623 | 627 |
| 624 protected: | 628 protected: |
| 625 Module(Zone* zone, int pos) | 629 Module(Zone* zone, int pos) |
| 626 : AstNode(pos), | 630 : AstNode(pos), |
| 627 interface_(Interface::NewModule(zone)), | 631 interface_(Interface::NewModule(zone)), |
| 628 body_(NULL) {} | 632 body_(NULL) {} |
| 629 Module(Interface* interface, int pos, Block* body = NULL) | 633 Module(Zone* zone, Interface* interface, int pos, Block* body = NULL) |
| 630 : AstNode(pos), | 634 : AstNode(pos), |
| 631 interface_(interface), | 635 interface_(interface), |
| 632 body_(body) {} | 636 body_(body) {} |
| 633 | 637 |
| 634 private: | 638 private: |
| 635 Interface* interface_; | 639 Interface* interface_; |
| 636 Block* body_; | 640 Block* body_; |
| 637 }; | 641 }; |
| 638 | 642 |
| 639 | 643 |
| 640 class ModuleLiteral V8_FINAL : public Module { | 644 class ModuleLiteral V8_FINAL : public Module { |
| 641 public: | 645 public: |
| 642 DECLARE_NODE_TYPE(ModuleLiteral) | 646 DECLARE_NODE_TYPE(ModuleLiteral) |
| 643 | 647 |
| 644 protected: | 648 protected: |
| 645 ModuleLiteral(Block* body, Interface* interface, int pos) | 649 ModuleLiteral(Zone* zone, Block* body, Interface* interface, int pos) |
| 646 : Module(interface, pos, body) {} | 650 : Module(zone, interface, pos, body) {} |
| 647 }; | 651 }; |
| 648 | 652 |
| 649 | 653 |
| 650 class ModuleVariable V8_FINAL : public Module { | 654 class ModuleVariable V8_FINAL : public Module { |
| 651 public: | 655 public: |
| 652 DECLARE_NODE_TYPE(ModuleVariable) | 656 DECLARE_NODE_TYPE(ModuleVariable) |
| 653 | 657 |
| 654 VariableProxy* proxy() const { return proxy_; } | 658 VariableProxy* proxy() const { return proxy_; } |
| 655 | 659 |
| 656 protected: | 660 protected: |
| 657 inline ModuleVariable(VariableProxy* proxy, int pos); | 661 inline ModuleVariable(Zone* zone, VariableProxy* proxy, int pos); |
| 658 | 662 |
| 659 private: | 663 private: |
| 660 VariableProxy* proxy_; | 664 VariableProxy* proxy_; |
| 661 }; | 665 }; |
| 662 | 666 |
| 663 | 667 |
| 664 class ModulePath V8_FINAL : public Module { | 668 class ModulePath V8_FINAL : public Module { |
| 665 public: | 669 public: |
| 666 DECLARE_NODE_TYPE(ModulePath) | 670 DECLARE_NODE_TYPE(ModulePath) |
| 667 | 671 |
| 668 Module* module() const { return module_; } | 672 Module* module() const { return module_; } |
| 669 Handle<String> name() const { return name_; } | 673 Handle<String> name() const { return name_; } |
| 670 | 674 |
| 671 protected: | 675 protected: |
| 672 ModulePath(Module* module, Handle<String> name, Zone* zone, int pos) | 676 ModulePath(Zone* zone, Module* module, Handle<String> name, int pos) |
| 673 : Module(zone, pos), | 677 : Module(zone, pos), |
| 674 module_(module), | 678 module_(module), |
| 675 name_(name) { | 679 name_(name) { |
| 676 } | 680 } |
| 677 | 681 |
| 678 private: | 682 private: |
| 679 Module* module_; | 683 Module* module_; |
| 680 Handle<String> name_; | 684 Handle<String> name_; |
| 681 }; | 685 }; |
| 682 | 686 |
| 683 | 687 |
| 684 class ModuleUrl V8_FINAL : public Module { | 688 class ModuleUrl V8_FINAL : public Module { |
| 685 public: | 689 public: |
| 686 DECLARE_NODE_TYPE(ModuleUrl) | 690 DECLARE_NODE_TYPE(ModuleUrl) |
| 687 | 691 |
| 688 Handle<String> url() const { return url_; } | 692 Handle<String> url() const { return url_; } |
| 689 | 693 |
| 690 protected: | 694 protected: |
| 691 ModuleUrl(Handle<String> url, Zone* zone, int pos) | 695 ModuleUrl(Zone* zone, Handle<String> url, int pos) |
| 692 : Module(zone, pos), url_(url) { | 696 : Module(zone, pos), url_(url) { |
| 693 } | 697 } |
| 694 | 698 |
| 695 private: | 699 private: |
| 696 Handle<String> url_; | 700 Handle<String> url_; |
| 697 }; | 701 }; |
| 698 | 702 |
| 699 | 703 |
| 700 class ModuleStatement V8_FINAL : public Statement { | 704 class ModuleStatement V8_FINAL : public Statement { |
| 701 public: | 705 public: |
| 702 DECLARE_NODE_TYPE(ModuleStatement) | 706 DECLARE_NODE_TYPE(ModuleStatement) |
| 703 | 707 |
| 704 VariableProxy* proxy() const { return proxy_; } | 708 VariableProxy* proxy() const { return proxy_; } |
| 705 Block* body() const { return body_; } | 709 Block* body() const { return body_; } |
| 706 | 710 |
| 707 protected: | 711 protected: |
| 708 ModuleStatement(VariableProxy* proxy, Block* body, int pos) | 712 ModuleStatement(Zone* zone, VariableProxy* proxy, Block* body, int pos) |
| 709 : Statement(pos), | 713 : Statement(zone, pos), |
| 710 proxy_(proxy), | 714 proxy_(proxy), |
| 711 body_(body) { | 715 body_(body) { |
| 712 } | 716 } |
| 713 | 717 |
| 714 private: | 718 private: |
| 715 VariableProxy* proxy_; | 719 VariableProxy* proxy_; |
| 716 Block* body_; | 720 Block* body_; |
| 717 }; | 721 }; |
| 718 | 722 |
| 719 | 723 |
| 720 class IterationStatement : public BreakableStatement { | 724 class IterationStatement : public BreakableStatement { |
| 721 public: | 725 public: |
| 722 // Type testing & conversion. | 726 // Type testing & conversion. |
| 723 virtual IterationStatement* AsIterationStatement() V8_FINAL V8_OVERRIDE { | 727 virtual IterationStatement* AsIterationStatement() V8_FINAL V8_OVERRIDE { |
| 724 return this; | 728 return this; |
| 725 } | 729 } |
| 726 | 730 |
| 727 Statement* body() const { return body_; } | 731 Statement* body() const { return body_; } |
| 728 | 732 |
| 729 BailoutId OsrEntryId() const { return osr_entry_id_; } | 733 BailoutId OsrEntryId() const { return osr_entry_id_; } |
| 730 virtual BailoutId ContinueId() const = 0; | 734 virtual BailoutId ContinueId() const = 0; |
| 731 virtual BailoutId StackCheckId() const = 0; | 735 virtual BailoutId StackCheckId() const = 0; |
| 732 | 736 |
| 733 // Code generation | 737 // Code generation |
| 734 Label* continue_target() { return &continue_target_; } | 738 Label* continue_target() { return &continue_target_; } |
| 735 | 739 |
| 736 protected: | 740 protected: |
| 737 IterationStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 741 IterationStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 738 : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS, pos), | 742 : BreakableStatement(zone, labels, TARGET_FOR_ANONYMOUS, pos), |
| 739 body_(NULL), | 743 body_(NULL), |
| 740 osr_entry_id_(GetNextId(isolate)) { | 744 osr_entry_id_(GetNextId(zone)) { |
| 741 } | 745 } |
| 742 | 746 |
| 743 void Initialize(Statement* body) { | 747 void Initialize(Statement* body) { |
| 744 body_ = body; | 748 body_ = body; |
| 745 } | 749 } |
| 746 | 750 |
| 747 private: | 751 private: |
| 748 Statement* body_; | 752 Statement* body_; |
| 749 Label continue_target_; | 753 Label continue_target_; |
| 750 | 754 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 761 cond_ = cond; | 765 cond_ = cond; |
| 762 } | 766 } |
| 763 | 767 |
| 764 Expression* cond() const { return cond_; } | 768 Expression* cond() const { return cond_; } |
| 765 | 769 |
| 766 virtual BailoutId ContinueId() const V8_OVERRIDE { return continue_id_; } | 770 virtual BailoutId ContinueId() const V8_OVERRIDE { return continue_id_; } |
| 767 virtual BailoutId StackCheckId() const V8_OVERRIDE { return back_edge_id_; } | 771 virtual BailoutId StackCheckId() const V8_OVERRIDE { return back_edge_id_; } |
| 768 BailoutId BackEdgeId() const { return back_edge_id_; } | 772 BailoutId BackEdgeId() const { return back_edge_id_; } |
| 769 | 773 |
| 770 protected: | 774 protected: |
| 771 DoWhileStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 775 DoWhileStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 772 : IterationStatement(isolate, labels, pos), | 776 : IterationStatement(zone, labels, pos), |
| 773 cond_(NULL), | 777 cond_(NULL), |
| 774 continue_id_(GetNextId(isolate)), | 778 continue_id_(GetNextId(zone)), |
| 775 back_edge_id_(GetNextId(isolate)) { | 779 back_edge_id_(GetNextId(zone)) { |
| 776 } | 780 } |
| 777 | 781 |
| 778 private: | 782 private: |
| 779 Expression* cond_; | 783 Expression* cond_; |
| 780 | 784 |
| 781 const BailoutId continue_id_; | 785 const BailoutId continue_id_; |
| 782 const BailoutId back_edge_id_; | 786 const BailoutId back_edge_id_; |
| 783 }; | 787 }; |
| 784 | 788 |
| 785 | 789 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 798 } | 802 } |
| 799 void set_may_have_function_literal(bool value) { | 803 void set_may_have_function_literal(bool value) { |
| 800 may_have_function_literal_ = value; | 804 may_have_function_literal_ = value; |
| 801 } | 805 } |
| 802 | 806 |
| 803 virtual BailoutId ContinueId() const V8_OVERRIDE { return EntryId(); } | 807 virtual BailoutId ContinueId() const V8_OVERRIDE { return EntryId(); } |
| 804 virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; } | 808 virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; } |
| 805 BailoutId BodyId() const { return body_id_; } | 809 BailoutId BodyId() const { return body_id_; } |
| 806 | 810 |
| 807 protected: | 811 protected: |
| 808 WhileStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 812 WhileStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 809 : IterationStatement(isolate, labels, pos), | 813 : IterationStatement(zone, labels, pos), |
| 810 cond_(NULL), | 814 cond_(NULL), |
| 811 may_have_function_literal_(true), | 815 may_have_function_literal_(true), |
| 812 body_id_(GetNextId(isolate)) { | 816 body_id_(GetNextId(zone)) { |
| 813 } | 817 } |
| 814 | 818 |
| 815 private: | 819 private: |
| 816 Expression* cond_; | 820 Expression* cond_; |
| 817 | 821 |
| 818 // True if there is a function literal subexpression in the condition. | 822 // True if there is a function literal subexpression in the condition. |
| 819 bool may_have_function_literal_; | 823 bool may_have_function_literal_; |
| 820 | 824 |
| 821 const BailoutId body_id_; | 825 const BailoutId body_id_; |
| 822 }; | 826 }; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 849 | 853 |
| 850 virtual BailoutId ContinueId() const V8_OVERRIDE { return continue_id_; } | 854 virtual BailoutId ContinueId() const V8_OVERRIDE { return continue_id_; } |
| 851 virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; } | 855 virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; } |
| 852 BailoutId BodyId() const { return body_id_; } | 856 BailoutId BodyId() const { return body_id_; } |
| 853 | 857 |
| 854 bool is_fast_smi_loop() { return loop_variable_ != NULL; } | 858 bool is_fast_smi_loop() { return loop_variable_ != NULL; } |
| 855 Variable* loop_variable() { return loop_variable_; } | 859 Variable* loop_variable() { return loop_variable_; } |
| 856 void set_loop_variable(Variable* var) { loop_variable_ = var; } | 860 void set_loop_variable(Variable* var) { loop_variable_ = var; } |
| 857 | 861 |
| 858 protected: | 862 protected: |
| 859 ForStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 863 ForStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 860 : IterationStatement(isolate, labels, pos), | 864 : IterationStatement(zone, labels, pos), |
| 861 init_(NULL), | 865 init_(NULL), |
| 862 cond_(NULL), | 866 cond_(NULL), |
| 863 next_(NULL), | 867 next_(NULL), |
| 864 may_have_function_literal_(true), | 868 may_have_function_literal_(true), |
| 865 loop_variable_(NULL), | 869 loop_variable_(NULL), |
| 866 continue_id_(GetNextId(isolate)), | 870 continue_id_(GetNextId(zone)), |
| 867 body_id_(GetNextId(isolate)) { | 871 body_id_(GetNextId(zone)) { |
| 868 } | 872 } |
| 869 | 873 |
| 870 private: | 874 private: |
| 871 Statement* init_; | 875 Statement* init_; |
| 872 Expression* cond_; | 876 Expression* cond_; |
| 873 Statement* next_; | 877 Statement* next_; |
| 874 | 878 |
| 875 // True if there is a function literal subexpression in the condition. | 879 // True if there is a function literal subexpression in the condition. |
| 876 bool may_have_function_literal_; | 880 bool may_have_function_literal_; |
| 877 Variable* loop_variable_; | 881 Variable* loop_variable_; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 891 void Initialize(Expression* each, Expression* subject, Statement* body) { | 895 void Initialize(Expression* each, Expression* subject, Statement* body) { |
| 892 IterationStatement::Initialize(body); | 896 IterationStatement::Initialize(body); |
| 893 each_ = each; | 897 each_ = each; |
| 894 subject_ = subject; | 898 subject_ = subject; |
| 895 } | 899 } |
| 896 | 900 |
| 897 Expression* each() const { return each_; } | 901 Expression* each() const { return each_; } |
| 898 Expression* subject() const { return subject_; } | 902 Expression* subject() const { return subject_; } |
| 899 | 903 |
| 900 protected: | 904 protected: |
| 901 ForEachStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 905 ForEachStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 902 : IterationStatement(isolate, labels, pos), | 906 : IterationStatement(zone, labels, pos), |
| 903 each_(NULL), | 907 each_(NULL), |
| 904 subject_(NULL) { | 908 subject_(NULL) { |
| 905 } | 909 } |
| 906 | 910 |
| 907 private: | 911 private: |
| 908 Expression* each_; | 912 Expression* each_; |
| 909 Expression* subject_; | 913 Expression* subject_; |
| 910 }; | 914 }; |
| 911 | 915 |
| 912 | 916 |
| 913 class ForInStatement V8_FINAL : public ForEachStatement { | 917 class ForInStatement V8_FINAL : public ForEachStatement { |
| 914 public: | 918 public: |
| 915 DECLARE_NODE_TYPE(ForInStatement) | 919 DECLARE_NODE_TYPE(ForInStatement) |
| 916 | 920 |
| 917 Expression* enumerable() const { | 921 Expression* enumerable() const { |
| 918 return subject(); | 922 return subject(); |
| 919 } | 923 } |
| 920 | 924 |
| 921 TypeFeedbackId ForInFeedbackId() const { return reuse(PrepareId()); } | 925 TypeFeedbackId ForInFeedbackId() const { return reuse(PrepareId()); } |
| 922 enum ForInType { FAST_FOR_IN, SLOW_FOR_IN }; | 926 enum ForInType { FAST_FOR_IN, SLOW_FOR_IN }; |
| 923 ForInType for_in_type() const { return for_in_type_; } | 927 ForInType for_in_type() const { return for_in_type_; } |
| 924 void set_for_in_type(ForInType type) { for_in_type_ = type; } | 928 void set_for_in_type(ForInType type) { for_in_type_ = type; } |
| 925 | 929 |
| 926 BailoutId BodyId() const { return body_id_; } | 930 BailoutId BodyId() const { return body_id_; } |
| 927 BailoutId PrepareId() const { return prepare_id_; } | 931 BailoutId PrepareId() const { return prepare_id_; } |
| 928 virtual BailoutId ContinueId() const V8_OVERRIDE { return EntryId(); } | 932 virtual BailoutId ContinueId() const V8_OVERRIDE { return EntryId(); } |
| 929 virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; } | 933 virtual BailoutId StackCheckId() const V8_OVERRIDE { return body_id_; } |
| 930 | 934 |
| 931 protected: | 935 protected: |
| 932 ForInStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 936 ForInStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 933 : ForEachStatement(isolate, labels, pos), | 937 : ForEachStatement(zone, labels, pos), |
| 934 for_in_type_(SLOW_FOR_IN), | 938 for_in_type_(SLOW_FOR_IN), |
| 935 body_id_(GetNextId(isolate)), | 939 body_id_(GetNextId(zone)), |
| 936 prepare_id_(GetNextId(isolate)) { | 940 prepare_id_(GetNextId(zone)) { |
| 937 } | 941 } |
| 938 | 942 |
| 939 ForInType for_in_type_; | 943 ForInType for_in_type_; |
| 940 const BailoutId body_id_; | 944 const BailoutId body_id_; |
| 941 const BailoutId prepare_id_; | 945 const BailoutId prepare_id_; |
| 942 }; | 946 }; |
| 943 | 947 |
| 944 | 948 |
| 945 class ForOfStatement V8_FINAL : public ForEachStatement { | 949 class ForOfStatement V8_FINAL : public ForEachStatement { |
| 946 public: | 950 public: |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 Expression* assign_each() const { | 987 Expression* assign_each() const { |
| 984 return assign_each_; | 988 return assign_each_; |
| 985 } | 989 } |
| 986 | 990 |
| 987 virtual BailoutId ContinueId() const V8_OVERRIDE { return EntryId(); } | 991 virtual BailoutId ContinueId() const V8_OVERRIDE { return EntryId(); } |
| 988 virtual BailoutId StackCheckId() const V8_OVERRIDE { return BackEdgeId(); } | 992 virtual BailoutId StackCheckId() const V8_OVERRIDE { return BackEdgeId(); } |
| 989 | 993 |
| 990 BailoutId BackEdgeId() const { return back_edge_id_; } | 994 BailoutId BackEdgeId() const { return back_edge_id_; } |
| 991 | 995 |
| 992 protected: | 996 protected: |
| 993 ForOfStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 997 ForOfStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 994 : ForEachStatement(isolate, labels, pos), | 998 : ForEachStatement(zone, labels, pos), |
| 995 assign_iterator_(NULL), | 999 assign_iterator_(NULL), |
| 996 next_result_(NULL), | 1000 next_result_(NULL), |
| 997 result_done_(NULL), | 1001 result_done_(NULL), |
| 998 assign_each_(NULL), | 1002 assign_each_(NULL), |
| 999 back_edge_id_(GetNextId(isolate)) { | 1003 back_edge_id_(GetNextId(zone)) { |
| 1000 } | 1004 } |
| 1001 | 1005 |
| 1002 Expression* assign_iterator_; | 1006 Expression* assign_iterator_; |
| 1003 Expression* next_result_; | 1007 Expression* next_result_; |
| 1004 Expression* result_done_; | 1008 Expression* result_done_; |
| 1005 Expression* assign_each_; | 1009 Expression* assign_each_; |
| 1006 const BailoutId back_edge_id_; | 1010 const BailoutId back_edge_id_; |
| 1007 }; | 1011 }; |
| 1008 | 1012 |
| 1009 | 1013 |
| 1010 class ExpressionStatement V8_FINAL : public Statement { | 1014 class ExpressionStatement V8_FINAL : public Statement { |
| 1011 public: | 1015 public: |
| 1012 DECLARE_NODE_TYPE(ExpressionStatement) | 1016 DECLARE_NODE_TYPE(ExpressionStatement) |
| 1013 | 1017 |
| 1014 void set_expression(Expression* e) { expression_ = e; } | 1018 void set_expression(Expression* e) { expression_ = e; } |
| 1015 Expression* expression() const { return expression_; } | 1019 Expression* expression() const { return expression_; } |
| 1016 virtual bool IsJump() const V8_OVERRIDE { return expression_->IsThrow(); } | 1020 virtual bool IsJump() const V8_OVERRIDE { return expression_->IsThrow(); } |
| 1017 | 1021 |
| 1018 protected: | 1022 protected: |
| 1019 ExpressionStatement(Expression* expression, int pos) | 1023 ExpressionStatement(Zone* zone, Expression* expression, int pos) |
| 1020 : Statement(pos), expression_(expression) { } | 1024 : Statement(zone, pos), expression_(expression) { } |
| 1021 | 1025 |
| 1022 private: | 1026 private: |
| 1023 Expression* expression_; | 1027 Expression* expression_; |
| 1024 }; | 1028 }; |
| 1025 | 1029 |
| 1026 | 1030 |
| 1027 class JumpStatement : public Statement { | 1031 class JumpStatement : public Statement { |
| 1028 public: | 1032 public: |
| 1029 virtual bool IsJump() const V8_FINAL V8_OVERRIDE { return true; } | 1033 virtual bool IsJump() const V8_FINAL V8_OVERRIDE { return true; } |
| 1030 | 1034 |
| 1031 protected: | 1035 protected: |
| 1032 explicit JumpStatement(int pos) : Statement(pos) {} | 1036 explicit JumpStatement(Zone* zone, int pos) : Statement(zone, pos) {} |
| 1033 }; | 1037 }; |
| 1034 | 1038 |
| 1035 | 1039 |
| 1036 class ContinueStatement V8_FINAL : public JumpStatement { | 1040 class ContinueStatement V8_FINAL : public JumpStatement { |
| 1037 public: | 1041 public: |
| 1038 DECLARE_NODE_TYPE(ContinueStatement) | 1042 DECLARE_NODE_TYPE(ContinueStatement) |
| 1039 | 1043 |
| 1040 IterationStatement* target() const { return target_; } | 1044 IterationStatement* target() const { return target_; } |
| 1041 | 1045 |
| 1042 protected: | 1046 protected: |
| 1043 explicit ContinueStatement(IterationStatement* target, int pos) | 1047 explicit ContinueStatement(Zone* zone, IterationStatement* target, int pos) |
| 1044 : JumpStatement(pos), target_(target) { } | 1048 : JumpStatement(zone, pos), target_(target) { } |
| 1045 | 1049 |
| 1046 private: | 1050 private: |
| 1047 IterationStatement* target_; | 1051 IterationStatement* target_; |
| 1048 }; | 1052 }; |
| 1049 | 1053 |
| 1050 | 1054 |
| 1051 class BreakStatement V8_FINAL : public JumpStatement { | 1055 class BreakStatement V8_FINAL : public JumpStatement { |
| 1052 public: | 1056 public: |
| 1053 DECLARE_NODE_TYPE(BreakStatement) | 1057 DECLARE_NODE_TYPE(BreakStatement) |
| 1054 | 1058 |
| 1055 BreakableStatement* target() const { return target_; } | 1059 BreakableStatement* target() const { return target_; } |
| 1056 | 1060 |
| 1057 protected: | 1061 protected: |
| 1058 explicit BreakStatement(BreakableStatement* target, int pos) | 1062 explicit BreakStatement(Zone* zone, BreakableStatement* target, int pos) |
| 1059 : JumpStatement(pos), target_(target) { } | 1063 : JumpStatement(zone, pos), target_(target) { } |
| 1060 | 1064 |
| 1061 private: | 1065 private: |
| 1062 BreakableStatement* target_; | 1066 BreakableStatement* target_; |
| 1063 }; | 1067 }; |
| 1064 | 1068 |
| 1065 | 1069 |
| 1066 class ReturnStatement V8_FINAL : public JumpStatement { | 1070 class ReturnStatement V8_FINAL : public JumpStatement { |
| 1067 public: | 1071 public: |
| 1068 DECLARE_NODE_TYPE(ReturnStatement) | 1072 DECLARE_NODE_TYPE(ReturnStatement) |
| 1069 | 1073 |
| 1070 Expression* expression() const { return expression_; } | 1074 Expression* expression() const { return expression_; } |
| 1071 | 1075 |
| 1072 protected: | 1076 protected: |
| 1073 explicit ReturnStatement(Expression* expression, int pos) | 1077 explicit ReturnStatement(Zone* zone, Expression* expression, int pos) |
| 1074 : JumpStatement(pos), expression_(expression) { } | 1078 : JumpStatement(zone, pos), expression_(expression) { } |
| 1075 | 1079 |
| 1076 private: | 1080 private: |
| 1077 Expression* expression_; | 1081 Expression* expression_; |
| 1078 }; | 1082 }; |
| 1079 | 1083 |
| 1080 | 1084 |
| 1081 class WithStatement V8_FINAL : public Statement { | 1085 class WithStatement V8_FINAL : public Statement { |
| 1082 public: | 1086 public: |
| 1083 DECLARE_NODE_TYPE(WithStatement) | 1087 DECLARE_NODE_TYPE(WithStatement) |
| 1084 | 1088 |
| 1085 Scope* scope() { return scope_; } | 1089 Scope* scope() { return scope_; } |
| 1086 Expression* expression() const { return expression_; } | 1090 Expression* expression() const { return expression_; } |
| 1087 Statement* statement() const { return statement_; } | 1091 Statement* statement() const { return statement_; } |
| 1088 | 1092 |
| 1089 protected: | 1093 protected: |
| 1090 WithStatement( | 1094 WithStatement( |
| 1091 Scope* scope, Expression* expression, Statement* statement, int pos) | 1095 Zone* zone, Scope* scope, |
| 1092 : Statement(pos), | 1096 Expression* expression, Statement* statement, int pos) |
| 1097 : Statement(zone, pos), |
| 1093 scope_(scope), | 1098 scope_(scope), |
| 1094 expression_(expression), | 1099 expression_(expression), |
| 1095 statement_(statement) { } | 1100 statement_(statement) { } |
| 1096 | 1101 |
| 1097 private: | 1102 private: |
| 1098 Scope* scope_; | 1103 Scope* scope_; |
| 1099 Expression* expression_; | 1104 Expression* expression_; |
| 1100 Statement* statement_; | 1105 Statement* statement_; |
| 1101 }; | 1106 }; |
| 1102 | 1107 |
| 1103 | 1108 |
| 1104 class CaseClause V8_FINAL : public Expression { | 1109 class CaseClause V8_FINAL : public Expression { |
| 1105 public: | 1110 public: |
| 1106 DECLARE_NODE_TYPE(CaseClause) | 1111 DECLARE_NODE_TYPE(CaseClause) |
| 1107 | 1112 |
| 1108 bool is_default() const { return label_ == NULL; } | 1113 bool is_default() const { return label_ == NULL; } |
| 1109 Expression* label() const { | 1114 Expression* label() const { |
| 1110 CHECK(!is_default()); | 1115 CHECK(!is_default()); |
| 1111 return label_; | 1116 return label_; |
| 1112 } | 1117 } |
| 1113 Label* body_target() { return &body_target_; } | 1118 Label* body_target() { return &body_target_; } |
| 1114 ZoneList<Statement*>* statements() const { return statements_; } | 1119 ZoneList<Statement*>* statements() const { return statements_; } |
| 1115 | 1120 |
| 1116 BailoutId EntryId() const { return entry_id_; } | 1121 BailoutId EntryId() const { return entry_id_; } |
| 1117 | 1122 |
| 1118 // Type feedback information. | 1123 // Type feedback information. |
| 1119 TypeFeedbackId CompareId() { return compare_id_; } | 1124 TypeFeedbackId CompareId() { return compare_id_; } |
| 1120 Handle<Type> compare_type() { return compare_type_; } | 1125 Type* compare_type() { return compare_type_; } |
| 1121 void set_compare_type(Handle<Type> type) { compare_type_ = type; } | 1126 void set_compare_type(Type* type) { compare_type_ = type; } |
| 1122 | 1127 |
| 1123 private: | 1128 private: |
| 1124 CaseClause(Isolate* isolate, | 1129 CaseClause(Zone* zone, |
| 1125 Expression* label, | 1130 Expression* label, |
| 1126 ZoneList<Statement*>* statements, | 1131 ZoneList<Statement*>* statements, |
| 1127 int pos); | 1132 int pos); |
| 1128 | 1133 |
| 1129 Expression* label_; | 1134 Expression* label_; |
| 1130 Label body_target_; | 1135 Label body_target_; |
| 1131 ZoneList<Statement*>* statements_; | 1136 ZoneList<Statement*>* statements_; |
| 1132 Handle<Type> compare_type_; | 1137 Type* compare_type_; |
| 1133 | 1138 |
| 1134 const TypeFeedbackId compare_id_; | 1139 const TypeFeedbackId compare_id_; |
| 1135 const BailoutId entry_id_; | 1140 const BailoutId entry_id_; |
| 1136 }; | 1141 }; |
| 1137 | 1142 |
| 1138 | 1143 |
| 1139 class SwitchStatement V8_FINAL : public BreakableStatement { | 1144 class SwitchStatement V8_FINAL : public BreakableStatement { |
| 1140 public: | 1145 public: |
| 1141 DECLARE_NODE_TYPE(SwitchStatement) | 1146 DECLARE_NODE_TYPE(SwitchStatement) |
| 1142 | 1147 |
| 1143 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) { | 1148 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) { |
| 1144 tag_ = tag; | 1149 tag_ = tag; |
| 1145 cases_ = cases; | 1150 cases_ = cases; |
| 1146 } | 1151 } |
| 1147 | 1152 |
| 1148 Expression* tag() const { return tag_; } | 1153 Expression* tag() const { return tag_; } |
| 1149 ZoneList<CaseClause*>* cases() const { return cases_; } | 1154 ZoneList<CaseClause*>* cases() const { return cases_; } |
| 1150 | 1155 |
| 1151 protected: | 1156 protected: |
| 1152 SwitchStatement(Isolate* isolate, ZoneStringList* labels, int pos) | 1157 SwitchStatement(Zone* zone, ZoneStringList* labels, int pos) |
| 1153 : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS, pos), | 1158 : BreakableStatement(zone, labels, TARGET_FOR_ANONYMOUS, pos), |
| 1154 tag_(NULL), | 1159 tag_(NULL), |
| 1155 cases_(NULL) { } | 1160 cases_(NULL) { } |
| 1156 | 1161 |
| 1157 private: | 1162 private: |
| 1158 Expression* tag_; | 1163 Expression* tag_; |
| 1159 ZoneList<CaseClause*>* cases_; | 1164 ZoneList<CaseClause*>* cases_; |
| 1160 }; | 1165 }; |
| 1161 | 1166 |
| 1162 | 1167 |
| 1163 // If-statements always have non-null references to their then- and | 1168 // If-statements always have non-null references to their then- and |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1179 virtual bool IsJump() const V8_OVERRIDE { | 1184 virtual bool IsJump() const V8_OVERRIDE { |
| 1180 return HasThenStatement() && then_statement()->IsJump() | 1185 return HasThenStatement() && then_statement()->IsJump() |
| 1181 && HasElseStatement() && else_statement()->IsJump(); | 1186 && HasElseStatement() && else_statement()->IsJump(); |
| 1182 } | 1187 } |
| 1183 | 1188 |
| 1184 BailoutId IfId() const { return if_id_; } | 1189 BailoutId IfId() const { return if_id_; } |
| 1185 BailoutId ThenId() const { return then_id_; } | 1190 BailoutId ThenId() const { return then_id_; } |
| 1186 BailoutId ElseId() const { return else_id_; } | 1191 BailoutId ElseId() const { return else_id_; } |
| 1187 | 1192 |
| 1188 protected: | 1193 protected: |
| 1189 IfStatement(Isolate* isolate, | 1194 IfStatement(Zone* zone, |
| 1190 Expression* condition, | 1195 Expression* condition, |
| 1191 Statement* then_statement, | 1196 Statement* then_statement, |
| 1192 Statement* else_statement, | 1197 Statement* else_statement, |
| 1193 int pos) | 1198 int pos) |
| 1194 : Statement(pos), | 1199 : Statement(zone, pos), |
| 1195 condition_(condition), | 1200 condition_(condition), |
| 1196 then_statement_(then_statement), | 1201 then_statement_(then_statement), |
| 1197 else_statement_(else_statement), | 1202 else_statement_(else_statement), |
| 1198 if_id_(GetNextId(isolate)), | 1203 if_id_(GetNextId(zone)), |
| 1199 then_id_(GetNextId(isolate)), | 1204 then_id_(GetNextId(zone)), |
| 1200 else_id_(GetNextId(isolate)) { | 1205 else_id_(GetNextId(zone)) { |
| 1201 } | 1206 } |
| 1202 | 1207 |
| 1203 private: | 1208 private: |
| 1204 Expression* condition_; | 1209 Expression* condition_; |
| 1205 Statement* then_statement_; | 1210 Statement* then_statement_; |
| 1206 Statement* else_statement_; | 1211 Statement* else_statement_; |
| 1207 const BailoutId if_id_; | 1212 const BailoutId if_id_; |
| 1208 const BailoutId then_id_; | 1213 const BailoutId then_id_; |
| 1209 const BailoutId else_id_; | 1214 const BailoutId else_id_; |
| 1210 }; | 1215 }; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1238 public: | 1243 public: |
| 1239 void set_escaping_targets(ZoneList<Label*>* targets) { | 1244 void set_escaping_targets(ZoneList<Label*>* targets) { |
| 1240 escaping_targets_ = targets; | 1245 escaping_targets_ = targets; |
| 1241 } | 1246 } |
| 1242 | 1247 |
| 1243 int index() const { return index_; } | 1248 int index() const { return index_; } |
| 1244 Block* try_block() const { return try_block_; } | 1249 Block* try_block() const { return try_block_; } |
| 1245 ZoneList<Label*>* escaping_targets() const { return escaping_targets_; } | 1250 ZoneList<Label*>* escaping_targets() const { return escaping_targets_; } |
| 1246 | 1251 |
| 1247 protected: | 1252 protected: |
| 1248 TryStatement(int index, Block* try_block, int pos) | 1253 TryStatement(Zone* zone, int index, Block* try_block, int pos) |
| 1249 : Statement(pos), | 1254 : Statement(zone, pos), |
| 1250 index_(index), | 1255 index_(index), |
| 1251 try_block_(try_block), | 1256 try_block_(try_block), |
| 1252 escaping_targets_(NULL) { } | 1257 escaping_targets_(NULL) { } |
| 1253 | 1258 |
| 1254 private: | 1259 private: |
| 1255 // Unique (per-function) index of this handler. This is not an AST ID. | 1260 // Unique (per-function) index of this handler. This is not an AST ID. |
| 1256 int index_; | 1261 int index_; |
| 1257 | 1262 |
| 1258 Block* try_block_; | 1263 Block* try_block_; |
| 1259 ZoneList<Label*>* escaping_targets_; | 1264 ZoneList<Label*>* escaping_targets_; |
| 1260 }; | 1265 }; |
| 1261 | 1266 |
| 1262 | 1267 |
| 1263 class TryCatchStatement V8_FINAL : public TryStatement { | 1268 class TryCatchStatement V8_FINAL : public TryStatement { |
| 1264 public: | 1269 public: |
| 1265 DECLARE_NODE_TYPE(TryCatchStatement) | 1270 DECLARE_NODE_TYPE(TryCatchStatement) |
| 1266 | 1271 |
| 1267 Scope* scope() { return scope_; } | 1272 Scope* scope() { return scope_; } |
| 1268 Variable* variable() { return variable_; } | 1273 Variable* variable() { return variable_; } |
| 1269 Block* catch_block() const { return catch_block_; } | 1274 Block* catch_block() const { return catch_block_; } |
| 1270 | 1275 |
| 1271 protected: | 1276 protected: |
| 1272 TryCatchStatement(int index, | 1277 TryCatchStatement(Zone* zone, |
| 1278 int index, |
| 1273 Block* try_block, | 1279 Block* try_block, |
| 1274 Scope* scope, | 1280 Scope* scope, |
| 1275 Variable* variable, | 1281 Variable* variable, |
| 1276 Block* catch_block, | 1282 Block* catch_block, |
| 1277 int pos) | 1283 int pos) |
| 1278 : TryStatement(index, try_block, pos), | 1284 : TryStatement(zone, index, try_block, pos), |
| 1279 scope_(scope), | 1285 scope_(scope), |
| 1280 variable_(variable), | 1286 variable_(variable), |
| 1281 catch_block_(catch_block) { | 1287 catch_block_(catch_block) { |
| 1282 } | 1288 } |
| 1283 | 1289 |
| 1284 private: | 1290 private: |
| 1285 Scope* scope_; | 1291 Scope* scope_; |
| 1286 Variable* variable_; | 1292 Variable* variable_; |
| 1287 Block* catch_block_; | 1293 Block* catch_block_; |
| 1288 }; | 1294 }; |
| 1289 | 1295 |
| 1290 | 1296 |
| 1291 class TryFinallyStatement V8_FINAL : public TryStatement { | 1297 class TryFinallyStatement V8_FINAL : public TryStatement { |
| 1292 public: | 1298 public: |
| 1293 DECLARE_NODE_TYPE(TryFinallyStatement) | 1299 DECLARE_NODE_TYPE(TryFinallyStatement) |
| 1294 | 1300 |
| 1295 Block* finally_block() const { return finally_block_; } | 1301 Block* finally_block() const { return finally_block_; } |
| 1296 | 1302 |
| 1297 protected: | 1303 protected: |
| 1298 TryFinallyStatement( | 1304 TryFinallyStatement( |
| 1299 int index, Block* try_block, Block* finally_block, int pos) | 1305 Zone* zone, int index, Block* try_block, Block* finally_block, int pos) |
| 1300 : TryStatement(index, try_block, pos), | 1306 : TryStatement(zone, index, try_block, pos), |
| 1301 finally_block_(finally_block) { } | 1307 finally_block_(finally_block) { } |
| 1302 | 1308 |
| 1303 private: | 1309 private: |
| 1304 Block* finally_block_; | 1310 Block* finally_block_; |
| 1305 }; | 1311 }; |
| 1306 | 1312 |
| 1307 | 1313 |
| 1308 class DebuggerStatement V8_FINAL : public Statement { | 1314 class DebuggerStatement V8_FINAL : public Statement { |
| 1309 public: | 1315 public: |
| 1310 DECLARE_NODE_TYPE(DebuggerStatement) | 1316 DECLARE_NODE_TYPE(DebuggerStatement) |
| 1311 | 1317 |
| 1312 protected: | 1318 protected: |
| 1313 explicit DebuggerStatement(int pos): Statement(pos) {} | 1319 explicit DebuggerStatement(Zone* zone, int pos): Statement(zone, pos) {} |
| 1314 }; | 1320 }; |
| 1315 | 1321 |
| 1316 | 1322 |
| 1317 class EmptyStatement V8_FINAL : public Statement { | 1323 class EmptyStatement V8_FINAL : public Statement { |
| 1318 public: | 1324 public: |
| 1319 DECLARE_NODE_TYPE(EmptyStatement) | 1325 DECLARE_NODE_TYPE(EmptyStatement) |
| 1320 | 1326 |
| 1321 protected: | 1327 protected: |
| 1322 explicit EmptyStatement(int pos): Statement(pos) {} | 1328 explicit EmptyStatement(Zone* zone, int pos): Statement(zone, pos) {} |
| 1323 }; | 1329 }; |
| 1324 | 1330 |
| 1325 | 1331 |
| 1326 class Literal V8_FINAL : public Expression { | 1332 class Literal V8_FINAL : public Expression { |
| 1327 public: | 1333 public: |
| 1328 DECLARE_NODE_TYPE(Literal) | 1334 DECLARE_NODE_TYPE(Literal) |
| 1329 | 1335 |
| 1330 virtual bool IsPropertyName() V8_OVERRIDE { | 1336 virtual bool IsPropertyName() V8_OVERRIDE { |
| 1331 if (value_->IsInternalizedString()) { | 1337 if (value_->IsInternalizedString()) { |
| 1332 uint32_t ignored; | 1338 uint32_t ignored; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1369 | 1375 |
| 1370 static bool Match(void* literal1, void* literal2) { | 1376 static bool Match(void* literal1, void* literal2) { |
| 1371 Handle<String> s1 = static_cast<Literal*>(literal1)->ToString(); | 1377 Handle<String> s1 = static_cast<Literal*>(literal1)->ToString(); |
| 1372 Handle<String> s2 = static_cast<Literal*>(literal2)->ToString(); | 1378 Handle<String> s2 = static_cast<Literal*>(literal2)->ToString(); |
| 1373 return s1->Equals(*s2); | 1379 return s1->Equals(*s2); |
| 1374 } | 1380 } |
| 1375 | 1381 |
| 1376 TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); } | 1382 TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); } |
| 1377 | 1383 |
| 1378 protected: | 1384 protected: |
| 1379 Literal( | 1385 Literal(Zone* zone, Handle<Object> value, int position) |
| 1380 Isolate* isolate, Handle<Object> value, int position) | 1386 : Expression(zone, position), |
| 1381 : Expression(isolate, position), | |
| 1382 value_(value), | 1387 value_(value), |
| 1383 isolate_(isolate) { } | 1388 isolate_(zone->isolate()) { } |
| 1384 | 1389 |
| 1385 private: | 1390 private: |
| 1386 Handle<String> ToString(); | 1391 Handle<String> ToString(); |
| 1387 | 1392 |
| 1388 Handle<Object> value_; | 1393 Handle<Object> value_; |
| 1389 // TODO(dcarney): remove. this is only needed for Match and Hash. | 1394 // TODO(dcarney): remove. this is only needed for Match and Hash. |
| 1390 Isolate* isolate_; | 1395 Isolate* isolate_; |
| 1391 }; | 1396 }; |
| 1392 | 1397 |
| 1393 | 1398 |
| 1394 // Base class for literals that needs space in the corresponding JSFunction. | 1399 // Base class for literals that needs space in the corresponding JSFunction. |
| 1395 class MaterializedLiteral : public Expression { | 1400 class MaterializedLiteral : public Expression { |
| 1396 public: | 1401 public: |
| 1397 virtual MaterializedLiteral* AsMaterializedLiteral() { return this; } | 1402 virtual MaterializedLiteral* AsMaterializedLiteral() { return this; } |
| 1398 | 1403 |
| 1399 int literal_index() { return literal_index_; } | 1404 int literal_index() { return literal_index_; } |
| 1400 | 1405 |
| 1401 int depth() const { | 1406 int depth() const { |
| 1402 // only callable after initialization. | 1407 // only callable after initialization. |
| 1403 ASSERT(depth_ >= 1); | 1408 ASSERT(depth_ >= 1); |
| 1404 return depth_; | 1409 return depth_; |
| 1405 } | 1410 } |
| 1406 | 1411 |
| 1407 protected: | 1412 protected: |
| 1408 MaterializedLiteral(Isolate* isolate, | 1413 MaterializedLiteral(Zone* zone, |
| 1409 int literal_index, | 1414 int literal_index, |
| 1410 int pos) | 1415 int pos) |
| 1411 : Expression(isolate, pos), | 1416 : Expression(zone, pos), |
| 1412 literal_index_(literal_index), | 1417 literal_index_(literal_index), |
| 1413 is_simple_(false), | 1418 is_simple_(false), |
| 1414 depth_(0) {} | 1419 depth_(0) {} |
| 1415 | 1420 |
| 1416 // A materialized literal is simple if the values consist of only | 1421 // A materialized literal is simple if the values consist of only |
| 1417 // constants and simple object and array literals. | 1422 // constants and simple object and array literals. |
| 1418 bool is_simple() const { return is_simple_; } | 1423 bool is_simple() const { return is_simple_; } |
| 1419 void set_is_simple(bool is_simple) { is_simple_ = is_simple; } | 1424 void set_is_simple(bool is_simple) { is_simple_ = is_simple; } |
| 1420 friend class CompileTimeValue; | 1425 friend class CompileTimeValue; |
| 1421 | 1426 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1449 class ObjectLiteralProperty V8_FINAL : public ZoneObject { | 1454 class ObjectLiteralProperty V8_FINAL : public ZoneObject { |
| 1450 public: | 1455 public: |
| 1451 enum Kind { | 1456 enum Kind { |
| 1452 CONSTANT, // Property with constant value (compile time). | 1457 CONSTANT, // Property with constant value (compile time). |
| 1453 COMPUTED, // Property with computed value (execution time). | 1458 COMPUTED, // Property with computed value (execution time). |
| 1454 MATERIALIZED_LITERAL, // Property value is a materialized literal. | 1459 MATERIALIZED_LITERAL, // Property value is a materialized literal. |
| 1455 GETTER, SETTER, // Property is an accessor function. | 1460 GETTER, SETTER, // Property is an accessor function. |
| 1456 PROTOTYPE // Property is __proto__. | 1461 PROTOTYPE // Property is __proto__. |
| 1457 }; | 1462 }; |
| 1458 | 1463 |
| 1459 ObjectLiteralProperty(Literal* key, Expression* value, Isolate* isolate); | 1464 ObjectLiteralProperty(Zone* zone, Literal* key, Expression* value); |
| 1460 | 1465 |
| 1461 Literal* key() { return key_; } | 1466 Literal* key() { return key_; } |
| 1462 Expression* value() { return value_; } | 1467 Expression* value() { return value_; } |
| 1463 Kind kind() { return kind_; } | 1468 Kind kind() { return kind_; } |
| 1464 | 1469 |
| 1465 // Type feedback information. | 1470 // Type feedback information. |
| 1466 void RecordTypeFeedback(TypeFeedbackOracle* oracle); | 1471 void RecordTypeFeedback(TypeFeedbackOracle* oracle); |
| 1467 bool IsMonomorphic() { return !receiver_type_.is_null(); } | 1472 bool IsMonomorphic() { return !receiver_type_.is_null(); } |
| 1468 Handle<Map> GetReceiverType() { return receiver_type_; } | 1473 Handle<Map> GetReceiverType() { return receiver_type_; } |
| 1469 | 1474 |
| 1470 bool IsCompileTimeValue(); | 1475 bool IsCompileTimeValue(); |
| 1471 | 1476 |
| 1472 void set_emit_store(bool emit_store); | 1477 void set_emit_store(bool emit_store); |
| 1473 bool emit_store(); | 1478 bool emit_store(); |
| 1474 | 1479 |
| 1475 protected: | 1480 protected: |
| 1476 template<class> friend class AstNodeFactory; | 1481 template<class> friend class AstNodeFactory; |
| 1477 | 1482 |
| 1478 ObjectLiteralProperty(bool is_getter, FunctionLiteral* value); | 1483 ObjectLiteralProperty(Zone* zone, bool is_getter, FunctionLiteral* value); |
| 1479 void set_key(Literal* key) { key_ = key; } | 1484 void set_key(Literal* key) { key_ = key; } |
| 1480 | 1485 |
| 1481 private: | 1486 private: |
| 1482 Literal* key_; | 1487 Literal* key_; |
| 1483 Expression* value_; | 1488 Expression* value_; |
| 1484 Kind kind_; | 1489 Kind kind_; |
| 1485 bool emit_store_; | 1490 bool emit_store_; |
| 1486 Handle<Map> receiver_type_; | 1491 Handle<Map> receiver_type_; |
| 1487 }; | 1492 }; |
| 1488 | 1493 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 kHasFunction = 1 << 1 | 1525 kHasFunction = 1 << 1 |
| 1521 }; | 1526 }; |
| 1522 | 1527 |
| 1523 struct Accessors: public ZoneObject { | 1528 struct Accessors: public ZoneObject { |
| 1524 Accessors() : getter(NULL), setter(NULL) { } | 1529 Accessors() : getter(NULL), setter(NULL) { } |
| 1525 Expression* getter; | 1530 Expression* getter; |
| 1526 Expression* setter; | 1531 Expression* setter; |
| 1527 }; | 1532 }; |
| 1528 | 1533 |
| 1529 protected: | 1534 protected: |
| 1530 ObjectLiteral(Isolate* isolate, | 1535 ObjectLiteral(Zone* zone, |
| 1531 ZoneList<Property*>* properties, | 1536 ZoneList<Property*>* properties, |
| 1532 int literal_index, | 1537 int literal_index, |
| 1533 int boilerplate_properties, | 1538 int boilerplate_properties, |
| 1534 bool has_function, | 1539 bool has_function, |
| 1535 int pos) | 1540 int pos) |
| 1536 : MaterializedLiteral(isolate, literal_index, pos), | 1541 : MaterializedLiteral(zone, literal_index, pos), |
| 1537 properties_(properties), | 1542 properties_(properties), |
| 1538 boilerplate_properties_(boilerplate_properties), | 1543 boilerplate_properties_(boilerplate_properties), |
| 1539 fast_elements_(false), | 1544 fast_elements_(false), |
| 1540 may_store_doubles_(false), | 1545 may_store_doubles_(false), |
| 1541 has_function_(has_function) {} | 1546 has_function_(has_function) {} |
| 1542 | 1547 |
| 1543 private: | 1548 private: |
| 1544 Handle<FixedArray> constant_properties_; | 1549 Handle<FixedArray> constant_properties_; |
| 1545 ZoneList<Property*>* properties_; | 1550 ZoneList<Property*>* properties_; |
| 1546 int boilerplate_properties_; | 1551 int boilerplate_properties_; |
| 1547 bool fast_elements_; | 1552 bool fast_elements_; |
| 1548 bool may_store_doubles_; | 1553 bool may_store_doubles_; |
| 1549 bool has_function_; | 1554 bool has_function_; |
| 1550 }; | 1555 }; |
| 1551 | 1556 |
| 1552 | 1557 |
| 1553 // Node for capturing a regexp literal. | 1558 // Node for capturing a regexp literal. |
| 1554 class RegExpLiteral V8_FINAL : public MaterializedLiteral { | 1559 class RegExpLiteral V8_FINAL : public MaterializedLiteral { |
| 1555 public: | 1560 public: |
| 1556 DECLARE_NODE_TYPE(RegExpLiteral) | 1561 DECLARE_NODE_TYPE(RegExpLiteral) |
| 1557 | 1562 |
| 1558 Handle<String> pattern() const { return pattern_; } | 1563 Handle<String> pattern() const { return pattern_; } |
| 1559 Handle<String> flags() const { return flags_; } | 1564 Handle<String> flags() const { return flags_; } |
| 1560 | 1565 |
| 1561 protected: | 1566 protected: |
| 1562 RegExpLiteral(Isolate* isolate, | 1567 RegExpLiteral(Zone* zone, |
| 1563 Handle<String> pattern, | 1568 Handle<String> pattern, |
| 1564 Handle<String> flags, | 1569 Handle<String> flags, |
| 1565 int literal_index, | 1570 int literal_index, |
| 1566 int pos) | 1571 int pos) |
| 1567 : MaterializedLiteral(isolate, literal_index, pos), | 1572 : MaterializedLiteral(zone, literal_index, pos), |
| 1568 pattern_(pattern), | 1573 pattern_(pattern), |
| 1569 flags_(flags) { | 1574 flags_(flags) { |
| 1570 set_depth(1); | 1575 set_depth(1); |
| 1571 } | 1576 } |
| 1572 | 1577 |
| 1573 private: | 1578 private: |
| 1574 Handle<String> pattern_; | 1579 Handle<String> pattern_; |
| 1575 Handle<String> flags_; | 1580 Handle<String> flags_; |
| 1576 }; | 1581 }; |
| 1577 | 1582 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1593 // Populate the constant elements fixed array. | 1598 // Populate the constant elements fixed array. |
| 1594 void BuildConstantElements(Isolate* isolate); | 1599 void BuildConstantElements(Isolate* isolate); |
| 1595 | 1600 |
| 1596 enum Flags { | 1601 enum Flags { |
| 1597 kNoFlags = 0, | 1602 kNoFlags = 0, |
| 1598 kShallowElements = 1, | 1603 kShallowElements = 1, |
| 1599 kDisableMementos = 1 << 1 | 1604 kDisableMementos = 1 << 1 |
| 1600 }; | 1605 }; |
| 1601 | 1606 |
| 1602 protected: | 1607 protected: |
| 1603 ArrayLiteral(Isolate* isolate, | 1608 ArrayLiteral(Zone* zone, |
| 1604 ZoneList<Expression*>* values, | 1609 ZoneList<Expression*>* values, |
| 1605 int literal_index, | 1610 int literal_index, |
| 1606 int pos) | 1611 int pos) |
| 1607 : MaterializedLiteral(isolate, literal_index, pos), | 1612 : MaterializedLiteral(zone, literal_index, pos), |
| 1608 values_(values), | 1613 values_(values), |
| 1609 first_element_id_(ReserveIdRange(isolate, values->length())) {} | 1614 first_element_id_(ReserveIdRange(zone, values->length())) {} |
| 1610 | 1615 |
| 1611 private: | 1616 private: |
| 1612 Handle<FixedArray> constant_elements_; | 1617 Handle<FixedArray> constant_elements_; |
| 1613 ZoneList<Expression*>* values_; | 1618 ZoneList<Expression*>* values_; |
| 1614 const BailoutId first_element_id_; | 1619 const BailoutId first_element_id_; |
| 1615 }; | 1620 }; |
| 1616 | 1621 |
| 1617 | 1622 |
| 1618 class VariableProxy V8_FINAL : public Expression { | 1623 class VariableProxy V8_FINAL : public Expression { |
| 1619 public: | 1624 public: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1639 Interface* interface() const { return interface_; } | 1644 Interface* interface() const { return interface_; } |
| 1640 | 1645 |
| 1641 | 1646 |
| 1642 void MarkAsTrivial() { is_trivial_ = true; } | 1647 void MarkAsTrivial() { is_trivial_ = true; } |
| 1643 void MarkAsLValue() { is_lvalue_ = true; } | 1648 void MarkAsLValue() { is_lvalue_ = true; } |
| 1644 | 1649 |
| 1645 // Bind this proxy to the variable var. Interfaces must match. | 1650 // Bind this proxy to the variable var. Interfaces must match. |
| 1646 void BindTo(Variable* var); | 1651 void BindTo(Variable* var); |
| 1647 | 1652 |
| 1648 protected: | 1653 protected: |
| 1649 VariableProxy(Isolate* isolate, Variable* var, int position); | 1654 VariableProxy(Zone* zone, Variable* var, int position); |
| 1650 | 1655 |
| 1651 VariableProxy(Isolate* isolate, | 1656 VariableProxy(Zone* zone, |
| 1652 Handle<String> name, | 1657 Handle<String> name, |
| 1653 bool is_this, | 1658 bool is_this, |
| 1654 Interface* interface, | 1659 Interface* interface, |
| 1655 int position); | 1660 int position); |
| 1656 | 1661 |
| 1657 Handle<String> name_; | 1662 Handle<String> name_; |
| 1658 Variable* var_; // resolved variable, or NULL | 1663 Variable* var_; // resolved variable, or NULL |
| 1659 bool is_this_; | 1664 bool is_this_; |
| 1660 bool is_trivial_; | 1665 bool is_trivial_; |
| 1661 // True if this variable proxy is being used in an assignment | 1666 // True if this variable proxy is being used in an assignment |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1695 return is_uninitialized_ || is_pre_monomorphic_; | 1700 return is_uninitialized_ || is_pre_monomorphic_; |
| 1696 } | 1701 } |
| 1697 void set_is_uninitialized(bool b) { is_uninitialized_ = b; } | 1702 void set_is_uninitialized(bool b) { is_uninitialized_ = b; } |
| 1698 void set_is_pre_monomorphic(bool b) { is_pre_monomorphic_ = b; } | 1703 void set_is_pre_monomorphic(bool b) { is_pre_monomorphic_ = b; } |
| 1699 void set_is_string_access(bool b) { is_string_access_ = b; } | 1704 void set_is_string_access(bool b) { is_string_access_ = b; } |
| 1700 void set_is_function_prototype(bool b) { is_function_prototype_ = b; } | 1705 void set_is_function_prototype(bool b) { is_function_prototype_ = b; } |
| 1701 | 1706 |
| 1702 TypeFeedbackId PropertyFeedbackId() { return reuse(id()); } | 1707 TypeFeedbackId PropertyFeedbackId() { return reuse(id()); } |
| 1703 | 1708 |
| 1704 protected: | 1709 protected: |
| 1705 Property(Isolate* isolate, | 1710 Property(Zone* zone, |
| 1706 Expression* obj, | 1711 Expression* obj, |
| 1707 Expression* key, | 1712 Expression* key, |
| 1708 int pos) | 1713 int pos) |
| 1709 : Expression(isolate, pos), | 1714 : Expression(zone, pos), |
| 1710 obj_(obj), | 1715 obj_(obj), |
| 1711 key_(key), | 1716 key_(key), |
| 1712 load_id_(GetNextId(isolate)), | 1717 load_id_(GetNextId(zone)), |
| 1713 is_pre_monomorphic_(false), | 1718 is_pre_monomorphic_(false), |
| 1714 is_uninitialized_(false), | 1719 is_uninitialized_(false), |
| 1715 is_string_access_(false), | 1720 is_string_access_(false), |
| 1716 is_function_prototype_(false) { } | 1721 is_function_prototype_(false) { } |
| 1717 | 1722 |
| 1718 private: | 1723 private: |
| 1719 Expression* obj_; | 1724 Expression* obj_; |
| 1720 Expression* key_; | 1725 Expression* key_; |
| 1721 const BailoutId load_id_; | 1726 const BailoutId load_id_; |
| 1722 | 1727 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1778 // various similar methods in objets.cc), but for now... | 1783 // various similar methods in objets.cc), but for now... |
| 1779 static Handle<JSObject> GetPrototypeForPrimitiveCheck( | 1784 static Handle<JSObject> GetPrototypeForPrimitiveCheck( |
| 1780 CheckType check, Isolate* isolate); | 1785 CheckType check, Isolate* isolate); |
| 1781 | 1786 |
| 1782 #ifdef DEBUG | 1787 #ifdef DEBUG |
| 1783 // Used to assert that the FullCodeGenerator records the return site. | 1788 // Used to assert that the FullCodeGenerator records the return site. |
| 1784 bool return_is_recorded_; | 1789 bool return_is_recorded_; |
| 1785 #endif | 1790 #endif |
| 1786 | 1791 |
| 1787 protected: | 1792 protected: |
| 1788 Call(Isolate* isolate, | 1793 Call(Zone* zone, |
| 1789 Expression* expression, | 1794 Expression* expression, |
| 1790 ZoneList<Expression*>* arguments, | 1795 ZoneList<Expression*>* arguments, |
| 1791 int pos) | 1796 int pos) |
| 1792 : Expression(isolate, pos), | 1797 : Expression(zone, pos), |
| 1793 expression_(expression), | 1798 expression_(expression), |
| 1794 arguments_(arguments), | 1799 arguments_(arguments), |
| 1795 is_monomorphic_(false), | 1800 is_monomorphic_(false), |
| 1796 keyed_array_call_is_holey_(true), | 1801 keyed_array_call_is_holey_(true), |
| 1797 check_type_(RECEIVER_MAP_CHECK), | 1802 check_type_(RECEIVER_MAP_CHECK), |
| 1798 return_id_(GetNextId(isolate)) { } | 1803 return_id_(GetNextId(zone)) { } |
| 1799 | 1804 |
| 1800 private: | 1805 private: |
| 1801 Expression* expression_; | 1806 Expression* expression_; |
| 1802 ZoneList<Expression*>* arguments_; | 1807 ZoneList<Expression*>* arguments_; |
| 1803 | 1808 |
| 1804 bool is_monomorphic_; | 1809 bool is_monomorphic_; |
| 1805 bool keyed_array_call_is_holey_; | 1810 bool keyed_array_call_is_holey_; |
| 1806 CheckType check_type_; | 1811 CheckType check_type_; |
| 1807 SmallMapList receiver_types_; | 1812 SmallMapList receiver_types_; |
| 1808 Handle<JSFunction> target_; | 1813 Handle<JSFunction> target_; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1826 virtual bool IsMonomorphic() V8_OVERRIDE { return is_monomorphic_; } | 1831 virtual bool IsMonomorphic() V8_OVERRIDE { return is_monomorphic_; } |
| 1827 Handle<JSFunction> target() const { return target_; } | 1832 Handle<JSFunction> target() const { return target_; } |
| 1828 ElementsKind elements_kind() const { return elements_kind_; } | 1833 ElementsKind elements_kind() const { return elements_kind_; } |
| 1829 Handle<Cell> allocation_info_cell() const { | 1834 Handle<Cell> allocation_info_cell() const { |
| 1830 return allocation_info_cell_; | 1835 return allocation_info_cell_; |
| 1831 } | 1836 } |
| 1832 | 1837 |
| 1833 BailoutId ReturnId() const { return return_id_; } | 1838 BailoutId ReturnId() const { return return_id_; } |
| 1834 | 1839 |
| 1835 protected: | 1840 protected: |
| 1836 CallNew(Isolate* isolate, | 1841 CallNew(Zone* zone, |
| 1837 Expression* expression, | 1842 Expression* expression, |
| 1838 ZoneList<Expression*>* arguments, | 1843 ZoneList<Expression*>* arguments, |
| 1839 int pos) | 1844 int pos) |
| 1840 : Expression(isolate, pos), | 1845 : Expression(zone, pos), |
| 1841 expression_(expression), | 1846 expression_(expression), |
| 1842 arguments_(arguments), | 1847 arguments_(arguments), |
| 1843 is_monomorphic_(false), | 1848 is_monomorphic_(false), |
| 1844 elements_kind_(GetInitialFastElementsKind()), | 1849 elements_kind_(GetInitialFastElementsKind()), |
| 1845 return_id_(GetNextId(isolate)) { } | 1850 return_id_(GetNextId(zone)) { } |
| 1846 | 1851 |
| 1847 private: | 1852 private: |
| 1848 Expression* expression_; | 1853 Expression* expression_; |
| 1849 ZoneList<Expression*>* arguments_; | 1854 ZoneList<Expression*>* arguments_; |
| 1850 | 1855 |
| 1851 bool is_monomorphic_; | 1856 bool is_monomorphic_; |
| 1852 Handle<JSFunction> target_; | 1857 Handle<JSFunction> target_; |
| 1853 ElementsKind elements_kind_; | 1858 ElementsKind elements_kind_; |
| 1854 Handle<Cell> allocation_info_cell_; | 1859 Handle<Cell> allocation_info_cell_; |
| 1855 | 1860 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1866 DECLARE_NODE_TYPE(CallRuntime) | 1871 DECLARE_NODE_TYPE(CallRuntime) |
| 1867 | 1872 |
| 1868 Handle<String> name() const { return name_; } | 1873 Handle<String> name() const { return name_; } |
| 1869 const Runtime::Function* function() const { return function_; } | 1874 const Runtime::Function* function() const { return function_; } |
| 1870 ZoneList<Expression*>* arguments() const { return arguments_; } | 1875 ZoneList<Expression*>* arguments() const { return arguments_; } |
| 1871 bool is_jsruntime() const { return function_ == NULL; } | 1876 bool is_jsruntime() const { return function_ == NULL; } |
| 1872 | 1877 |
| 1873 TypeFeedbackId CallRuntimeFeedbackId() const { return reuse(id()); } | 1878 TypeFeedbackId CallRuntimeFeedbackId() const { return reuse(id()); } |
| 1874 | 1879 |
| 1875 protected: | 1880 protected: |
| 1876 CallRuntime(Isolate* isolate, | 1881 CallRuntime(Zone* zone, |
| 1877 Handle<String> name, | 1882 Handle<String> name, |
| 1878 const Runtime::Function* function, | 1883 const Runtime::Function* function, |
| 1879 ZoneList<Expression*>* arguments, | 1884 ZoneList<Expression*>* arguments, |
| 1880 int pos) | 1885 int pos) |
| 1881 : Expression(isolate, pos), | 1886 : Expression(zone, pos), |
| 1882 name_(name), | 1887 name_(name), |
| 1883 function_(function), | 1888 function_(function), |
| 1884 arguments_(arguments) { } | 1889 arguments_(arguments) { } |
| 1885 | 1890 |
| 1886 private: | 1891 private: |
| 1887 Handle<String> name_; | 1892 Handle<String> name_; |
| 1888 const Runtime::Function* function_; | 1893 const Runtime::Function* function_; |
| 1889 ZoneList<Expression*>* arguments_; | 1894 ZoneList<Expression*>* arguments_; |
| 1890 }; | 1895 }; |
| 1891 | 1896 |
| 1892 | 1897 |
| 1893 class UnaryOperation V8_FINAL : public Expression { | 1898 class UnaryOperation V8_FINAL : public Expression { |
| 1894 public: | 1899 public: |
| 1895 DECLARE_NODE_TYPE(UnaryOperation) | 1900 DECLARE_NODE_TYPE(UnaryOperation) |
| 1896 | 1901 |
| 1897 Token::Value op() const { return op_; } | 1902 Token::Value op() const { return op_; } |
| 1898 Expression* expression() const { return expression_; } | 1903 Expression* expression() const { return expression_; } |
| 1899 | 1904 |
| 1900 BailoutId MaterializeTrueId() { return materialize_true_id_; } | 1905 BailoutId MaterializeTrueId() { return materialize_true_id_; } |
| 1901 BailoutId MaterializeFalseId() { return materialize_false_id_; } | 1906 BailoutId MaterializeFalseId() { return materialize_false_id_; } |
| 1902 | 1907 |
| 1903 virtual void RecordToBooleanTypeFeedback( | 1908 virtual void RecordToBooleanTypeFeedback( |
| 1904 TypeFeedbackOracle* oracle) V8_OVERRIDE; | 1909 TypeFeedbackOracle* oracle) V8_OVERRIDE; |
| 1905 | 1910 |
| 1906 protected: | 1911 protected: |
| 1907 UnaryOperation(Isolate* isolate, | 1912 UnaryOperation(Zone* zone, |
| 1908 Token::Value op, | 1913 Token::Value op, |
| 1909 Expression* expression, | 1914 Expression* expression, |
| 1910 int pos) | 1915 int pos) |
| 1911 : Expression(isolate, pos), | 1916 : Expression(zone, pos), |
| 1912 op_(op), | 1917 op_(op), |
| 1913 expression_(expression), | 1918 expression_(expression), |
| 1914 materialize_true_id_(GetNextId(isolate)), | 1919 materialize_true_id_(GetNextId(zone)), |
| 1915 materialize_false_id_(GetNextId(isolate)) { | 1920 materialize_false_id_(GetNextId(zone)) { |
| 1916 ASSERT(Token::IsUnaryOp(op)); | 1921 ASSERT(Token::IsUnaryOp(op)); |
| 1917 } | 1922 } |
| 1918 | 1923 |
| 1919 private: | 1924 private: |
| 1920 Token::Value op_; | 1925 Token::Value op_; |
| 1921 Expression* expression_; | 1926 Expression* expression_; |
| 1922 | 1927 |
| 1923 // For unary not (Token::NOT), the AST ids where true and false will | 1928 // For unary not (Token::NOT), the AST ids where true and false will |
| 1924 // actually be materialized, respectively. | 1929 // actually be materialized, respectively. |
| 1925 const BailoutId materialize_true_id_; | 1930 const BailoutId materialize_true_id_; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1940 BailoutId RightId() const { return right_id_; } | 1945 BailoutId RightId() const { return right_id_; } |
| 1941 | 1946 |
| 1942 TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); } | 1947 TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); } |
| 1943 Maybe<int> fixed_right_arg() const { return fixed_right_arg_; } | 1948 Maybe<int> fixed_right_arg() const { return fixed_right_arg_; } |
| 1944 void set_fixed_right_arg(Maybe<int> arg) { fixed_right_arg_ = arg; } | 1949 void set_fixed_right_arg(Maybe<int> arg) { fixed_right_arg_ = arg; } |
| 1945 | 1950 |
| 1946 virtual void RecordToBooleanTypeFeedback( | 1951 virtual void RecordToBooleanTypeFeedback( |
| 1947 TypeFeedbackOracle* oracle) V8_OVERRIDE; | 1952 TypeFeedbackOracle* oracle) V8_OVERRIDE; |
| 1948 | 1953 |
| 1949 protected: | 1954 protected: |
| 1950 BinaryOperation(Isolate* isolate, | 1955 BinaryOperation(Zone* zone, |
| 1951 Token::Value op, | 1956 Token::Value op, |
| 1952 Expression* left, | 1957 Expression* left, |
| 1953 Expression* right, | 1958 Expression* right, |
| 1954 int pos) | 1959 int pos) |
| 1955 : Expression(isolate, pos), | 1960 : Expression(zone, pos), |
| 1956 op_(op), | 1961 op_(op), |
| 1957 left_(left), | 1962 left_(left), |
| 1958 right_(right), | 1963 right_(right), |
| 1959 right_id_(GetNextId(isolate)) { | 1964 right_id_(GetNextId(zone)) { |
| 1960 ASSERT(Token::IsBinaryOp(op)); | 1965 ASSERT(Token::IsBinaryOp(op)); |
| 1961 } | 1966 } |
| 1962 | 1967 |
| 1963 private: | 1968 private: |
| 1964 Token::Value op_; | 1969 Token::Value op_; |
| 1965 Expression* left_; | 1970 Expression* left_; |
| 1966 Expression* right_; | 1971 Expression* right_; |
| 1967 | 1972 |
| 1968 // TODO(rossberg): the fixed arg should probably be represented as a Constant | 1973 // TODO(rossberg): the fixed arg should probably be represented as a Constant |
| 1969 // type for the RHS. | 1974 // type for the RHS. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1991 | 1996 |
| 1992 virtual bool IsMonomorphic() V8_OVERRIDE { | 1997 virtual bool IsMonomorphic() V8_OVERRIDE { |
| 1993 return receiver_types_.length() == 1; | 1998 return receiver_types_.length() == 1; |
| 1994 } | 1999 } |
| 1995 virtual SmallMapList* GetReceiverTypes() V8_OVERRIDE { | 2000 virtual SmallMapList* GetReceiverTypes() V8_OVERRIDE { |
| 1996 return &receiver_types_; | 2001 return &receiver_types_; |
| 1997 } | 2002 } |
| 1998 virtual KeyedAccessStoreMode GetStoreMode() V8_OVERRIDE { | 2003 virtual KeyedAccessStoreMode GetStoreMode() V8_OVERRIDE { |
| 1999 return store_mode_; | 2004 return store_mode_; |
| 2000 } | 2005 } |
| 2001 Handle<Type> type() const { return type_; } | 2006 Type* type() const { return type_; } |
| 2002 void set_store_mode(KeyedAccessStoreMode mode) { store_mode_ = mode; } | 2007 void set_store_mode(KeyedAccessStoreMode mode) { store_mode_ = mode; } |
| 2003 void set_type(Handle<Type> type) { type_ = type; } | 2008 void set_type(Type* type) { type_ = type; } |
| 2004 | 2009 |
| 2005 BailoutId AssignmentId() const { return assignment_id_; } | 2010 BailoutId AssignmentId() const { return assignment_id_; } |
| 2006 | 2011 |
| 2007 TypeFeedbackId CountBinOpFeedbackId() const { return count_id_; } | 2012 TypeFeedbackId CountBinOpFeedbackId() const { return count_id_; } |
| 2008 TypeFeedbackId CountStoreFeedbackId() const { return reuse(id()); } | 2013 TypeFeedbackId CountStoreFeedbackId() const { return reuse(id()); } |
| 2009 | 2014 |
| 2010 protected: | 2015 protected: |
| 2011 CountOperation(Isolate* isolate, | 2016 CountOperation(Zone* zone, |
| 2012 Token::Value op, | 2017 Token::Value op, |
| 2013 bool is_prefix, | 2018 bool is_prefix, |
| 2014 Expression* expr, | 2019 Expression* expr, |
| 2015 int pos) | 2020 int pos) |
| 2016 : Expression(isolate, pos), | 2021 : Expression(zone, pos), |
| 2017 op_(op), | 2022 op_(op), |
| 2018 is_prefix_(is_prefix), | 2023 is_prefix_(is_prefix), |
| 2019 store_mode_(STANDARD_STORE), | 2024 store_mode_(STANDARD_STORE), |
| 2020 expression_(expr), | 2025 expression_(expr), |
| 2021 assignment_id_(GetNextId(isolate)), | 2026 assignment_id_(GetNextId(zone)), |
| 2022 count_id_(GetNextId(isolate)) {} | 2027 count_id_(GetNextId(zone)) {} |
| 2023 | 2028 |
| 2024 private: | 2029 private: |
| 2025 Token::Value op_; | 2030 Token::Value op_; |
| 2026 bool is_prefix_ : 1; | 2031 bool is_prefix_ : 1; |
| 2027 KeyedAccessStoreMode store_mode_ : 5; // Windows treats as signed, | 2032 KeyedAccessStoreMode store_mode_ : 5; // Windows treats as signed, |
| 2028 // must have extra bit. | 2033 // must have extra bit. |
| 2029 Handle<Type> type_; | 2034 Type* type_; |
| 2030 | 2035 |
| 2031 Expression* expression_; | 2036 Expression* expression_; |
| 2032 const BailoutId assignment_id_; | 2037 const BailoutId assignment_id_; |
| 2033 const TypeFeedbackId count_id_; | 2038 const TypeFeedbackId count_id_; |
| 2034 SmallMapList receiver_types_; | 2039 SmallMapList receiver_types_; |
| 2035 }; | 2040 }; |
| 2036 | 2041 |
| 2037 | 2042 |
| 2038 class CompareOperation V8_FINAL : public Expression { | 2043 class CompareOperation V8_FINAL : public Expression { |
| 2039 public: | 2044 public: |
| 2040 DECLARE_NODE_TYPE(CompareOperation) | 2045 DECLARE_NODE_TYPE(CompareOperation) |
| 2041 | 2046 |
| 2042 Token::Value op() const { return op_; } | 2047 Token::Value op() const { return op_; } |
| 2043 Expression* left() const { return left_; } | 2048 Expression* left() const { return left_; } |
| 2044 Expression* right() const { return right_; } | 2049 Expression* right() const { return right_; } |
| 2045 | 2050 |
| 2046 // Type feedback information. | 2051 // Type feedback information. |
| 2047 TypeFeedbackId CompareOperationFeedbackId() const { return reuse(id()); } | 2052 TypeFeedbackId CompareOperationFeedbackId() const { return reuse(id()); } |
| 2048 Handle<Type> combined_type() const { return combined_type_; } | 2053 Type* combined_type() const { return combined_type_; } |
| 2049 void set_combined_type(Handle<Type> type) { combined_type_ = type; } | 2054 void set_combined_type(Type* type) { combined_type_ = type; } |
| 2050 | 2055 |
| 2051 // Match special cases. | 2056 // Match special cases. |
| 2052 bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check); | 2057 bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check); |
| 2053 bool IsLiteralCompareUndefined(Expression** expr, Isolate* isolate); | 2058 bool IsLiteralCompareUndefined(Expression** expr, Isolate* isolate); |
| 2054 bool IsLiteralCompareNull(Expression** expr); | 2059 bool IsLiteralCompareNull(Expression** expr); |
| 2055 | 2060 |
| 2056 protected: | 2061 protected: |
| 2057 CompareOperation(Isolate* isolate, | 2062 CompareOperation(Zone* zone, |
| 2058 Token::Value op, | 2063 Token::Value op, |
| 2059 Expression* left, | 2064 Expression* left, |
| 2060 Expression* right, | 2065 Expression* right, |
| 2061 int pos) | 2066 int pos) |
| 2062 : Expression(isolate, pos), | 2067 : Expression(zone, pos), |
| 2063 op_(op), | 2068 op_(op), |
| 2064 left_(left), | 2069 left_(left), |
| 2065 right_(right), | 2070 right_(right), |
| 2066 combined_type_(Type::None(isolate)) { | 2071 combined_type_(Type::None(zone)) { |
| 2067 ASSERT(Token::IsCompareOp(op)); | 2072 ASSERT(Token::IsCompareOp(op)); |
| 2068 } | 2073 } |
| 2069 | 2074 |
| 2070 private: | 2075 private: |
| 2071 Token::Value op_; | 2076 Token::Value op_; |
| 2072 Expression* left_; | 2077 Expression* left_; |
| 2073 Expression* right_; | 2078 Expression* right_; |
| 2074 | 2079 |
| 2075 Handle<Type> combined_type_; | 2080 Type* combined_type_; |
| 2076 }; | 2081 }; |
| 2077 | 2082 |
| 2078 | 2083 |
| 2079 class Conditional V8_FINAL : public Expression { | 2084 class Conditional V8_FINAL : public Expression { |
| 2080 public: | 2085 public: |
| 2081 DECLARE_NODE_TYPE(Conditional) | 2086 DECLARE_NODE_TYPE(Conditional) |
| 2082 | 2087 |
| 2083 Expression* condition() const { return condition_; } | 2088 Expression* condition() const { return condition_; } |
| 2084 Expression* then_expression() const { return then_expression_; } | 2089 Expression* then_expression() const { return then_expression_; } |
| 2085 Expression* else_expression() const { return else_expression_; } | 2090 Expression* else_expression() const { return else_expression_; } |
| 2086 | 2091 |
| 2087 BailoutId ThenId() const { return then_id_; } | 2092 BailoutId ThenId() const { return then_id_; } |
| 2088 BailoutId ElseId() const { return else_id_; } | 2093 BailoutId ElseId() const { return else_id_; } |
| 2089 | 2094 |
| 2090 protected: | 2095 protected: |
| 2091 Conditional(Isolate* isolate, | 2096 Conditional(Zone* zone, |
| 2092 Expression* condition, | 2097 Expression* condition, |
| 2093 Expression* then_expression, | 2098 Expression* then_expression, |
| 2094 Expression* else_expression, | 2099 Expression* else_expression, |
| 2095 int position) | 2100 int position) |
| 2096 : Expression(isolate, position), | 2101 : Expression(zone, position), |
| 2097 condition_(condition), | 2102 condition_(condition), |
| 2098 then_expression_(then_expression), | 2103 then_expression_(then_expression), |
| 2099 else_expression_(else_expression), | 2104 else_expression_(else_expression), |
| 2100 then_id_(GetNextId(isolate)), | 2105 then_id_(GetNextId(zone)), |
| 2101 else_id_(GetNextId(isolate)) { } | 2106 else_id_(GetNextId(zone)) { } |
| 2102 | 2107 |
| 2103 private: | 2108 private: |
| 2104 Expression* condition_; | 2109 Expression* condition_; |
| 2105 Expression* then_expression_; | 2110 Expression* then_expression_; |
| 2106 Expression* else_expression_; | 2111 Expression* else_expression_; |
| 2107 const BailoutId then_id_; | 2112 const BailoutId then_id_; |
| 2108 const BailoutId else_id_; | 2113 const BailoutId else_id_; |
| 2109 }; | 2114 }; |
| 2110 | 2115 |
| 2111 | 2116 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2141 return &receiver_types_; | 2146 return &receiver_types_; |
| 2142 } | 2147 } |
| 2143 virtual KeyedAccessStoreMode GetStoreMode() V8_OVERRIDE { | 2148 virtual KeyedAccessStoreMode GetStoreMode() V8_OVERRIDE { |
| 2144 return store_mode_; | 2149 return store_mode_; |
| 2145 } | 2150 } |
| 2146 void set_is_uninitialized(bool b) { is_uninitialized_ = b; } | 2151 void set_is_uninitialized(bool b) { is_uninitialized_ = b; } |
| 2147 void set_is_pre_monomorphic(bool b) { is_pre_monomorphic_ = b; } | 2152 void set_is_pre_monomorphic(bool b) { is_pre_monomorphic_ = b; } |
| 2148 void set_store_mode(KeyedAccessStoreMode mode) { store_mode_ = mode; } | 2153 void set_store_mode(KeyedAccessStoreMode mode) { store_mode_ = mode; } |
| 2149 | 2154 |
| 2150 protected: | 2155 protected: |
| 2151 Assignment(Isolate* isolate, | 2156 Assignment(Zone* zone, |
| 2152 Token::Value op, | 2157 Token::Value op, |
| 2153 Expression* target, | 2158 Expression* target, |
| 2154 Expression* value, | 2159 Expression* value, |
| 2155 int pos); | 2160 int pos); |
| 2156 | 2161 |
| 2157 template<class Visitor> | 2162 template<class Visitor> |
| 2158 void Init(Isolate* isolate, AstNodeFactory<Visitor>* factory) { | 2163 void Init(Zone* zone, AstNodeFactory<Visitor>* factory) { |
| 2159 ASSERT(Token::IsAssignmentOp(op_)); | 2164 ASSERT(Token::IsAssignmentOp(op_)); |
| 2160 if (is_compound()) { | 2165 if (is_compound()) { |
| 2161 binary_operation_ = factory->NewBinaryOperation( | 2166 binary_operation_ = factory->NewBinaryOperation( |
| 2162 binary_op(), target_, value_, position() + 1); | 2167 binary_op(), target_, value_, position() + 1); |
| 2163 } | 2168 } |
| 2164 } | 2169 } |
| 2165 | 2170 |
| 2166 private: | 2171 private: |
| 2167 Token::Value op_; | 2172 Token::Value op_; |
| 2168 Expression* target_; | 2173 Expression* target_; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2199 int index() const { | 2204 int index() const { |
| 2200 ASSERT(yield_kind() == DELEGATING); | 2205 ASSERT(yield_kind() == DELEGATING); |
| 2201 return index_; | 2206 return index_; |
| 2202 } | 2207 } |
| 2203 void set_index(int index) { | 2208 void set_index(int index) { |
| 2204 ASSERT(yield_kind() == DELEGATING); | 2209 ASSERT(yield_kind() == DELEGATING); |
| 2205 index_ = index; | 2210 index_ = index; |
| 2206 } | 2211 } |
| 2207 | 2212 |
| 2208 protected: | 2213 protected: |
| 2209 Yield(Isolate* isolate, | 2214 Yield(Zone* zone, |
| 2210 Expression* generator_object, | 2215 Expression* generator_object, |
| 2211 Expression* expression, | 2216 Expression* expression, |
| 2212 Kind yield_kind, | 2217 Kind yield_kind, |
| 2213 int pos) | 2218 int pos) |
| 2214 : Expression(isolate, pos), | 2219 : Expression(zone, pos), |
| 2215 generator_object_(generator_object), | 2220 generator_object_(generator_object), |
| 2216 expression_(expression), | 2221 expression_(expression), |
| 2217 yield_kind_(yield_kind), | 2222 yield_kind_(yield_kind), |
| 2218 index_(-1) { } | 2223 index_(-1) { } |
| 2219 | 2224 |
| 2220 private: | 2225 private: |
| 2221 Expression* generator_object_; | 2226 Expression* generator_object_; |
| 2222 Expression* expression_; | 2227 Expression* expression_; |
| 2223 Kind yield_kind_; | 2228 Kind yield_kind_; |
| 2224 int index_; | 2229 int index_; |
| 2225 }; | 2230 }; |
| 2226 | 2231 |
| 2227 | 2232 |
| 2228 class Throw V8_FINAL : public Expression { | 2233 class Throw V8_FINAL : public Expression { |
| 2229 public: | 2234 public: |
| 2230 DECLARE_NODE_TYPE(Throw) | 2235 DECLARE_NODE_TYPE(Throw) |
| 2231 | 2236 |
| 2232 Expression* exception() const { return exception_; } | 2237 Expression* exception() const { return exception_; } |
| 2233 | 2238 |
| 2234 protected: | 2239 protected: |
| 2235 Throw(Isolate* isolate, Expression* exception, int pos) | 2240 Throw(Zone* zone, Expression* exception, int pos) |
| 2236 : Expression(isolate, pos), exception_(exception) {} | 2241 : Expression(zone, pos), exception_(exception) {} |
| 2237 | 2242 |
| 2238 private: | 2243 private: |
| 2239 Expression* exception_; | 2244 Expression* exception_; |
| 2240 }; | 2245 }; |
| 2241 | 2246 |
| 2242 | 2247 |
| 2243 class FunctionLiteral V8_FINAL : public Expression { | 2248 class FunctionLiteral V8_FINAL : public Expression { |
| 2244 public: | 2249 public: |
| 2245 enum FunctionType { | 2250 enum FunctionType { |
| 2246 ANONYMOUS_EXPRESSION, | 2251 ANONYMOUS_EXPRESSION, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2332 ast_properties_ = *ast_properties; | 2337 ast_properties_ = *ast_properties; |
| 2333 } | 2338 } |
| 2334 | 2339 |
| 2335 bool dont_optimize() { return dont_optimize_reason_ != kNoReason; } | 2340 bool dont_optimize() { return dont_optimize_reason_ != kNoReason; } |
| 2336 BailoutReason dont_optimize_reason() { return dont_optimize_reason_; } | 2341 BailoutReason dont_optimize_reason() { return dont_optimize_reason_; } |
| 2337 void set_dont_optimize_reason(BailoutReason reason) { | 2342 void set_dont_optimize_reason(BailoutReason reason) { |
| 2338 dont_optimize_reason_ = reason; | 2343 dont_optimize_reason_ = reason; |
| 2339 } | 2344 } |
| 2340 | 2345 |
| 2341 protected: | 2346 protected: |
| 2342 FunctionLiteral(Isolate* isolate, | 2347 FunctionLiteral(Zone* zone, |
| 2343 Handle<String> name, | 2348 Handle<String> name, |
| 2344 Scope* scope, | 2349 Scope* scope, |
| 2345 ZoneList<Statement*>* body, | 2350 ZoneList<Statement*>* body, |
| 2346 int materialized_literal_count, | 2351 int materialized_literal_count, |
| 2347 int expected_property_count, | 2352 int expected_property_count, |
| 2348 int handler_count, | 2353 int handler_count, |
| 2349 int parameter_count, | 2354 int parameter_count, |
| 2350 FunctionType function_type, | 2355 FunctionType function_type, |
| 2351 ParameterFlag has_duplicate_parameters, | 2356 ParameterFlag has_duplicate_parameters, |
| 2352 IsFunctionFlag is_function, | 2357 IsFunctionFlag is_function, |
| 2353 IsParenthesizedFlag is_parenthesized, | 2358 IsParenthesizedFlag is_parenthesized, |
| 2354 IsGeneratorFlag is_generator, | 2359 IsGeneratorFlag is_generator, |
| 2355 int position) | 2360 int position) |
| 2356 : Expression(isolate, position), | 2361 : Expression(zone, position), |
| 2357 name_(name), | 2362 name_(name), |
| 2358 scope_(scope), | 2363 scope_(scope), |
| 2359 body_(body), | 2364 body_(body), |
| 2360 inferred_name_(isolate->factory()->empty_string()), | 2365 inferred_name_(zone->isolate()->factory()->empty_string()), |
| 2361 dont_optimize_reason_(kNoReason), | 2366 dont_optimize_reason_(kNoReason), |
| 2362 materialized_literal_count_(materialized_literal_count), | 2367 materialized_literal_count_(materialized_literal_count), |
| 2363 expected_property_count_(expected_property_count), | 2368 expected_property_count_(expected_property_count), |
| 2364 handler_count_(handler_count), | 2369 handler_count_(handler_count), |
| 2365 parameter_count_(parameter_count), | 2370 parameter_count_(parameter_count), |
| 2366 function_token_position_(RelocInfo::kNoPosition) { | 2371 function_token_position_(RelocInfo::kNoPosition) { |
| 2367 bitfield_ = | 2372 bitfield_ = |
| 2368 IsExpression::encode(function_type != DECLARATION) | | 2373 IsExpression::encode(function_type != DECLARATION) | |
| 2369 IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) | | 2374 IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) | |
| 2370 Pretenure::encode(false) | | 2375 Pretenure::encode(false) | |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2401 | 2406 |
| 2402 class NativeFunctionLiteral V8_FINAL : public Expression { | 2407 class NativeFunctionLiteral V8_FINAL : public Expression { |
| 2403 public: | 2408 public: |
| 2404 DECLARE_NODE_TYPE(NativeFunctionLiteral) | 2409 DECLARE_NODE_TYPE(NativeFunctionLiteral) |
| 2405 | 2410 |
| 2406 Handle<String> name() const { return name_; } | 2411 Handle<String> name() const { return name_; } |
| 2407 v8::Extension* extension() const { return extension_; } | 2412 v8::Extension* extension() const { return extension_; } |
| 2408 | 2413 |
| 2409 protected: | 2414 protected: |
| 2410 NativeFunctionLiteral( | 2415 NativeFunctionLiteral( |
| 2411 Isolate* isolate, Handle<String> name, v8::Extension* extension, int pos) | 2416 Zone* zone, Handle<String> name, v8::Extension* extension, int pos) |
| 2412 : Expression(isolate, pos), name_(name), extension_(extension) {} | 2417 : Expression(zone, pos), name_(name), extension_(extension) {} |
| 2413 | 2418 |
| 2414 private: | 2419 private: |
| 2415 Handle<String> name_; | 2420 Handle<String> name_; |
| 2416 v8::Extension* extension_; | 2421 v8::Extension* extension_; |
| 2417 }; | 2422 }; |
| 2418 | 2423 |
| 2419 | 2424 |
| 2420 class ThisFunction V8_FINAL : public Expression { | 2425 class ThisFunction V8_FINAL : public Expression { |
| 2421 public: | 2426 public: |
| 2422 DECLARE_NODE_TYPE(ThisFunction) | 2427 DECLARE_NODE_TYPE(ThisFunction) |
| 2423 | 2428 |
| 2424 protected: | 2429 protected: |
| 2425 explicit ThisFunction(Isolate* isolate, int pos): Expression(isolate, pos) {} | 2430 explicit ThisFunction(Zone* zone, int pos): Expression(zone, pos) {} |
| 2426 }; | 2431 }; |
| 2427 | 2432 |
| 2428 #undef DECLARE_NODE_TYPE | 2433 #undef DECLARE_NODE_TYPE |
| 2429 | 2434 |
| 2430 | 2435 |
| 2431 // ---------------------------------------------------------------------------- | 2436 // ---------------------------------------------------------------------------- |
| 2432 // Regular expressions | 2437 // Regular expressions |
| 2433 | 2438 |
| 2434 | 2439 |
| 2435 class RegExpVisitor BASE_EMBEDDED { | 2440 class RegExpVisitor BASE_EMBEDDED { |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2782 static RegExpEmpty* GetInstance() { | 2787 static RegExpEmpty* GetInstance() { |
| 2783 static RegExpEmpty* instance = ::new RegExpEmpty(); | 2788 static RegExpEmpty* instance = ::new RegExpEmpty(); |
| 2784 return instance; | 2789 return instance; |
| 2785 } | 2790 } |
| 2786 }; | 2791 }; |
| 2787 | 2792 |
| 2788 | 2793 |
| 2789 // ---------------------------------------------------------------------------- | 2794 // ---------------------------------------------------------------------------- |
| 2790 // Out-of-line inline constructors (to side-step cyclic dependencies). | 2795 // Out-of-line inline constructors (to side-step cyclic dependencies). |
| 2791 | 2796 |
| 2792 inline ModuleVariable::ModuleVariable(VariableProxy* proxy, int pos) | 2797 inline ModuleVariable::ModuleVariable(Zone* zone, VariableProxy* proxy, int pos) |
| 2793 : Module(proxy->interface(), pos), | 2798 : Module(zone, proxy->interface(), pos), |
| 2794 proxy_(proxy) { | 2799 proxy_(proxy) { |
| 2795 } | 2800 } |
| 2796 | 2801 |
| 2797 | 2802 |
| 2798 // ---------------------------------------------------------------------------- | 2803 // ---------------------------------------------------------------------------- |
| 2799 // Basic visitor | 2804 // Basic visitor |
| 2800 // - leaf node visitors are abstract. | 2805 // - leaf node visitors are abstract. |
| 2801 | 2806 |
| 2802 class AstVisitor BASE_EMBEDDED { | 2807 class AstVisitor BASE_EMBEDDED { |
| 2803 public: | 2808 public: |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2815 // Individual AST nodes. | 2820 // Individual AST nodes. |
| 2816 #define DEF_VISIT(type) \ | 2821 #define DEF_VISIT(type) \ |
| 2817 virtual void Visit##type(type* node) = 0; | 2822 virtual void Visit##type(type* node) = 0; |
| 2818 AST_NODE_LIST(DEF_VISIT) | 2823 AST_NODE_LIST(DEF_VISIT) |
| 2819 #undef DEF_VISIT | 2824 #undef DEF_VISIT |
| 2820 }; | 2825 }; |
| 2821 | 2826 |
| 2822 | 2827 |
| 2823 #define DEFINE_AST_VISITOR_SUBCLASS_MEMBERS() \ | 2828 #define DEFINE_AST_VISITOR_SUBCLASS_MEMBERS() \ |
| 2824 public: \ | 2829 public: \ |
| 2825 virtual void Visit(AstNode* node) V8_FINAL V8_OVERRIDE { \ | 2830 virtual void Visit(AstNode* node) V8_FINAL V8_OVERRIDE { \ |
| 2826 if (!CheckStackOverflow()) node->Accept(this); \ | 2831 if (!CheckStackOverflow()) node->Accept(this); \ |
| 2827 } \ | 2832 } \ |
| 2828 \ | 2833 \ |
| 2829 void SetStackOverflow() { stack_overflow_ = true; } \ | 2834 void SetStackOverflow() { stack_overflow_ = true; } \ |
| 2830 void ClearStackOverflow() { stack_overflow_ = false; } \ | 2835 void ClearStackOverflow() { stack_overflow_ = false; } \ |
| 2831 bool HasStackOverflow() const { return stack_overflow_; } \ | 2836 bool HasStackOverflow() const { return stack_overflow_; } \ |
| 2832 \ | 2837 \ |
| 2833 bool CheckStackOverflow() { \ | 2838 bool CheckStackOverflow() { \ |
| 2834 if (stack_overflow_) return true; \ | 2839 if (stack_overflow_) return true; \ |
| 2835 StackLimitCheck check(isolate_); \ | 2840 StackLimitCheck check(zone_->isolate()); \ |
| 2836 if (!check.HasOverflowed()) return false; \ | 2841 if (!check.HasOverflowed()) return false; \ |
| 2837 return (stack_overflow_ = true); \ | 2842 return (stack_overflow_ = true); \ |
| 2838 } \ | 2843 } \ |
| 2839 \ | 2844 \ |
| 2840 private: \ | 2845 private: \ |
| 2841 void InitializeAstVisitor(Isolate* isolate) { \ | 2846 void InitializeAstVisitor(Zone* zone) { \ |
| 2842 isolate_ = isolate; \ | 2847 zone_ = zone; \ |
| 2843 stack_overflow_ = false; \ | 2848 stack_overflow_ = false; \ |
| 2844 } \ | 2849 } \ |
| 2845 Isolate* isolate() { return isolate_; } \ | 2850 Zone* zone() { return zone_; } \ |
| 2851 Isolate* isolate() { return zone_->isolate(); } \ |
| 2846 \ | 2852 \ |
| 2847 Isolate* isolate_; \ | 2853 Zone* zone_; \ |
| 2848 bool stack_overflow_ | 2854 bool stack_overflow_ |
| 2849 | 2855 |
| 2850 | 2856 |
| 2851 // ---------------------------------------------------------------------------- | 2857 // ---------------------------------------------------------------------------- |
| 2852 // Construction time visitor. | 2858 // Construction time visitor. |
| 2853 | 2859 |
| 2854 class AstConstructionVisitor BASE_EMBEDDED { | 2860 class AstConstructionVisitor BASE_EMBEDDED { |
| 2855 public: | 2861 public: |
| 2856 AstConstructionVisitor() : dont_optimize_reason_(kNoReason) { } | 2862 AstConstructionVisitor() : dont_optimize_reason_(kNoReason) { } |
| 2857 | 2863 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2888 }; | 2894 }; |
| 2889 | 2895 |
| 2890 | 2896 |
| 2891 | 2897 |
| 2892 // ---------------------------------------------------------------------------- | 2898 // ---------------------------------------------------------------------------- |
| 2893 // AstNode factory | 2899 // AstNode factory |
| 2894 | 2900 |
| 2895 template<class Visitor> | 2901 template<class Visitor> |
| 2896 class AstNodeFactory V8_FINAL BASE_EMBEDDED { | 2902 class AstNodeFactory V8_FINAL BASE_EMBEDDED { |
| 2897 public: | 2903 public: |
| 2898 AstNodeFactory(Isolate* isolate, Zone* zone) | 2904 explicit AstNodeFactory(Zone* zone) : zone_(zone) { } |
| 2899 : isolate_(isolate), | |
| 2900 zone_(zone) { } | |
| 2901 | 2905 |
| 2902 Visitor* visitor() { return &visitor_; } | 2906 Visitor* visitor() { return &visitor_; } |
| 2903 | 2907 |
| 2904 #define VISIT_AND_RETURN(NodeType, node) \ | 2908 #define VISIT_AND_RETURN(NodeType, node) \ |
| 2905 visitor_.Visit##NodeType((node)); \ | 2909 visitor_.Visit##NodeType((node)); \ |
| 2906 return node; | 2910 return node; |
| 2907 | 2911 |
| 2908 VariableDeclaration* NewVariableDeclaration(VariableProxy* proxy, | 2912 VariableDeclaration* NewVariableDeclaration(VariableProxy* proxy, |
| 2909 VariableMode mode, | 2913 VariableMode mode, |
| 2910 Scope* scope, | 2914 Scope* scope, |
| 2911 int pos) { | 2915 int pos) { |
| 2912 VariableDeclaration* decl = | 2916 VariableDeclaration* decl = |
| 2913 new(zone_) VariableDeclaration(proxy, mode, scope, pos); | 2917 new(zone_) VariableDeclaration(zone_, proxy, mode, scope, pos); |
| 2914 VISIT_AND_RETURN(VariableDeclaration, decl) | 2918 VISIT_AND_RETURN(VariableDeclaration, decl) |
| 2915 } | 2919 } |
| 2916 | 2920 |
| 2917 FunctionDeclaration* NewFunctionDeclaration(VariableProxy* proxy, | 2921 FunctionDeclaration* NewFunctionDeclaration(VariableProxy* proxy, |
| 2918 VariableMode mode, | 2922 VariableMode mode, |
| 2919 FunctionLiteral* fun, | 2923 FunctionLiteral* fun, |
| 2920 Scope* scope, | 2924 Scope* scope, |
| 2921 int pos) { | 2925 int pos) { |
| 2922 FunctionDeclaration* decl = | 2926 FunctionDeclaration* decl = |
| 2923 new(zone_) FunctionDeclaration(proxy, mode, fun, scope, pos); | 2927 new(zone_) FunctionDeclaration(zone_, proxy, mode, fun, scope, pos); |
| 2924 VISIT_AND_RETURN(FunctionDeclaration, decl) | 2928 VISIT_AND_RETURN(FunctionDeclaration, decl) |
| 2925 } | 2929 } |
| 2926 | 2930 |
| 2927 ModuleDeclaration* NewModuleDeclaration(VariableProxy* proxy, | 2931 ModuleDeclaration* NewModuleDeclaration(VariableProxy* proxy, |
| 2928 Module* module, | 2932 Module* module, |
| 2929 Scope* scope, | 2933 Scope* scope, |
| 2930 int pos) { | 2934 int pos) { |
| 2931 ModuleDeclaration* decl = | 2935 ModuleDeclaration* decl = |
| 2932 new(zone_) ModuleDeclaration(proxy, module, scope, pos); | 2936 new(zone_) ModuleDeclaration(zone_, proxy, module, scope, pos); |
| 2933 VISIT_AND_RETURN(ModuleDeclaration, decl) | 2937 VISIT_AND_RETURN(ModuleDeclaration, decl) |
| 2934 } | 2938 } |
| 2935 | 2939 |
| 2936 ImportDeclaration* NewImportDeclaration(VariableProxy* proxy, | 2940 ImportDeclaration* NewImportDeclaration(VariableProxy* proxy, |
| 2937 Module* module, | 2941 Module* module, |
| 2938 Scope* scope, | 2942 Scope* scope, |
| 2939 int pos) { | 2943 int pos) { |
| 2940 ImportDeclaration* decl = | 2944 ImportDeclaration* decl = |
| 2941 new(zone_) ImportDeclaration(proxy, module, scope, pos); | 2945 new(zone_) ImportDeclaration(zone_, proxy, module, scope, pos); |
| 2942 VISIT_AND_RETURN(ImportDeclaration, decl) | 2946 VISIT_AND_RETURN(ImportDeclaration, decl) |
| 2943 } | 2947 } |
| 2944 | 2948 |
| 2945 ExportDeclaration* NewExportDeclaration(VariableProxy* proxy, | 2949 ExportDeclaration* NewExportDeclaration(VariableProxy* proxy, |
| 2946 Scope* scope, | 2950 Scope* scope, |
| 2947 int pos) { | 2951 int pos) { |
| 2948 ExportDeclaration* decl = | 2952 ExportDeclaration* decl = |
| 2949 new(zone_) ExportDeclaration(proxy, scope, pos); | 2953 new(zone_) ExportDeclaration(zone_, proxy, scope, pos); |
| 2950 VISIT_AND_RETURN(ExportDeclaration, decl) | 2954 VISIT_AND_RETURN(ExportDeclaration, decl) |
| 2951 } | 2955 } |
| 2952 | 2956 |
| 2953 ModuleLiteral* NewModuleLiteral(Block* body, Interface* interface, int pos) { | 2957 ModuleLiteral* NewModuleLiteral(Block* body, Interface* interface, int pos) { |
| 2954 ModuleLiteral* module = new(zone_) ModuleLiteral(body, interface, pos); | 2958 ModuleLiteral* module = |
| 2959 new(zone_) ModuleLiteral(zone_, body, interface, pos); |
| 2955 VISIT_AND_RETURN(ModuleLiteral, module) | 2960 VISIT_AND_RETURN(ModuleLiteral, module) |
| 2956 } | 2961 } |
| 2957 | 2962 |
| 2958 ModuleVariable* NewModuleVariable(VariableProxy* proxy, int pos) { | 2963 ModuleVariable* NewModuleVariable(VariableProxy* proxy, int pos) { |
| 2959 ModuleVariable* module = new(zone_) ModuleVariable(proxy, pos); | 2964 ModuleVariable* module = new(zone_) ModuleVariable(zone_, proxy, pos); |
| 2960 VISIT_AND_RETURN(ModuleVariable, module) | 2965 VISIT_AND_RETURN(ModuleVariable, module) |
| 2961 } | 2966 } |
| 2962 | 2967 |
| 2963 ModulePath* NewModulePath(Module* origin, Handle<String> name, int pos) { | 2968 ModulePath* NewModulePath(Module* origin, Handle<String> name, int pos) { |
| 2964 ModulePath* module = new(zone_) ModulePath(origin, name, zone_, pos); | 2969 ModulePath* module = new(zone_) ModulePath(zone_, origin, name, pos); |
| 2965 VISIT_AND_RETURN(ModulePath, module) | 2970 VISIT_AND_RETURN(ModulePath, module) |
| 2966 } | 2971 } |
| 2967 | 2972 |
| 2968 ModuleUrl* NewModuleUrl(Handle<String> url, int pos) { | 2973 ModuleUrl* NewModuleUrl(Handle<String> url, int pos) { |
| 2969 ModuleUrl* module = new(zone_) ModuleUrl(url, zone_, pos); | 2974 ModuleUrl* module = new(zone_) ModuleUrl(zone_, url, pos); |
| 2970 VISIT_AND_RETURN(ModuleUrl, module) | 2975 VISIT_AND_RETURN(ModuleUrl, module) |
| 2971 } | 2976 } |
| 2972 | 2977 |
| 2973 Block* NewBlock(ZoneStringList* labels, | 2978 Block* NewBlock(ZoneStringList* labels, |
| 2974 int capacity, | 2979 int capacity, |
| 2975 bool is_initializer_block, | 2980 bool is_initializer_block, |
| 2976 int pos) { | 2981 int pos) { |
| 2977 Block* block = new(zone_) Block( | 2982 Block* block = new(zone_) Block( |
| 2978 isolate_, labels, capacity, is_initializer_block, pos, zone_); | 2983 zone_, labels, capacity, is_initializer_block, pos); |
| 2979 VISIT_AND_RETURN(Block, block) | 2984 VISIT_AND_RETURN(Block, block) |
| 2980 } | 2985 } |
| 2981 | 2986 |
| 2982 #define STATEMENT_WITH_LABELS(NodeType) \ | 2987 #define STATEMENT_WITH_LABELS(NodeType) \ |
| 2983 NodeType* New##NodeType(ZoneStringList* labels, int pos) { \ | 2988 NodeType* New##NodeType(ZoneStringList* labels, int pos) { \ |
| 2984 NodeType* stmt = new(zone_) NodeType(isolate_, labels, pos); \ | 2989 NodeType* stmt = new(zone_) NodeType(zone_, labels, pos); \ |
| 2985 VISIT_AND_RETURN(NodeType, stmt); \ | 2990 VISIT_AND_RETURN(NodeType, stmt); \ |
| 2986 } | 2991 } |
| 2987 STATEMENT_WITH_LABELS(DoWhileStatement) | 2992 STATEMENT_WITH_LABELS(DoWhileStatement) |
| 2988 STATEMENT_WITH_LABELS(WhileStatement) | 2993 STATEMENT_WITH_LABELS(WhileStatement) |
| 2989 STATEMENT_WITH_LABELS(ForStatement) | 2994 STATEMENT_WITH_LABELS(ForStatement) |
| 2990 STATEMENT_WITH_LABELS(SwitchStatement) | 2995 STATEMENT_WITH_LABELS(SwitchStatement) |
| 2991 #undef STATEMENT_WITH_LABELS | 2996 #undef STATEMENT_WITH_LABELS |
| 2992 | 2997 |
| 2993 ForEachStatement* NewForEachStatement(ForEachStatement::VisitMode visit_mode, | 2998 ForEachStatement* NewForEachStatement(ForEachStatement::VisitMode visit_mode, |
| 2994 ZoneStringList* labels, | 2999 ZoneStringList* labels, |
| 2995 int pos) { | 3000 int pos) { |
| 2996 switch (visit_mode) { | 3001 switch (visit_mode) { |
| 2997 case ForEachStatement::ENUMERATE: { | 3002 case ForEachStatement::ENUMERATE: { |
| 2998 ForInStatement* stmt = new(zone_) ForInStatement(isolate_, labels, pos); | 3003 ForInStatement* stmt = new(zone_) ForInStatement(zone_, labels, pos); |
| 2999 VISIT_AND_RETURN(ForInStatement, stmt); | 3004 VISIT_AND_RETURN(ForInStatement, stmt); |
| 3000 } | 3005 } |
| 3001 case ForEachStatement::ITERATE: { | 3006 case ForEachStatement::ITERATE: { |
| 3002 ForOfStatement* stmt = new(zone_) ForOfStatement(isolate_, labels, pos); | 3007 ForOfStatement* stmt = new(zone_) ForOfStatement(zone_, labels, pos); |
| 3003 VISIT_AND_RETURN(ForOfStatement, stmt); | 3008 VISIT_AND_RETURN(ForOfStatement, stmt); |
| 3004 } | 3009 } |
| 3005 } | 3010 } |
| 3006 UNREACHABLE(); | 3011 UNREACHABLE(); |
| 3007 return NULL; | 3012 return NULL; |
| 3008 } | 3013 } |
| 3009 | 3014 |
| 3010 ModuleStatement* NewModuleStatement( | 3015 ModuleStatement* NewModuleStatement( |
| 3011 VariableProxy* proxy, Block* body, int pos) { | 3016 VariableProxy* proxy, Block* body, int pos) { |
| 3012 ModuleStatement* stmt = new(zone_) ModuleStatement(proxy, body, pos); | 3017 ModuleStatement* stmt = new(zone_) ModuleStatement(zone_, proxy, body, pos); |
| 3013 VISIT_AND_RETURN(ModuleStatement, stmt) | 3018 VISIT_AND_RETURN(ModuleStatement, stmt) |
| 3014 } | 3019 } |
| 3015 | 3020 |
| 3016 ExpressionStatement* NewExpressionStatement(Expression* expression, int pos) { | 3021 ExpressionStatement* NewExpressionStatement(Expression* expression, int pos) { |
| 3017 ExpressionStatement* stmt = new(zone_) ExpressionStatement(expression, pos); | 3022 ExpressionStatement* stmt = |
| 3023 new(zone_) ExpressionStatement(zone_, expression, pos); |
| 3018 VISIT_AND_RETURN(ExpressionStatement, stmt) | 3024 VISIT_AND_RETURN(ExpressionStatement, stmt) |
| 3019 } | 3025 } |
| 3020 | 3026 |
| 3021 ContinueStatement* NewContinueStatement(IterationStatement* target, int pos) { | 3027 ContinueStatement* NewContinueStatement(IterationStatement* target, int pos) { |
| 3022 ContinueStatement* stmt = new(zone_) ContinueStatement(target, pos); | 3028 ContinueStatement* stmt = new(zone_) ContinueStatement(zone_, target, pos); |
| 3023 VISIT_AND_RETURN(ContinueStatement, stmt) | 3029 VISIT_AND_RETURN(ContinueStatement, stmt) |
| 3024 } | 3030 } |
| 3025 | 3031 |
| 3026 BreakStatement* NewBreakStatement(BreakableStatement* target, int pos) { | 3032 BreakStatement* NewBreakStatement(BreakableStatement* target, int pos) { |
| 3027 BreakStatement* stmt = new(zone_) BreakStatement(target, pos); | 3033 BreakStatement* stmt = new(zone_) BreakStatement(zone_, target, pos); |
| 3028 VISIT_AND_RETURN(BreakStatement, stmt) | 3034 VISIT_AND_RETURN(BreakStatement, stmt) |
| 3029 } | 3035 } |
| 3030 | 3036 |
| 3031 ReturnStatement* NewReturnStatement(Expression* expression, int pos) { | 3037 ReturnStatement* NewReturnStatement(Expression* expression, int pos) { |
| 3032 ReturnStatement* stmt = new(zone_) ReturnStatement(expression, pos); | 3038 ReturnStatement* stmt = new(zone_) ReturnStatement(zone_, expression, pos); |
| 3033 VISIT_AND_RETURN(ReturnStatement, stmt) | 3039 VISIT_AND_RETURN(ReturnStatement, stmt) |
| 3034 } | 3040 } |
| 3035 | 3041 |
| 3036 WithStatement* NewWithStatement(Scope* scope, | 3042 WithStatement* NewWithStatement(Scope* scope, |
| 3037 Expression* expression, | 3043 Expression* expression, |
| 3038 Statement* statement, | 3044 Statement* statement, |
| 3039 int pos) { | 3045 int pos) { |
| 3040 WithStatement* stmt = new(zone_) WithStatement( | 3046 WithStatement* stmt = new(zone_) WithStatement( |
| 3041 scope, expression, statement, pos); | 3047 zone_, scope, expression, statement, pos); |
| 3042 VISIT_AND_RETURN(WithStatement, stmt) | 3048 VISIT_AND_RETURN(WithStatement, stmt) |
| 3043 } | 3049 } |
| 3044 | 3050 |
| 3045 IfStatement* NewIfStatement(Expression* condition, | 3051 IfStatement* NewIfStatement(Expression* condition, |
| 3046 Statement* then_statement, | 3052 Statement* then_statement, |
| 3047 Statement* else_statement, | 3053 Statement* else_statement, |
| 3048 int pos) { | 3054 int pos) { |
| 3049 IfStatement* stmt = new(zone_) IfStatement( | 3055 IfStatement* stmt = new(zone_) IfStatement( |
| 3050 isolate_, condition, then_statement, else_statement, pos); | 3056 zone_, condition, then_statement, else_statement, pos); |
| 3051 VISIT_AND_RETURN(IfStatement, stmt) | 3057 VISIT_AND_RETURN(IfStatement, stmt) |
| 3052 } | 3058 } |
| 3053 | 3059 |
| 3054 TryCatchStatement* NewTryCatchStatement(int index, | 3060 TryCatchStatement* NewTryCatchStatement(int index, |
| 3055 Block* try_block, | 3061 Block* try_block, |
| 3056 Scope* scope, | 3062 Scope* scope, |
| 3057 Variable* variable, | 3063 Variable* variable, |
| 3058 Block* catch_block, | 3064 Block* catch_block, |
| 3059 int pos) { | 3065 int pos) { |
| 3060 TryCatchStatement* stmt = new(zone_) TryCatchStatement( | 3066 TryCatchStatement* stmt = new(zone_) TryCatchStatement( |
| 3061 index, try_block, scope, variable, catch_block, pos); | 3067 zone_, index, try_block, scope, variable, catch_block, pos); |
| 3062 VISIT_AND_RETURN(TryCatchStatement, stmt) | 3068 VISIT_AND_RETURN(TryCatchStatement, stmt) |
| 3063 } | 3069 } |
| 3064 | 3070 |
| 3065 TryFinallyStatement* NewTryFinallyStatement(int index, | 3071 TryFinallyStatement* NewTryFinallyStatement(int index, |
| 3066 Block* try_block, | 3072 Block* try_block, |
| 3067 Block* finally_block, | 3073 Block* finally_block, |
| 3068 int pos) { | 3074 int pos) { |
| 3069 TryFinallyStatement* stmt = | 3075 TryFinallyStatement* stmt = new(zone_) TryFinallyStatement( |
| 3070 new(zone_) TryFinallyStatement(index, try_block, finally_block, pos); | 3076 zone_, index, try_block, finally_block, pos); |
| 3071 VISIT_AND_RETURN(TryFinallyStatement, stmt) | 3077 VISIT_AND_RETURN(TryFinallyStatement, stmt) |
| 3072 } | 3078 } |
| 3073 | 3079 |
| 3074 DebuggerStatement* NewDebuggerStatement(int pos) { | 3080 DebuggerStatement* NewDebuggerStatement(int pos) { |
| 3075 DebuggerStatement* stmt = new(zone_) DebuggerStatement(pos); | 3081 DebuggerStatement* stmt = new(zone_) DebuggerStatement(zone_, pos); |
| 3076 VISIT_AND_RETURN(DebuggerStatement, stmt) | 3082 VISIT_AND_RETURN(DebuggerStatement, stmt) |
| 3077 } | 3083 } |
| 3078 | 3084 |
| 3079 EmptyStatement* NewEmptyStatement(int pos) { | 3085 EmptyStatement* NewEmptyStatement(int pos) { |
| 3080 return new(zone_) EmptyStatement(pos); | 3086 return new(zone_) EmptyStatement(zone_, pos); |
| 3081 } | 3087 } |
| 3082 | 3088 |
| 3083 CaseClause* NewCaseClause( | 3089 CaseClause* NewCaseClause( |
| 3084 Expression* label, ZoneList<Statement*>* statements, int pos) { | 3090 Expression* label, ZoneList<Statement*>* statements, int pos) { |
| 3085 CaseClause* clause = | 3091 CaseClause* clause = |
| 3086 new(zone_) CaseClause(isolate_, label, statements, pos); | 3092 new(zone_) CaseClause(zone_, label, statements, pos); |
| 3087 VISIT_AND_RETURN(CaseClause, clause) | 3093 VISIT_AND_RETURN(CaseClause, clause) |
| 3088 } | 3094 } |
| 3089 | 3095 |
| 3090 Literal* NewLiteral(Handle<Object> handle, int pos) { | 3096 Literal* NewLiteral(Handle<Object> handle, int pos) { |
| 3091 Literal* lit = new(zone_) Literal(isolate_, handle, pos); | 3097 Literal* lit = new(zone_) Literal(zone_, handle, pos); |
| 3092 VISIT_AND_RETURN(Literal, lit) | 3098 VISIT_AND_RETURN(Literal, lit) |
| 3093 } | 3099 } |
| 3094 | 3100 |
| 3095 Literal* NewNumberLiteral(double number, int pos) { | 3101 Literal* NewNumberLiteral(double number, int pos) { |
| 3096 return NewLiteral(isolate_->factory()->NewNumber(number, TENURED), pos); | 3102 return NewLiteral( |
| 3103 zone_->isolate()->factory()->NewNumber(number, TENURED), pos); |
| 3097 } | 3104 } |
| 3098 | 3105 |
| 3099 ObjectLiteral* NewObjectLiteral( | 3106 ObjectLiteral* NewObjectLiteral( |
| 3100 ZoneList<ObjectLiteral::Property*>* properties, | 3107 ZoneList<ObjectLiteral::Property*>* properties, |
| 3101 int literal_index, | 3108 int literal_index, |
| 3102 int boilerplate_properties, | 3109 int boilerplate_properties, |
| 3103 bool has_function, | 3110 bool has_function, |
| 3104 int pos) { | 3111 int pos) { |
| 3105 ObjectLiteral* lit = new(zone_) ObjectLiteral( | 3112 ObjectLiteral* lit = new(zone_) ObjectLiteral( |
| 3106 isolate_, properties, literal_index, boilerplate_properties, | 3113 zone_, properties, literal_index, boilerplate_properties, |
| 3107 has_function, pos); | 3114 has_function, pos); |
| 3108 VISIT_AND_RETURN(ObjectLiteral, lit) | 3115 VISIT_AND_RETURN(ObjectLiteral, lit) |
| 3109 } | 3116 } |
| 3110 | 3117 |
| 3118 ObjectLiteral::Property* NewObjectLiteralProperty(Literal* key, |
| 3119 Expression* value) { |
| 3120 return new(zone_) ObjectLiteral::Property(zone_, key, value); |
| 3121 } |
| 3122 |
| 3111 ObjectLiteral::Property* NewObjectLiteralProperty(bool is_getter, | 3123 ObjectLiteral::Property* NewObjectLiteralProperty(bool is_getter, |
| 3112 FunctionLiteral* value, | 3124 FunctionLiteral* value, |
| 3113 int pos) { | 3125 int pos) { |
| 3114 ObjectLiteral::Property* prop = | 3126 ObjectLiteral::Property* prop = |
| 3115 new(zone_) ObjectLiteral::Property(is_getter, value); | 3127 new(zone_) ObjectLiteral::Property(zone_, is_getter, value); |
| 3116 prop->set_key(NewLiteral(value->name(), pos)); | 3128 prop->set_key(NewLiteral(value->name(), pos)); |
| 3117 return prop; // Not an AST node, will not be visited. | 3129 return prop; // Not an AST node, will not be visited. |
| 3118 } | 3130 } |
| 3119 | 3131 |
| 3120 RegExpLiteral* NewRegExpLiteral(Handle<String> pattern, | 3132 RegExpLiteral* NewRegExpLiteral(Handle<String> pattern, |
| 3121 Handle<String> flags, | 3133 Handle<String> flags, |
| 3122 int literal_index, | 3134 int literal_index, |
| 3123 int pos) { | 3135 int pos) { |
| 3124 RegExpLiteral* lit = | 3136 RegExpLiteral* lit = |
| 3125 new(zone_) RegExpLiteral(isolate_, pattern, flags, literal_index, pos); | 3137 new(zone_) RegExpLiteral(zone_, pattern, flags, literal_index, pos); |
| 3126 VISIT_AND_RETURN(RegExpLiteral, lit); | 3138 VISIT_AND_RETURN(RegExpLiteral, lit); |
| 3127 } | 3139 } |
| 3128 | 3140 |
| 3129 ArrayLiteral* NewArrayLiteral(ZoneList<Expression*>* values, | 3141 ArrayLiteral* NewArrayLiteral(ZoneList<Expression*>* values, |
| 3130 int literal_index, | 3142 int literal_index, |
| 3131 int pos) { | 3143 int pos) { |
| 3132 ArrayLiteral* lit = new(zone_) ArrayLiteral( | 3144 ArrayLiteral* lit = new(zone_) ArrayLiteral( |
| 3133 isolate_, values, literal_index, pos); | 3145 zone_, values, literal_index, pos); |
| 3134 VISIT_AND_RETURN(ArrayLiteral, lit) | 3146 VISIT_AND_RETURN(ArrayLiteral, lit) |
| 3135 } | 3147 } |
| 3136 | 3148 |
| 3137 VariableProxy* NewVariableProxy(Variable* var, | 3149 VariableProxy* NewVariableProxy(Variable* var, |
| 3138 int pos = RelocInfo::kNoPosition) { | 3150 int pos = RelocInfo::kNoPosition) { |
| 3139 VariableProxy* proxy = new(zone_) VariableProxy(isolate_, var, pos); | 3151 VariableProxy* proxy = new(zone_) VariableProxy(zone_, var, pos); |
| 3140 VISIT_AND_RETURN(VariableProxy, proxy) | 3152 VISIT_AND_RETURN(VariableProxy, proxy) |
| 3141 } | 3153 } |
| 3142 | 3154 |
| 3143 VariableProxy* NewVariableProxy(Handle<String> name, | 3155 VariableProxy* NewVariableProxy(Handle<String> name, |
| 3144 bool is_this, | 3156 bool is_this, |
| 3145 Interface* interface = Interface::NewValue(), | 3157 Interface* interface = Interface::NewValue(), |
| 3146 int position = RelocInfo::kNoPosition) { | 3158 int position = RelocInfo::kNoPosition) { |
| 3147 VariableProxy* proxy = | 3159 VariableProxy* proxy = |
| 3148 new(zone_) VariableProxy(isolate_, name, is_this, interface, position); | 3160 new(zone_) VariableProxy(zone_, name, is_this, interface, position); |
| 3149 VISIT_AND_RETURN(VariableProxy, proxy) | 3161 VISIT_AND_RETURN(VariableProxy, proxy) |
| 3150 } | 3162 } |
| 3151 | 3163 |
| 3152 Property* NewProperty(Expression* obj, Expression* key, int pos) { | 3164 Property* NewProperty(Expression* obj, Expression* key, int pos) { |
| 3153 Property* prop = new(zone_) Property(isolate_, obj, key, pos); | 3165 Property* prop = new(zone_) Property(zone_, obj, key, pos); |
| 3154 VISIT_AND_RETURN(Property, prop) | 3166 VISIT_AND_RETURN(Property, prop) |
| 3155 } | 3167 } |
| 3156 | 3168 |
| 3157 Call* NewCall(Expression* expression, | 3169 Call* NewCall(Expression* expression, |
| 3158 ZoneList<Expression*>* arguments, | 3170 ZoneList<Expression*>* arguments, |
| 3159 int pos) { | 3171 int pos) { |
| 3160 Call* call = new(zone_) Call(isolate_, expression, arguments, pos); | 3172 Call* call = new(zone_) Call(zone_, expression, arguments, pos); |
| 3161 VISIT_AND_RETURN(Call, call) | 3173 VISIT_AND_RETURN(Call, call) |
| 3162 } | 3174 } |
| 3163 | 3175 |
| 3164 CallNew* NewCallNew(Expression* expression, | 3176 CallNew* NewCallNew(Expression* expression, |
| 3165 ZoneList<Expression*>* arguments, | 3177 ZoneList<Expression*>* arguments, |
| 3166 int pos) { | 3178 int pos) { |
| 3167 CallNew* call = new(zone_) CallNew(isolate_, expression, arguments, pos); | 3179 CallNew* call = new(zone_) CallNew(zone_, expression, arguments, pos); |
| 3168 VISIT_AND_RETURN(CallNew, call) | 3180 VISIT_AND_RETURN(CallNew, call) |
| 3169 } | 3181 } |
| 3170 | 3182 |
| 3171 CallRuntime* NewCallRuntime(Handle<String> name, | 3183 CallRuntime* NewCallRuntime(Handle<String> name, |
| 3172 const Runtime::Function* function, | 3184 const Runtime::Function* function, |
| 3173 ZoneList<Expression*>* arguments, | 3185 ZoneList<Expression*>* arguments, |
| 3174 int pos) { | 3186 int pos) { |
| 3175 CallRuntime* call = | 3187 CallRuntime* call = |
| 3176 new(zone_) CallRuntime(isolate_, name, function, arguments, pos); | 3188 new(zone_) CallRuntime(zone_, name, function, arguments, pos); |
| 3177 VISIT_AND_RETURN(CallRuntime, call) | 3189 VISIT_AND_RETURN(CallRuntime, call) |
| 3178 } | 3190 } |
| 3179 | 3191 |
| 3180 UnaryOperation* NewUnaryOperation(Token::Value op, | 3192 UnaryOperation* NewUnaryOperation(Token::Value op, |
| 3181 Expression* expression, | 3193 Expression* expression, |
| 3182 int pos) { | 3194 int pos) { |
| 3183 UnaryOperation* node = | 3195 UnaryOperation* node = |
| 3184 new(zone_) UnaryOperation(isolate_, op, expression, pos); | 3196 new(zone_) UnaryOperation(zone_, op, expression, pos); |
| 3185 VISIT_AND_RETURN(UnaryOperation, node) | 3197 VISIT_AND_RETURN(UnaryOperation, node) |
| 3186 } | 3198 } |
| 3187 | 3199 |
| 3188 BinaryOperation* NewBinaryOperation(Token::Value op, | 3200 BinaryOperation* NewBinaryOperation(Token::Value op, |
| 3189 Expression* left, | 3201 Expression* left, |
| 3190 Expression* right, | 3202 Expression* right, |
| 3191 int pos) { | 3203 int pos) { |
| 3192 BinaryOperation* node = | 3204 BinaryOperation* node = |
| 3193 new(zone_) BinaryOperation(isolate_, op, left, right, pos); | 3205 new(zone_) BinaryOperation(zone_, op, left, right, pos); |
| 3194 VISIT_AND_RETURN(BinaryOperation, node) | 3206 VISIT_AND_RETURN(BinaryOperation, node) |
| 3195 } | 3207 } |
| 3196 | 3208 |
| 3197 CountOperation* NewCountOperation(Token::Value op, | 3209 CountOperation* NewCountOperation(Token::Value op, |
| 3198 bool is_prefix, | 3210 bool is_prefix, |
| 3199 Expression* expr, | 3211 Expression* expr, |
| 3200 int pos) { | 3212 int pos) { |
| 3201 CountOperation* node = | 3213 CountOperation* node = |
| 3202 new(zone_) CountOperation(isolate_, op, is_prefix, expr, pos); | 3214 new(zone_) CountOperation(zone_, op, is_prefix, expr, pos); |
| 3203 VISIT_AND_RETURN(CountOperation, node) | 3215 VISIT_AND_RETURN(CountOperation, node) |
| 3204 } | 3216 } |
| 3205 | 3217 |
| 3206 CompareOperation* NewCompareOperation(Token::Value op, | 3218 CompareOperation* NewCompareOperation(Token::Value op, |
| 3207 Expression* left, | 3219 Expression* left, |
| 3208 Expression* right, | 3220 Expression* right, |
| 3209 int pos) { | 3221 int pos) { |
| 3210 CompareOperation* node = | 3222 CompareOperation* node = |
| 3211 new(zone_) CompareOperation(isolate_, op, left, right, pos); | 3223 new(zone_) CompareOperation(zone_, op, left, right, pos); |
| 3212 VISIT_AND_RETURN(CompareOperation, node) | 3224 VISIT_AND_RETURN(CompareOperation, node) |
| 3213 } | 3225 } |
| 3214 | 3226 |
| 3215 Conditional* NewConditional(Expression* condition, | 3227 Conditional* NewConditional(Expression* condition, |
| 3216 Expression* then_expression, | 3228 Expression* then_expression, |
| 3217 Expression* else_expression, | 3229 Expression* else_expression, |
| 3218 int position) { | 3230 int position) { |
| 3219 Conditional* cond = new(zone_) Conditional( | 3231 Conditional* cond = new(zone_) Conditional( |
| 3220 isolate_, condition, then_expression, else_expression, position); | 3232 zone_, condition, then_expression, else_expression, position); |
| 3221 VISIT_AND_RETURN(Conditional, cond) | 3233 VISIT_AND_RETURN(Conditional, cond) |
| 3222 } | 3234 } |
| 3223 | 3235 |
| 3224 Assignment* NewAssignment(Token::Value op, | 3236 Assignment* NewAssignment(Token::Value op, |
| 3225 Expression* target, | 3237 Expression* target, |
| 3226 Expression* value, | 3238 Expression* value, |
| 3227 int pos) { | 3239 int pos) { |
| 3228 Assignment* assign = | 3240 Assignment* assign = |
| 3229 new(zone_) Assignment(isolate_, op, target, value, pos); | 3241 new(zone_) Assignment(zone_, op, target, value, pos); |
| 3230 assign->Init(isolate_, this); | 3242 assign->Init(zone_, this); |
| 3231 VISIT_AND_RETURN(Assignment, assign) | 3243 VISIT_AND_RETURN(Assignment, assign) |
| 3232 } | 3244 } |
| 3233 | 3245 |
| 3234 Yield* NewYield(Expression *generator_object, | 3246 Yield* NewYield(Expression *generator_object, |
| 3235 Expression* expression, | 3247 Expression* expression, |
| 3236 Yield::Kind yield_kind, | 3248 Yield::Kind yield_kind, |
| 3237 int pos) { | 3249 int pos) { |
| 3238 Yield* yield = new(zone_) Yield( | 3250 Yield* yield = new(zone_) Yield( |
| 3239 isolate_, generator_object, expression, yield_kind, pos); | 3251 zone_, generator_object, expression, yield_kind, pos); |
| 3240 VISIT_AND_RETURN(Yield, yield) | 3252 VISIT_AND_RETURN(Yield, yield) |
| 3241 } | 3253 } |
| 3242 | 3254 |
| 3243 Throw* NewThrow(Expression* exception, int pos) { | 3255 Throw* NewThrow(Expression* exception, int pos) { |
| 3244 Throw* t = new(zone_) Throw(isolate_, exception, pos); | 3256 Throw* t = new(zone_) Throw(zone_, exception, pos); |
| 3245 VISIT_AND_RETURN(Throw, t) | 3257 VISIT_AND_RETURN(Throw, t) |
| 3246 } | 3258 } |
| 3247 | 3259 |
| 3248 FunctionLiteral* NewFunctionLiteral( | 3260 FunctionLiteral* NewFunctionLiteral( |
| 3249 Handle<String> name, | 3261 Handle<String> name, |
| 3250 Scope* scope, | 3262 Scope* scope, |
| 3251 ZoneList<Statement*>* body, | 3263 ZoneList<Statement*>* body, |
| 3252 int materialized_literal_count, | 3264 int materialized_literal_count, |
| 3253 int expected_property_count, | 3265 int expected_property_count, |
| 3254 int handler_count, | 3266 int handler_count, |
| 3255 int parameter_count, | 3267 int parameter_count, |
| 3256 FunctionLiteral::ParameterFlag has_duplicate_parameters, | 3268 FunctionLiteral::ParameterFlag has_duplicate_parameters, |
| 3257 FunctionLiteral::FunctionType function_type, | 3269 FunctionLiteral::FunctionType function_type, |
| 3258 FunctionLiteral::IsFunctionFlag is_function, | 3270 FunctionLiteral::IsFunctionFlag is_function, |
| 3259 FunctionLiteral::IsParenthesizedFlag is_parenthesized, | 3271 FunctionLiteral::IsParenthesizedFlag is_parenthesized, |
| 3260 FunctionLiteral::IsGeneratorFlag is_generator, | 3272 FunctionLiteral::IsGeneratorFlag is_generator, |
| 3261 int position) { | 3273 int position) { |
| 3262 FunctionLiteral* lit = new(zone_) FunctionLiteral( | 3274 FunctionLiteral* lit = new(zone_) FunctionLiteral( |
| 3263 isolate_, name, scope, body, | 3275 zone_, name, scope, body, |
| 3264 materialized_literal_count, expected_property_count, handler_count, | 3276 materialized_literal_count, expected_property_count, handler_count, |
| 3265 parameter_count, function_type, has_duplicate_parameters, is_function, | 3277 parameter_count, function_type, has_duplicate_parameters, is_function, |
| 3266 is_parenthesized, is_generator, position); | 3278 is_parenthesized, is_generator, position); |
| 3267 // Top-level literal doesn't count for the AST's properties. | 3279 // Top-level literal doesn't count for the AST's properties. |
| 3268 if (is_function == FunctionLiteral::kIsFunction) { | 3280 if (is_function == FunctionLiteral::kIsFunction) { |
| 3269 visitor_.VisitFunctionLiteral(lit); | 3281 visitor_.VisitFunctionLiteral(lit); |
| 3270 } | 3282 } |
| 3271 return lit; | 3283 return lit; |
| 3272 } | 3284 } |
| 3273 | 3285 |
| 3274 NativeFunctionLiteral* NewNativeFunctionLiteral( | 3286 NativeFunctionLiteral* NewNativeFunctionLiteral( |
| 3275 Handle<String> name, v8::Extension* extension, int pos) { | 3287 Handle<String> name, v8::Extension* extension, int pos) { |
| 3276 NativeFunctionLiteral* lit = | 3288 NativeFunctionLiteral* lit = |
| 3277 new(zone_) NativeFunctionLiteral(isolate_, name, extension, pos); | 3289 new(zone_) NativeFunctionLiteral(zone_, name, extension, pos); |
| 3278 VISIT_AND_RETURN(NativeFunctionLiteral, lit) | 3290 VISIT_AND_RETURN(NativeFunctionLiteral, lit) |
| 3279 } | 3291 } |
| 3280 | 3292 |
| 3281 ThisFunction* NewThisFunction(int pos) { | 3293 ThisFunction* NewThisFunction(int pos) { |
| 3282 ThisFunction* fun = new(zone_) ThisFunction(isolate_, pos); | 3294 ThisFunction* fun = new(zone_) ThisFunction(zone_, pos); |
| 3283 VISIT_AND_RETURN(ThisFunction, fun) | 3295 VISIT_AND_RETURN(ThisFunction, fun) |
| 3284 } | 3296 } |
| 3285 | 3297 |
| 3286 #undef VISIT_AND_RETURN | 3298 #undef VISIT_AND_RETURN |
| 3287 | 3299 |
| 3288 private: | 3300 private: |
| 3289 Isolate* isolate_; | |
| 3290 Zone* zone_; | 3301 Zone* zone_; |
| 3291 Visitor visitor_; | 3302 Visitor visitor_; |
| 3292 }; | 3303 }; |
| 3293 | 3304 |
| 3294 | 3305 |
| 3295 } } // namespace v8::internal | 3306 } } // namespace v8::internal |
| 3296 | 3307 |
| 3297 #endif // V8_AST_H_ | 3308 #endif // V8_AST_H_ |
| OLD | NEW |