Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: src/parser.h

Issue 13542002: Calling a generator function returns a generator object (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: Fix nits; generator object fields are undefined if not set Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects-visiting.cc ('k') | src/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 kHasInitializers, 481 kHasInitializers,
482 kHasNoInitializers 482 kHasNoInitializers
483 }; 483 };
484 484
485 class BlockState; 485 class BlockState;
486 486
487 class FunctionState BASE_EMBEDDED { 487 class FunctionState BASE_EMBEDDED {
488 public: 488 public:
489 FunctionState(Parser* parser, 489 FunctionState(Parser* parser,
490 Scope* scope, 490 Scope* scope,
491 bool is_generator,
492 Isolate* isolate); 491 Isolate* isolate);
493 ~FunctionState(); 492 ~FunctionState();
494 493
495 int NextMaterializedLiteralIndex() { 494 int NextMaterializedLiteralIndex() {
496 return next_materialized_literal_index_++; 495 return next_materialized_literal_index_++;
497 } 496 }
498 int materialized_literal_count() { 497 int materialized_literal_count() {
499 return next_materialized_literal_index_ - JSFunction::kLiteralsPrefixSize; 498 return next_materialized_literal_index_ - JSFunction::kLiteralsPrefixSize;
500 } 499 }
501 500
(...skipping 10 matching lines...) Expand all
512 bool only_simple_this_property_assignments() { 511 bool only_simple_this_property_assignments() {
513 return only_simple_this_property_assignments_; 512 return only_simple_this_property_assignments_;
514 } 513 }
515 Handle<FixedArray> this_property_assignments() { 514 Handle<FixedArray> this_property_assignments() {
516 return this_property_assignments_; 515 return this_property_assignments_;
517 } 516 }
518 517
519 void AddProperty() { expected_property_count_++; } 518 void AddProperty() { expected_property_count_++; }
520 int expected_property_count() { return expected_property_count_; } 519 int expected_property_count() { return expected_property_count_; }
521 520
522 bool is_generator() const { return is_generator_; } 521 void set_generator_object_variable(Variable *variable) {
522 ASSERT(variable != NULL);
523 ASSERT(!is_generator());
524 generator_object_variable_ = variable;
525 }
526 Variable* generator_object_variable() const {
527 return generator_object_variable_;
528 }
529 bool is_generator() const {
530 return generator_object_variable_ != NULL;
531 }
523 532
524 AstNodeFactory<AstConstructionVisitor>* factory() { return &factory_; } 533 AstNodeFactory<AstConstructionVisitor>* factory() { return &factory_; }
525 534
526 private: 535 private:
527 // Used to assign an index to each literal that needs materialization in 536 // Used to assign an index to each literal that needs materialization in
528 // the function. Includes regexp literals, and boilerplate for object and 537 // the function. Includes regexp literals, and boilerplate for object and
529 // array literals. 538 // array literals.
530 int next_materialized_literal_index_; 539 int next_materialized_literal_index_;
531 540
532 // Used to assign a per-function index to try and catch handlers. 541 // Used to assign a per-function index to try and catch handlers.
533 int next_handler_index_; 542 int next_handler_index_;
534 543
535 // Properties count estimation. 544 // Properties count estimation.
536 int expected_property_count_; 545 int expected_property_count_;
537 546
538 // Indicates that this function is a generator.
539 bool is_generator_;
540
541 // Keeps track of assignments to properties of this. Used for 547 // Keeps track of assignments to properties of this. Used for
542 // optimizing constructors. 548 // optimizing constructors.
543 bool only_simple_this_property_assignments_; 549 bool only_simple_this_property_assignments_;
544 Handle<FixedArray> this_property_assignments_; 550 Handle<FixedArray> this_property_assignments_;
545 551
552 // For generators, the variable that holds the generator object. This
553 // variable is used by yield expressions and return statements. NULL
554 // indicates that this function is not a generator.
555 Variable* generator_object_variable_;
556
546 Parser* parser_; 557 Parser* parser_;
547 FunctionState* outer_function_state_; 558 FunctionState* outer_function_state_;
548 Scope* outer_scope_; 559 Scope* outer_scope_;
549 int saved_ast_node_id_; 560 int saved_ast_node_id_;
550 AstNodeFactory<AstConstructionVisitor> factory_; 561 AstNodeFactory<AstConstructionVisitor> factory_;
551 }; 562 };
552 563
553 class ParsingModeScope BASE_EMBEDDED { 564 class ParsingModeScope BASE_EMBEDDED {
554 public: 565 public:
555 ParsingModeScope(Parser* parser, Mode mode) 566 ParsingModeScope(Parser* parser, Mode mode)
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 private: 913 private:
903 static const int kTypeSlot = 0; 914 static const int kTypeSlot = 0;
904 static const int kElementsSlot = 1; 915 static const int kElementsSlot = 1;
905 916
906 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); 917 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue);
907 }; 918 };
908 919
909 } } // namespace v8::internal 920 } } // namespace v8::internal
910 921
911 #endif // V8_PARSER_H_ 922 #endif // V8_PARSER_H_
OLDNEW
« no previous file with comments | « src/objects-visiting.cc ('k') | src/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698