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

Side by Side Diff: src/parser.h

Issue 203193004: Move ParseUnaryExpression into ParserBase and add tests. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: oops Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | 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 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 function_state->saved_ast_node_id_); 449 function_state->saved_ast_node_id_);
450 } 450 }
451 } 451 }
452 452
453 // Helper functions for recursive descent. 453 // Helper functions for recursive descent.
454 bool IsEvalOrArguments(Handle<String> identifier) const; 454 bool IsEvalOrArguments(Handle<String> identifier) const;
455 455
456 // Returns true if the expression is of type "this.foo". 456 // Returns true if the expression is of type "this.foo".
457 static bool IsThisProperty(Expression* expression); 457 static bool IsThisProperty(Expression* expression);
458 458
459 static bool IsIdentifier(Expression* expression);
460
459 static bool IsBoilerplateProperty(ObjectLiteral::Property* property) { 461 static bool IsBoilerplateProperty(ObjectLiteral::Property* property) {
460 return ObjectLiteral::IsBoilerplateProperty(property); 462 return ObjectLiteral::IsBoilerplateProperty(property);
461 } 463 }
462 464
463 static bool IsArrayIndex(Handle<String> string, uint32_t* index) { 465 static bool IsArrayIndex(Handle<String> string, uint32_t* index) {
464 return !string.is_null() && string->AsArrayIndex(index); 466 return !string.is_null() && string->AsArrayIndex(index);
465 } 467 }
466 468
467 // Functions for encapsulating the differences between parsing and preparsing; 469 // Functions for encapsulating the differences between parsing and preparsing;
468 // operations interleaved with the recursive descent. 470 // operations interleaved with the recursive descent.
(...skipping 29 matching lines...) Expand all
498 // in strict mode. 500 // in strict mode.
499 void CheckStrictModeLValue(Expression*expression, bool* ok); 501 void CheckStrictModeLValue(Expression*expression, bool* ok);
500 502
501 // Returns true if we have a binary expression between two numeric 503 // Returns true if we have a binary expression between two numeric
502 // literals. In that case, *x will be changed to an expression which is the 504 // literals. In that case, *x will be changed to an expression which is the
503 // computed value. 505 // computed value.
504 bool ShortcutNumericLiteralBinaryExpression( 506 bool ShortcutNumericLiteralBinaryExpression(
505 Expression** x, Expression* y, Token::Value op, int pos, 507 Expression** x, Expression* y, Token::Value op, int pos,
506 AstNodeFactory<AstConstructionVisitor>* factory); 508 AstNodeFactory<AstConstructionVisitor>* factory);
507 509
510 // Returns true if we can shortcut the unary expression ("not <literal>" or
511 // "+/- <numeric literal>"). In that case, *expression will be changed to the
512 // shortcut.
513 bool ShortcutLiteralUnaryExpression(
rossberg 2014/03/19 11:41:46 Nit: not sure I like the name. This is doing const
514 Expression** expression, Token::Value op, int pos,
515 AstNodeFactory<AstConstructionVisitor>* factory);
516
517 // Returns true if we can desugar '+foo' into 'foo*1' (plus other similar
518 // constructs). This enables the collection of type feedback without any
519 // special stub and the multiplication is removed later in Crankshaft's
520 // canonicalization pass.
521 bool AddUnaryExpressionTypeFeedback(
rossberg 2014/03/19 11:41:46 Similarly here. I'd perhaps call this RewriteUnary
marja 2014/03/19 12:12:43 Done.
522 Expression** expression, Token::Value op, int pos,
523 AstNodeFactory<AstConstructionVisitor>* factory);
524
508 // Reporting errors. 525 // Reporting errors.
509 void ReportMessageAt(Scanner::Location source_location, 526 void ReportMessageAt(Scanner::Location source_location,
510 const char* message, 527 const char* message,
511 Vector<const char*> args, 528 Vector<const char*> args,
512 bool is_reference_error = false); 529 bool is_reference_error = false);
513 void ReportMessage(const char* message, 530 void ReportMessage(const char* message,
514 Vector<Handle<String> > args, 531 Vector<Handle<String> > args,
515 bool is_reference_error = false); 532 bool is_reference_error = false);
516 void ReportMessageAt(Scanner::Location source_location, 533 void ReportMessageAt(Scanner::Location source_location,
517 const char* message, 534 const char* message,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 // Temporary glue; these functions will move to ParserBase. 578 // Temporary glue; these functions will move to ParserBase.
562 Expression* ParseV8Intrinsic(bool* ok); 579 Expression* ParseV8Intrinsic(bool* ok);
563 FunctionLiteral* ParseFunctionLiteral( 580 FunctionLiteral* ParseFunctionLiteral(
564 Handle<String> name, 581 Handle<String> name,
565 Scanner::Location function_name_location, 582 Scanner::Location function_name_location,
566 bool name_is_strict_reserved, 583 bool name_is_strict_reserved,
567 bool is_generator, 584 bool is_generator,
568 int function_token_position, 585 int function_token_position,
569 FunctionLiteral::FunctionType type, 586 FunctionLiteral::FunctionType type,
570 bool* ok); 587 bool* ok);
571 Expression* ParseUnaryExpression(bool* ok); 588 Expression* ParsePostfixExpression(bool* ok);
572 589
573 private: 590 private:
574 Parser* parser_; 591 Parser* parser_;
575 }; 592 };
576 593
577 594
578 class Parser : public ParserBase<ParserTraits> { 595 class Parser : public ParserBase<ParserTraits> {
579 public: 596 public:
580 explicit Parser(CompilationInfo* info); 597 explicit Parser(CompilationInfo* info);
581 ~Parser() { 598 ~Parser() {
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 private: 853 private:
837 static const int kLiteralTypeSlot = 0; 854 static const int kLiteralTypeSlot = 0;
838 static const int kElementsSlot = 1; 855 static const int kElementsSlot = 1;
839 856
840 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); 857 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue);
841 }; 858 };
842 859
843 } } // namespace v8::internal 860 } } // namespace v8::internal
844 861
845 #endif // V8_PARSER_H_ 862 #endif // V8_PARSER_H_
OLDNEW
« no previous file with comments | « no previous file | src/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698