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

Side by Side Diff: pkg/compiler/lib/src/string_validator.dart

Issue 2912693002: improve fasta unterminated string recovery (Closed)
Patch Set: Created 3 years, 6 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Check the validity of string literals. 5 // Check the validity of string literals.
6 6
7 library stringvalidator; 7 library stringvalidator;
8 8
9 import 'dart:collection'; 9 import 'dart:collection';
10 10
11 import 'common.dart'; 11 import 'common.dart';
12 import 'package:front_end/src/fasta/scanner.dart' show Token; 12 import 'package:front_end/src/fasta/scanner.dart' show Token;
13 import 'tree/dartstring.dart' show DartString; 13 import 'tree/dartstring.dart' show DartString;
14 import 'tree/nodes.dart' show StringQuoting; 14 import 'tree/nodes.dart' show StringQuoting;
15 import 'package:front_end/src/fasta/scanner/characters.dart'; 15 import 'package:front_end/src/fasta/scanner/characters.dart';
16 16
17 class StringValidator { 17 class StringValidator {
18 final DiagnosticReporter reporter; 18 final DiagnosticReporter reporter;
19 19
20 StringValidator(this.reporter); 20 StringValidator(this.reporter);
21 21
22 DartString validateInterpolationPart(Token token, StringQuoting quoting, 22 DartString validateInterpolationPart(Token token, StringQuoting quoting,
23 {bool isFirst: false, bool isLast: false}) { 23 {bool isFirst: false, bool isLast: false}) {
24 String source = token.lexeme; 24 String source = token.lexeme;
25 int leftQuote = 0; 25 int leftQuote = 0;
26 int rightQuote = 0; 26 int rightQuote = 0;
27 if (isFirst) leftQuote = quoting.leftQuoteLength; 27 if (isFirst) leftQuote = quoting.leftQuoteLength;
28 if (isLast) rightQuote = quoting.rightQuoteLength; 28 if (isLast) {
29 // Check for unterminated string
30 if (leftQuote < source.length &&
31 source[source.length - 1] == quoting.quoteChar) {
32 rightQuote = quoting.rightQuoteLength;
ahe 2017/05/29 15:05:30 What happens with this string: """x"
33 }
34 }
29 String content = copyWithoutQuotes(source, leftQuote, rightQuote); 35 String content = copyWithoutQuotes(source, leftQuote, rightQuote);
30 return validateString( 36 return validateString(
31 token, token.charOffset + leftQuote, content, quoting); 37 token, token.charOffset + leftQuote, content, quoting);
32 } 38 }
33 39
34 static StringQuoting quotingFromString(String sourceString) { 40 static StringQuoting quotingFromString(String sourceString) {
35 Iterator<int> source = sourceString.codeUnits.iterator; 41 Iterator<int> source = sourceString.codeUnits.iterator;
36 bool raw = false; 42 bool raw = false;
37 int leftQuoteLength = 1; 43 int leftQuoteLength = 1;
38 source.moveNext(); 44 source.moveNext();
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } 211 }
206 } 212 }
207 // String literal successfully validated. 213 // String literal successfully validated.
208 if (quoting.raw || !containsEscape) { 214 if (quoting.raw || !containsEscape) {
209 // A string without escapes could just as well have been raw. 215 // A string without escapes could just as well have been raw.
210 return new DartString.rawString(string, length); 216 return new DartString.rawString(string, length);
211 } 217 }
212 return new DartString.escapedString(string, length); 218 return new DartString.escapedString(string, length);
213 } 219 }
214 } 220 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/quote.dart » ('j') | pkg/front_end/lib/src/fasta/quote.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698