| 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 3451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3462 // DebuggerStatement :: | 3462 // DebuggerStatement :: |
| 3463 // 'debugger' ';' | 3463 // 'debugger' ';' |
| 3464 | 3464 |
| 3465 int pos = peek_position(); | 3465 int pos = peek_position(); |
| 3466 Expect(Token::DEBUGGER, CHECK_OK); | 3466 Expect(Token::DEBUGGER, CHECK_OK); |
| 3467 ExpectSemicolon(CHECK_OK); | 3467 ExpectSemicolon(CHECK_OK); |
| 3468 return factory()->NewDebuggerStatement(pos); | 3468 return factory()->NewDebuggerStatement(pos); |
| 3469 } | 3469 } |
| 3470 | 3470 |
| 3471 | 3471 |
| 3472 void Parser::ReportUnexpectedToken(Token::Value token) { | |
| 3473 // We don't report stack overflows here, to avoid increasing the | |
| 3474 // stack depth even further. Instead we report it after parsing is | |
| 3475 // over, in ParseProgram/ParseJson. | |
| 3476 if (token == Token::ILLEGAL && stack_overflow()) return; | |
| 3477 // Four of the tokens are treated specially | |
| 3478 switch (token) { | |
| 3479 case Token::EOS: | |
| 3480 return ReportMessage("unexpected_eos", Vector<const char*>::empty()); | |
| 3481 case Token::NUMBER: | |
| 3482 return ReportMessage("unexpected_token_number", | |
| 3483 Vector<const char*>::empty()); | |
| 3484 case Token::STRING: | |
| 3485 return ReportMessage("unexpected_token_string", | |
| 3486 Vector<const char*>::empty()); | |
| 3487 case Token::IDENTIFIER: | |
| 3488 return ReportMessage("unexpected_token_identifier", | |
| 3489 Vector<const char*>::empty()); | |
| 3490 case Token::FUTURE_RESERVED_WORD: | |
| 3491 return ReportMessage("unexpected_reserved", | |
| 3492 Vector<const char*>::empty()); | |
| 3493 case Token::YIELD: | |
| 3494 case Token::FUTURE_STRICT_RESERVED_WORD: | |
| 3495 return ReportMessage(top_scope_->is_classic_mode() ? | |
| 3496 "unexpected_token_identifier" : | |
| 3497 "unexpected_strict_reserved", | |
| 3498 Vector<const char*>::empty()); | |
| 3499 default: | |
| 3500 const char* name = Token::String(token); | |
| 3501 ASSERT(name != NULL); | |
| 3502 ReportMessage("unexpected_token", Vector<const char*>(&name, 1)); | |
| 3503 } | |
| 3504 } | |
| 3505 | |
| 3506 | |
| 3507 void Parser::ReportInvalidPreparseData(Handle<String> name, bool* ok) { | 3472 void Parser::ReportInvalidPreparseData(Handle<String> name, bool* ok) { |
| 3508 SmartArrayPointer<char> name_string = name->ToCString(DISALLOW_NULLS); | 3473 SmartArrayPointer<char> name_string = name->ToCString(DISALLOW_NULLS); |
| 3509 const char* element[1] = { name_string.get() }; | 3474 const char* element[1] = { name_string.get() }; |
| 3510 ReportMessage("invalid_preparser_data", | 3475 ReportMessage("invalid_preparser_data", |
| 3511 Vector<const char*>(element, 1)); | 3476 Vector<const char*>(element, 1)); |
| 3512 *ok = false; | 3477 *ok = false; |
| 3513 } | 3478 } |
| 3514 | 3479 |
| 3515 | 3480 |
| 3516 Expression* Parser::ParsePrimaryExpression(bool* ok) { | 3481 Expression* Parser::ParsePrimaryExpression(bool* ok) { |
| (...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4478 void ParserBase::ExpectContextualKeyword(Vector<const char> keyword, bool* ok) { | 4443 void ParserBase::ExpectContextualKeyword(Vector<const char> keyword, bool* ok) { |
| 4479 Expect(Token::IDENTIFIER, ok); | 4444 Expect(Token::IDENTIFIER, ok); |
| 4480 if (!*ok) return; | 4445 if (!*ok) return; |
| 4481 if (!scanner()->is_literal_contextual_keyword(keyword)) { | 4446 if (!scanner()->is_literal_contextual_keyword(keyword)) { |
| 4482 ReportUnexpectedToken(scanner()->current_token()); | 4447 ReportUnexpectedToken(scanner()->current_token()); |
| 4483 *ok = false; | 4448 *ok = false; |
| 4484 } | 4449 } |
| 4485 } | 4450 } |
| 4486 | 4451 |
| 4487 | 4452 |
| 4453 void ParserBase::ReportUnexpectedToken(Token::Value token) { |
| 4454 // We don't report stack overflows here, to avoid increasing the |
| 4455 // stack depth even further. Instead we report it after parsing is |
| 4456 // over, in ParseProgram. |
| 4457 if (token == Token::ILLEGAL && stack_overflow()) { |
| 4458 return; |
| 4459 } |
| 4460 Scanner::Location source_location = scanner()->location(); |
| 4461 |
| 4462 // Four of the tokens are treated specially |
| 4463 switch (token) { |
| 4464 case Token::EOS: |
| 4465 return ReportMessageAt(source_location, "unexpected_eos"); |
| 4466 case Token::NUMBER: |
| 4467 return ReportMessageAt(source_location, "unexpected_token_number"); |
| 4468 case Token::STRING: |
| 4469 return ReportMessageAt(source_location, "unexpected_token_string"); |
| 4470 case Token::IDENTIFIER: |
| 4471 return ReportMessageAt(source_location, |
| 4472 "unexpected_token_identifier"); |
| 4473 case Token::FUTURE_RESERVED_WORD: |
| 4474 return ReportMessageAt(source_location, "unexpected_reserved"); |
| 4475 case Token::YIELD: |
| 4476 case Token::FUTURE_STRICT_RESERVED_WORD: |
| 4477 return ReportMessageAt(source_location, |
| 4478 is_classic_mode() ? "unexpected_token_identifier" |
| 4479 : "unexpected_strict_reserved"); |
| 4480 default: |
| 4481 const char* name = Token::String(token); |
| 4482 ASSERT(name != NULL); |
| 4483 ReportMessageAt( |
| 4484 source_location, "unexpected_token", Vector<const char*>(&name, 1)); |
| 4485 } |
| 4486 } |
| 4487 |
| 4488 |
| 4488 Literal* Parser::GetLiteralUndefined(int position) { | 4489 Literal* Parser::GetLiteralUndefined(int position) { |
| 4489 return factory()->NewLiteral( | 4490 return factory()->NewLiteral( |
| 4490 isolate()->factory()->undefined_value(), position); | 4491 isolate()->factory()->undefined_value(), position); |
| 4491 } | 4492 } |
| 4492 | 4493 |
| 4493 | 4494 |
| 4494 Literal* Parser::GetLiteralTheHole(int position) { | 4495 Literal* Parser::GetLiteralTheHole(int position) { |
| 4495 return factory()->NewLiteral( | 4496 return factory()->NewLiteral( |
| 4496 isolate()->factory()->the_hole_value(), RelocInfo::kNoPosition); | 4497 isolate()->factory()->the_hole_value(), RelocInfo::kNoPosition); |
| 4497 } | 4498 } |
| (...skipping 1190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5688 ASSERT(info()->isolate()->has_pending_exception()); | 5689 ASSERT(info()->isolate()->has_pending_exception()); |
| 5689 } else { | 5690 } else { |
| 5690 result = ParseProgram(); | 5691 result = ParseProgram(); |
| 5691 } | 5692 } |
| 5692 } | 5693 } |
| 5693 info()->SetFunction(result); | 5694 info()->SetFunction(result); |
| 5694 return (result != NULL); | 5695 return (result != NULL); |
| 5695 } | 5696 } |
| 5696 | 5697 |
| 5697 } } // namespace v8::internal | 5698 } } // namespace v8::internal |
| OLD | NEW |