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

Unified Diff: src/parsing/parser.cc

Issue 2451153002: [modules] Improve error messages. (Closed)
Patch Set: Address comments. Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects-inl.h ('k') | test/message/message.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/parser.cc
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
index 564057245eea08918cb19a60211f1c28b4226bc3..6d78caf103489252d5e1a510fad2ba239a6c6f9b 100644
--- a/src/parsing/parser.cc
+++ b/src/parsing/parser.cc
@@ -1094,15 +1094,19 @@ void Parser::ParseExportClause(ZoneList<const AstRawString*>* export_names,
}
const AstRawString* local_name = ParseIdentifierName(CHECK_OK_VOID);
const AstRawString* export_name = NULL;
+ Scanner::Location location = scanner()->location();
if (CheckContextualKeyword(CStrVector("as"))) {
export_name = ParseIdentifierName(CHECK_OK_VOID);
+ // Set the location to the whole "a as b" string, so that it makes sense
+ // both for errors due to "a" and for errors due to "b".
+ location.end_pos = scanner()->location().end_pos;
}
if (export_name == NULL) {
export_name = local_name;
}
export_names->Add(export_name, zone());
local_names->Add(local_name, zone());
- export_locations->Add(scanner()->location(), zone());
+ export_locations->Add(location, zone());
if (peek() == Token::RBRACE) break;
Expect(Token::COMMA, CHECK_OK_VOID);
}
@@ -1132,6 +1136,7 @@ ZoneList<const Parser::NamedImport*>* Parser::ParseNamedImports(
while (peek() != Token::RBRACE) {
const AstRawString* import_name = ParseIdentifierName(CHECK_OK);
const AstRawString* local_name = import_name;
+ Scanner::Location location = scanner()->location();
// In the presence of 'as', the left-side of the 'as' can
// be any IdentifierName. But without 'as', it must be a valid
// BindingIdentifier.
@@ -1151,8 +1156,8 @@ ZoneList<const Parser::NamedImport*>* Parser::ParseNamedImports(
DeclareModuleImport(local_name, position(), CHECK_OK);
- NamedImport* import = new (zone()) NamedImport(
- import_name, local_name, scanner()->location());
+ NamedImport* import =
+ new (zone()) NamedImport(import_name, local_name, location);
result->Add(import, zone());
if (peek() == Token::RBRACE) break;
@@ -1339,21 +1344,23 @@ Statement* Parser::ParseExportDeclaration(bool* ok) {
// 'export' Declaration
// 'export' 'default' ... (handled in ParseExportDefault)
- int pos = peek_position();
Expect(Token::EXPORT, CHECK_OK);
+ int pos = position();
Statement* result = nullptr;
ZoneList<const AstRawString*> names(1, zone());
+ Scanner::Location loc = scanner()->peek_location();
switch (peek()) {
case Token::DEFAULT:
return ParseExportDefault(ok);
case Token::MUL: {
Consume(Token::MUL);
+ loc = scanner()->location();
ExpectContextualKeyword(CStrVector("from"), CHECK_OK);
const AstRawString* module_specifier = ParseModuleSpecifier(CHECK_OK);
ExpectSemicolon(CHECK_OK);
- module()->AddStarExport(module_specifier, scanner()->location(), zone());
+ module()->AddStarExport(module_specifier, loc, zone());
return factory()->NewEmptyStatement(pos);
}
@@ -1434,11 +1441,11 @@ Statement* Parser::ParseExportDeclaration(bool* ok) {
ReportUnexpectedToken(scanner()->current_token());
return nullptr;
}
+ loc.end_pos = scanner()->location().end_pos;
ModuleDescriptor* descriptor = module();
for (int i = 0; i < names.length(); ++i) {
- // TODO(neis): Provide better location.
- descriptor->AddExport(names[i], names[i], scanner()->location(), zone());
+ descriptor->AddExport(names[i], names[i], loc, zone());
}
DCHECK_NOT_NULL(result);
« no previous file with comments | « src/objects-inl.h ('k') | test/message/message.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698