Skip to content

Commit

Permalink
Merged: Fix scanner-level error reporting for hashbang
Browse files Browse the repository at this point in the history
Revision: f925780

BUG=v8:10110
NOTRY=true
NOPRESUBMIT=true
NOTREECHECKS=true
[email protected]

Change-Id: If5d39d5c971e239f5612f017606615ebccc3b5de
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2102928
Reviewed-by: Toon Verwaest <[email protected]>
Commit-Queue: Toon Verwaest <[email protected]>
Cr-Commit-Position: refs/branch-heads/8.1@{#49}
Cr-Branched-From: a4dcd39-refs/heads/8.1.307@{#1}
Cr-Branched-From: f22c213-refs/heads/master@{#66031}
  • Loading branch information
mmarchini authored and Commit Bot committed Mar 24, 2020
1 parent a21998f commit 966bd36
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 15 deletions.
1 change: 0 additions & 1 deletion src/parsing/parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,6 @@ FunctionLiteral* Parser::ParseProgram(Isolate* isolate, Handle<Script> script,
Scope::DeserializationMode::kIncludingVariables);

scanner_.Initialize();
scanner_.SkipHashBang();
FunctionLiteral* result = DoParseProgram(isolate, info);
MaybeResetCharacterStream(info, result);
MaybeProcessSourceRanges(info, result, stack_limit_);
Expand Down
4 changes: 0 additions & 4 deletions src/parsing/preparser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,6 @@ PreParser::PreParseResult PreParser::PreParseProgram() {
scope->set_is_being_lazily_parsed(true);
#endif

// Note: We should only skip the hashbang in non-Eval scripts
// (currently, Eval is not handled by the PreParser).
scanner()->SkipHashBang();

// ModuleDeclarationInstantiation for Source Text Module Records creates a
// new Module Environment Record whose outer lexical environment record is
// the global scope.
Expand Down
4 changes: 4 additions & 0 deletions src/parsing/scanner-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,10 @@ V8_INLINE Token::Value Scanner::ScanSingleToken() {
return ScanTemplateSpan();

case Token::PRIVATE_NAME:
if (source_pos() == 0 && Peek() == '!') {
token = SkipSingleLineComment();
continue;
}
return ScanPrivateName();

case Token::WHITESPACE:
Expand Down
7 changes: 0 additions & 7 deletions src/parsing/scanner.cc
Original file line number Diff line number Diff line change
Expand Up @@ -314,13 +314,6 @@ Token::Value Scanner::SkipMultiLineComment() {
return Token::ILLEGAL;
}

void Scanner::SkipHashBang() {
if (c0_ == '#' && Peek() == '!' && source_pos() == 0) {
SkipSingleLineComment();
Scan();
}
}

Token::Value Scanner::ScanHtmlComment() {
// Check for <!-- comments.
DCHECK_EQ(c0_, '!');
Expand Down
3 changes: 0 additions & 3 deletions src/parsing/scanner.h
Original file line number Diff line number Diff line change
Expand Up @@ -422,9 +422,6 @@ class V8_EXPORT_PRIVATE Scanner {

const Utf16CharacterStream* stream() const { return source_; }

// If the next characters in the stream are "#!", the line is skipped.
void SkipHashBang();

private:
// Scoped helper for saving & restoring scanner error state.
// This is used for tagged template literals, in which normally forbidden
Expand Down
12 changes: 12 additions & 0 deletions test/message/fail/hashbang-incomplete-string.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env d8
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
//

const x = 'valid code';

'incomplete string

const y = 'even more valid code!';
5 changes: 5 additions & 0 deletions test/message/fail/hashbang-incomplete-string.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*%(basename)s:10: SyntaxError: Invalid or unexpected token
'incomplete string
^^^^^^^^^^^^^^^^^^

SyntaxError: Invalid or unexpected token

0 comments on commit 966bd36

Please sign in to comment.