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

Unified Diff: sdk/lib/core/exceptions.dart

Issue 396603003: Change "FormatException.position" to be named "offset". (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Reapply change, with necessary fixes in span_execption.dart Created 6 years, 5 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 | « pkg/source_span/lib/src/span_exception.dart ('k') | tests/corelib/format_exception_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/core/exceptions.dart
diff --git a/sdk/lib/core/exceptions.dart b/sdk/lib/core/exceptions.dart
index 3aa48c6c003e85f2cb170ee4aaeaa30a82b085b3..3ca1fb377a6c5b09d7a5b798ac75f13f3f6e21ea 100644
--- a/sdk/lib/core/exceptions.dart
+++ b/sdk/lib/core/exceptions.dart
@@ -44,60 +44,72 @@ class FormatException implements Exception {
* A message describing the format error.
*/
final String message;
+
/**
- * The source that caused the error.
+ * The actual source input that caused the error.
*
- * This is usually a [String], but can be other types too. If it is a string,
- * parts of it may be included in the [toString] message.
+ * This is usually a [String], but can be other types too.
+ * If it is a string, parts of it may be included in the [toString] message.
*
- * May also be `null` if omitted.
+ * The source is `null` if omitted or unknown.
*/
final source;
+
/**
- * The position in source where the error was detected.
+ * The offset in [source] where the error was detected.
+ *
+ * A zero-based offset into the source that marks the format error causing
+ * this exception to be created. If `source` is a string, this should be a
+ * string index in the range `0 <= offset <= source.length`.
*
- * May be omitted. If present, [source] should also be present.
+ * If input is a string, the [toString] method may represent this offset as
+ * a line and character position. The offset should be inside the string,
+ * or at the end of the string.
+ *
+ * May be omitted. If present, [source] should also be present if possible.
*/
- final int position;
+ final int offset;
/**
* Creates a new FormatException with an optional error [message].
*
- * Optionally also supply the [source] that had the incorrect format, and
- * even the [position] in the format where this was detected.
+ * Optionally also supply the actual [source] that had the incorrect format,
+ * and an [offset] in the format where a problem was detected.
*/
- const FormatException([this.message = "", this.source, this.position]);
+ const FormatException([this.message = "", this.source, this.offset]);
/**
* Returns a description of the format exception.
*
* The description always contains the [message].
- * If [source] was provided, the description will contain (at least a part of)
- * the source.
- * If [position] is also provided, the part of the source included will
- * contain that position, and the position will be marked.
*
- * If the source contains a line break before position, only the line
- * containing position will be included, and its line number will also be
- * part of the description. Line and character offsets are 1-based.
+ * If [source] is present and is a string, the description will contain
+ * (at least a part of) the source.
+ * If [offset] is also provided, the part of the source included will
+ * contain that offset, and the offset will be marked.
+ *
+ * If the source is a string and it contains a line break before offset,
+ * only the line containing offset will be included, and its line number
+ * will also be part of the description. Line and character offsets are
+ * 1-based.
*/
String toString() {
String report = "FormatException";
if (message != null && "" != message) {
report = "$report: $message";
}
- int position = this.position;
+ int offset = this.offset;
if (source is! String) {
- if (position != null) {
- report += " (at position $position)";
+ if (offset != null) {
+ report += " (at offset $offset)";
}
return report;
}
- if (position != null && (position < 0 || position > source.length)) {
- position = null;
+ if (offset != null && (offset < 0 || offset > source.length)) {
+ offset = null;
}
- // Source is string and position is null or valid.
- if (position == null) {
+ // Source is string and offset is null or valid.
+ if (offset == null) {
String source = this.source;
if (source.length > 78) {
source = source.substring(0, 75) + "...";
@@ -107,7 +119,7 @@ class FormatException implements Exception {
int lineNum = 1;
int lineStart = 0;
bool lastWasCR;
- for (int i = 0; i < position; i++) {
+ for (int i = 0; i < offset; i++) {
int char = source.codeUnitAt(i);
if (char == 0x0a) {
if (lineStart != i || !lastWasCR) {
@@ -122,12 +134,12 @@ class FormatException implements Exception {
}
}
if (lineNum > 1) {
- report += " (at line $lineNum, character ${position - lineStart + 1})\n";
+ report += " (at line $lineNum, character ${offset - lineStart + 1})\n";
} else {
- report += " (at character ${position + 1})\n";
+ report += " (at character ${offset + 1})\n";
}
int lineEnd = source.length;
- for (int i = position; i < source.length; i++) {
+ for (int i = offset; i < source.length; i++) {
int char = source.codeUnitAt(i);
if (char == 0x0a || char == 0x0d) {
lineEnd = i;
@@ -142,22 +154,22 @@ class FormatException implements Exception {
if (length > 78) {
// Can't show entire line. Try to anchor at the nearest end, if
// one is within reach.
- int index = position - lineStart;
+ int index = offset - lineStart;
if (index < 75) {
end = start + 75;
postfix = "...";
- } else if (end - position < 75) {
+ } else if (end - offset < 75) {
start = end - 75;
prefix = "...";
} else {
- // Neither end is near, just pick an area around the position.
- start = position - 36;
- end = position + 36;
+ // Neither end is near, just pick an area around the offset.
+ start = offset - 36;
+ end = offset + 36;
prefix = postfix = "...";
}
}
String slice = source.substring(start, end);
- int markOffset = position - start + prefix.length;
+ int markOffset = offset - start + prefix.length;
return "$report$prefix$slice$postfix\n${" " * markOffset}^\n";
}
}
« no previous file with comments | « pkg/source_span/lib/src/span_exception.dart ('k') | tests/corelib/format_exception_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698