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

Side by Side Diff: src/parser.cc

Issue 1210533003: Use C runtime functions for ThrowNewXXError desugarings. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 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/parser.h ('k') | src/runtime/runtime.h » ('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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/ast.h" 8 #include "src/ast.h"
9 #include "src/bailout-reason.h" 9 #include "src/bailout-reason.h"
10 #include "src/base/platform/platform.h" 10 #include "src/base/platform/platform.h"
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 if (op == Token::BIT_NOT) { 638 if (op == Token::BIT_NOT) {
639 return factory->NewBinaryOperation( 639 return factory->NewBinaryOperation(
640 Token::BIT_XOR, expression, factory->NewNumberLiteral(~0, pos), pos); 640 Token::BIT_XOR, expression, factory->NewNumberLiteral(~0, pos), pos);
641 } 641 }
642 return factory->NewUnaryOperation(op, expression, pos); 642 return factory->NewUnaryOperation(op, expression, pos);
643 } 643 }
644 644
645 645
646 Expression* ParserTraits::NewThrowReferenceError( 646 Expression* ParserTraits::NewThrowReferenceError(
647 MessageTemplate::Template message, int pos) { 647 MessageTemplate::Template message, int pos) {
648 return NewThrowError( 648 return NewThrowError(Runtime::kNewReferenceError, message,
649 parser_->ast_value_factory()->make_reference_error_string(), message, 649 parser_->ast_value_factory()->empty_string(), pos);
650 parser_->ast_value_factory()->empty_string(), pos);
651 } 650 }
652 651
653 652
654 Expression* ParserTraits::NewThrowSyntaxError(MessageTemplate::Template message, 653 Expression* ParserTraits::NewThrowSyntaxError(MessageTemplate::Template message,
655 const AstRawString* arg, 654 const AstRawString* arg,
656 int pos) { 655 int pos) {
657 return NewThrowError(parser_->ast_value_factory()->make_syntax_error_string(), 656 return NewThrowError(Runtime::kNewSyntaxError, message, arg, pos);
658 message, arg, pos);
659 } 657 }
660 658
661 659
662 Expression* ParserTraits::NewThrowTypeError(MessageTemplate::Template message, 660 Expression* ParserTraits::NewThrowTypeError(MessageTemplate::Template message,
663 const AstRawString* arg, int pos) { 661 const AstRawString* arg, int pos) {
664 return NewThrowError(parser_->ast_value_factory()->make_type_error_string(), 662 return NewThrowError(Runtime::kNewTypeError, message, arg, pos);
665 message, arg, pos);
666 } 663 }
667 664
668 665
669 Expression* ParserTraits::NewThrowError(const AstRawString* constructor, 666 Expression* ParserTraits::NewThrowError(Runtime::FunctionId id,
670 MessageTemplate::Template message, 667 MessageTemplate::Template message,
671 const AstRawString* arg, int pos) { 668 const AstRawString* arg, int pos) {
672 Zone* zone = parser_->zone(); 669 Zone* zone = parser_->zone();
673 ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(2, zone); 670 ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(2, zone);
674 args->Add(parser_->factory()->NewSmiLiteral(message, pos), zone); 671 args->Add(parser_->factory()->NewSmiLiteral(message, pos), zone);
675 args->Add(parser_->factory()->NewStringLiteral(arg, pos), zone); 672 args->Add(parser_->factory()->NewStringLiteral(arg, pos), zone);
676 CallRuntime* call_constructor = 673 CallRuntime* call_constructor = parser_->factory()->NewCallRuntime(
677 parser_->factory()->NewCallRuntime(constructor, NULL, args, pos); 674 parser_->ast_value_factory()->empty_string(), Runtime::FunctionForId(id),
675 args, pos);
678 return parser_->factory()->NewThrow(call_constructor, pos); 676 return parser_->factory()->NewThrow(call_constructor, pos);
679 } 677 }
680 678
681 679
682 void ParserTraits::ReportMessageAt(Scanner::Location source_location, 680 void ParserTraits::ReportMessageAt(Scanner::Location source_location,
683 MessageTemplate::Template message, 681 MessageTemplate::Template message,
684 const char* arg, ParseErrorType error_type) { 682 const char* arg, ParseErrorType error_type) {
685 if (parser_->stack_overflow()) { 683 if (parser_->stack_overflow()) {
686 // Suppress the error message (syntax error or such) in the presence of a 684 // Suppress the error message (syntax error or such) in the presence of a
687 // stack overflow. The isolate allows only one pending exception at at time 685 // stack overflow. The isolate allows only one pending exception at at time
(...skipping 5210 matching lines...) Expand 10 before | Expand all | Expand 10 after
5898 Expression* Parser::SpreadCallNew(Expression* function, 5896 Expression* Parser::SpreadCallNew(Expression* function,
5899 ZoneList<v8::internal::Expression*>* args, 5897 ZoneList<v8::internal::Expression*>* args,
5900 int pos) { 5898 int pos) {
5901 args->InsertAt(0, function, zone()); 5899 args->InsertAt(0, function, zone());
5902 5900
5903 return factory()->NewCallRuntime( 5901 return factory()->NewCallRuntime(
5904 ast_value_factory()->reflect_construct_string(), NULL, args, pos); 5902 ast_value_factory()->reflect_construct_string(), NULL, args, pos);
5905 } 5903 }
5906 } // namespace internal 5904 } // namespace internal
5907 } // namespace v8 5905 } // namespace v8
OLDNEW
« no previous file with comments | « src/parser.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698