Avoid crash on EOF error in file with Windows line encoding
+ start using spans from CFE (now that they're available) Change-Id: I4fe82070d32948a64fb0fab527bd4cc857eebeb4 Reviewed-on: https://dart-review.googlesource.com/49841 Reviewed-by: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
*.yaml text
|
||||
|
||||
# Files that should not be converted.
|
||||
tests/compiler/dart2js_extra/eof_line_ending_test.dart -text
|
||||
tests/compiler/dart2js_extra/string_interpolation_test.dart -text
|
||||
tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart -text
|
||||
tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart -text
|
||||
|
||||
@@ -9,6 +9,7 @@ import 'dart:math';
|
||||
import 'dart:typed_data' show Uint8List;
|
||||
|
||||
import 'package:kernel/ast.dart' as kernel show Location, Source;
|
||||
|
||||
import 'location_provider.dart' show LocationProvider;
|
||||
import '../../compiler_new.dart';
|
||||
|
||||
@@ -102,10 +103,6 @@ abstract class SourceFile<T> implements Input<T>, LocationProvider {
|
||||
if (colorize == null) {
|
||||
colorize = (text) => text;
|
||||
}
|
||||
if (end > length) {
|
||||
start = length - 1;
|
||||
end = length;
|
||||
}
|
||||
|
||||
kernel.Location startLocation = kernelSource.getLocation(null, start);
|
||||
kernel.Location endLocation = kernelSource.getLocation(null, end);
|
||||
@@ -142,9 +139,15 @@ abstract class SourceFile<T> implements Input<T>, LocationProvider {
|
||||
for (int line = lineStart; line <= lineEnd; line++) {
|
||||
String textLine = kernelSource.getTextLine(line + 1);
|
||||
if (line == lineStart) {
|
||||
if (columnStart > textLine.length) {
|
||||
columnStart = textLine.length;
|
||||
}
|
||||
buf.write(textLine.substring(0, columnStart));
|
||||
buf.writeln(colorize(textLine.substring(columnStart)));
|
||||
} else if (line == lineEnd) {
|
||||
if (columnEnd > textLine.length) {
|
||||
columnEnd = textLine.length;
|
||||
}
|
||||
buf.write(colorize(textLine.substring(0, columnEnd)));
|
||||
buf.writeln(textLine.substring(columnEnd));
|
||||
} else {
|
||||
|
||||
@@ -83,7 +83,7 @@ void reportFrontEndMessage(
|
||||
Spannable span;
|
||||
if (message.span != null) {
|
||||
span = new SourceSpan(message.span.start.sourceUrl,
|
||||
message.span.start.offset, message.span.start.offset + 1);
|
||||
message.span.start.offset, message.span.end.offset);
|
||||
} else {
|
||||
span = NO_LOCATION_SPANNABLE;
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
],
|
||||
|
||||
"exclude": [
|
||||
"^tests/compiler/dart2js/data/.*",
|
||||
"^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/data/.*",
|
||||
"^tests/compiler/dart2js/path with spaces/.*"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
"exclude": [
|
||||
"^tests/compiler/dart2js/codegen_helper\\.dart",
|
||||
"^tests/compiler/dart2js/codegen/type_inference8_test\\.dart",
|
||||
"^tests/compiler/dart2js/data/one_line_dart_program\\.dart",
|
||||
"^tests/compiler/dart2js/deferred/inline_restrictions_test\\.dart",
|
||||
"^tests/compiler/dart2js/deferred/load_graph_segmentation2_test\\.dart",
|
||||
"^tests/compiler/dart2js/deferred/load_graph_segmentation_test\\.dart",
|
||||
@@ -48,9 +47,10 @@
|
||||
"^tests/compiler/dart2js/needs_no_such_method_test\\.dart",
|
||||
"^tests/compiler/dart2js/no_such_method_enabled_test\\.dart",
|
||||
"^tests/compiler/dart2js/output_collector\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/patch_test\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/data/one_line_dart_program\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/message_kind_helper\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/metadata_test\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/patch_test\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/reexport_handled_test\\.dart",
|
||||
"^tests/compiler/dart2js/old_frontend/resolution_test\\.dart",
|
||||
"^tests/compiler/dart2js/quarantined/http_launch_data/http_launch_main_package\\.dart",
|
||||
|
||||
@@ -7037,7 +7037,6 @@ Language/Classes/Getters/same_name_method_t05: MissingCompileTimeError
|
||||
Language/Classes/Getters/same_name_method_t07: MissingCompileTimeError
|
||||
Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError
|
||||
Language/Classes/Superinterfaces/superclass_as_superinterface_t01: MissingCompileTimeError
|
||||
Language/Classes/definition_t16: Crash
|
||||
Language/Classes/definition_t24: MissingCompileTimeError
|
||||
Language/Classes/same_name_instance_and_static_members_t01: MissingCompileTimeError
|
||||
Language/Classes/same_name_instance_and_static_members_t02: MissingCompileTimeError
|
||||
@@ -7060,36 +7059,15 @@ Language/Expressions/Constants/exception_t02: MissingCompileTimeError
|
||||
Language/Expressions/Constants/logical_expression_t04: MissingCompileTimeError
|
||||
Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
|
||||
Language/Expressions/Instance_Creation/Const/exception_t01: MissingCompileTimeError
|
||||
Language/Expressions/Maps/syntax_t08: Crash
|
||||
Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t08: RuntimeError
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: RuntimeError
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: Crash
|
||||
Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
|
||||
Language/Expressions/Strings/String_Interpolation/syntax_t08: Crash
|
||||
Language/Expressions/Strings/multi_line_t11: Crash # Investiage: source-data from FE causes us to crash
|
||||
Language/Expressions/Strings/multi_line_t12: Crash
|
||||
Language/Expressions/Strings/multi_line_t13: Crash
|
||||
Language/Expressions/Strings/multi_line_t15: Crash
|
||||
Language/Expressions/Strings/multi_line_t16: Crash
|
||||
Language/Expressions/Strings/multi_line_t17: Crash
|
||||
Language/Expressions/Strings/multi_line_t18: Crash
|
||||
Language/Expressions/Strings/multi_line_t19: Crash
|
||||
Language/Expressions/Strings/multi_line_t20: Crash
|
||||
Language/Expressions/Strings/multi_line_t21: Crash
|
||||
Language/Expressions/Strings/multi_line_t22: Crash
|
||||
Language/Expressions/Strings/multi_line_t23: Crash
|
||||
Language/Expressions/Strings/multi_line_t24: Crash
|
||||
Language/Expressions/Strings/multi_line_t25: Crash
|
||||
Language/Expressions/Strings/multi_line_t28: Crash
|
||||
Language/Expressions/Strings/multi_line_t29: Crash
|
||||
Language/Expressions/Strings/multi_line_t32: Crash
|
||||
Language/Expressions/Strings/multi_line_t33: Crash
|
||||
Language/Expressions/This/placement_t04: Crash
|
||||
Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError
|
||||
Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
|
||||
Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
|
||||
Language/Functions/syntax_t09: Crash
|
||||
Language/Libraries_and_Scripts/Imports/same_name_t10: RuntimeError
|
||||
Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
|
||||
Language/Metadata/before_class_t01: RuntimeError
|
||||
@@ -7182,7 +7160,6 @@ Language/Classes/Instance_Methods/Operators/allowed_names_t19: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t20: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t21: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t22: Crash
|
||||
Language/Classes/definition_t16: Crash
|
||||
Language/Classes/member_definition_t04: Crash
|
||||
Language/Classes/member_definition_t06: Crash
|
||||
Language/Classes/member_definition_t07: Crash
|
||||
@@ -7193,31 +7170,11 @@ Language/Classes/member_definition_t11: Crash
|
||||
Language/Classes/member_definition_t12: Crash
|
||||
Language/Expressions/Constants/depending_on_itself_t03: Crash
|
||||
Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
|
||||
Language/Expressions/Maps/syntax_t08: Crash
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: Crash
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t03: Crash
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t04: Crash
|
||||
Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: Crash
|
||||
Language/Expressions/Strings/String_Interpolation/syntax_t08: Crash
|
||||
Language/Expressions/Strings/multi_line_t11: Crash
|
||||
Language/Expressions/Strings/multi_line_t12: Crash
|
||||
Language/Expressions/Strings/multi_line_t13: Crash
|
||||
Language/Expressions/Strings/multi_line_t15: Crash
|
||||
Language/Expressions/Strings/multi_line_t16: Crash
|
||||
Language/Expressions/Strings/multi_line_t17: Crash
|
||||
Language/Expressions/Strings/multi_line_t18: Crash
|
||||
Language/Expressions/Strings/multi_line_t19: Crash
|
||||
Language/Expressions/Strings/multi_line_t20: Crash
|
||||
Language/Expressions/Strings/multi_line_t21: Crash
|
||||
Language/Expressions/Strings/multi_line_t22: Crash
|
||||
Language/Expressions/Strings/multi_line_t23: Crash
|
||||
Language/Expressions/Strings/multi_line_t24: Crash
|
||||
Language/Expressions/Strings/multi_line_t25: Crash
|
||||
Language/Expressions/Strings/multi_line_t28: Crash
|
||||
Language/Expressions/Strings/multi_line_t29: Crash
|
||||
Language/Expressions/Strings/multi_line_t32: Crash
|
||||
Language/Expressions/Strings/multi_line_t33: Crash
|
||||
Language/Expressions/This/placement_t04: Crash
|
||||
Language/Functions/setter_modifier_t01: Crash
|
||||
Language/Functions/setter_modifier_t02: Crash
|
||||
@@ -7225,7 +7182,6 @@ Language/Functions/setter_modifier_t03: Crash
|
||||
Language/Functions/setter_modifier_t04: Crash
|
||||
Language/Functions/setter_modifier_t05: Crash
|
||||
Language/Functions/setter_modifier_t06: Crash
|
||||
Language/Functions/syntax_t09: Crash
|
||||
Language/Statements/For/syntax_t13: Crash
|
||||
Language/Statements/For/syntax_t20: Crash
|
||||
LibTest/core/Invocation/namedArguments_A01_t01: Crash
|
||||
|
||||
+21
-22
@@ -16,7 +16,7 @@ import 'package:compiler/src/commandline_options.dart';
|
||||
import 'package:expect/expect.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
import 'end_to_end/launch_helper.dart' show launchDart2Js;
|
||||
import '../end_to_end/launch_helper.dart' show launchDart2Js;
|
||||
|
||||
Uri pathOfData = Platform.script;
|
||||
Directory tempDir;
|
||||
@@ -53,30 +53,35 @@ void check(ProcessResult result) {
|
||||
Expect.notEquals(0, result.exitCode);
|
||||
List<int> stdout = result.stdout;
|
||||
String stdoutString = utf8.decode(stdout);
|
||||
Expect.isTrue(stdoutString.contains("Error"));
|
||||
Expect.isTrue(stdoutString.contains("Error"), "stdout:\n$stdoutString");
|
||||
// Make sure the "499" from the last line is in the output.
|
||||
Expect.isTrue(stdoutString.contains("499"));
|
||||
Expect.isTrue(stdoutString.contains("499"), "stdout:\n$stdoutString");
|
||||
|
||||
// Make sure that the output does not contain any 0 character.
|
||||
Expect.isFalse(stdout.contains(0));
|
||||
}
|
||||
|
||||
Future testFile({bool useKernel}) async {
|
||||
Future testFile() async {
|
||||
String inFilePath =
|
||||
pathOfData.resolve('data/one_line_dart_program.dart').path;
|
||||
List<String> args = [inFilePath, "--out=" + outFilePath];
|
||||
if (!useKernel) args.add(Flags.useOldFrontend);
|
||||
|
||||
List<String> args = [
|
||||
inFilePath,
|
||||
"--out=" + outFilePath,
|
||||
Flags.useOldFrontend
|
||||
];
|
||||
await cleanup();
|
||||
check(await launchDart2Js(args, noStdoutEncoding: true));
|
||||
await cleanup();
|
||||
}
|
||||
|
||||
Future serverRunning(HttpServer server, {bool useKernel}) async {
|
||||
Future serverRunning(HttpServer server) async {
|
||||
int port = server.port;
|
||||
String inFilePath = "http://127.0.0.1:$port/data/one_line_dart_program.dart";
|
||||
List<String> args = [inFilePath, "--out=" + outFilePath];
|
||||
if (!useKernel) args.add(Flags.useOldFrontend);
|
||||
List<String> args = [
|
||||
inFilePath,
|
||||
"--out=" + outFilePath,
|
||||
Flags.useOldFrontend
|
||||
];
|
||||
|
||||
server.listen(handleRequest);
|
||||
try {
|
||||
@@ -88,22 +93,19 @@ Future serverRunning(HttpServer server, {bool useKernel}) async {
|
||||
}
|
||||
}
|
||||
|
||||
Future testHttp({bool useKernel}) {
|
||||
Future testHttp() {
|
||||
return HttpServer
|
||||
.bind(InternetAddress.LOOPBACK_IP_V4, 0)
|
||||
.then((HttpServer server) => serverRunning(server, useKernel: useKernel));
|
||||
.then((HttpServer server) => serverRunning(server));
|
||||
}
|
||||
|
||||
runTests({bool useKernel}) async {
|
||||
runTests() async {
|
||||
tempDir = Directory.systemTemp.createTempSync('directory_test');
|
||||
outFilePath = path.join(tempDir.path, "out.js");
|
||||
|
||||
try {
|
||||
await testFile(useKernel: useKernel);
|
||||
if (!useKernel) {
|
||||
// TODO(johnniwinther): Handle this test for kernel.
|
||||
await testHttp(useKernel: useKernel);
|
||||
}
|
||||
await testFile();
|
||||
await testHttp();
|
||||
} finally {
|
||||
await tempDir.delete(recursive: true);
|
||||
}
|
||||
@@ -111,9 +113,6 @@ runTests({bool useKernel}) async {
|
||||
|
||||
main() {
|
||||
asyncTest(() async {
|
||||
print('--test from ast---------------------------------------------------');
|
||||
await runTests(useKernel: false);
|
||||
print('--test from kernel------------------------------------------------');
|
||||
await runTests(useKernel: true);
|
||||
await runTests();
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
// Regression test derived from language/issue_1578_test.dart with Windows
|
||||
// line encoding.
|
||||
|
||||
main() {}
|
||||
|
||||
]~<)$ //# 01: compile-time error
|
||||
Reference in New Issue
Block a user