Index: tests/compiler/dart2js/annotated_code_helper.dart |
diff --git a/tests/compiler/dart2js/annotated_code_helper.dart b/tests/compiler/dart2js/annotated_code_helper.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f75b5927a74746de4b06cdaa171e4a00f2c8a4c8 |
--- /dev/null |
+++ b/tests/compiler/dart2js/annotated_code_helper.dart |
@@ -0,0 +1,77 @@ |
+// Copyright (c) 2016, 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. |
+ |
+const int _LF = 0x0A; |
+const int _CR = 0x0D; |
+const int _LBRACE = 0x7B; |
+ |
+class Annotation { |
+ /// 1-based line number of the annotation. |
+ final int lineNo; |
+ |
+ /// 1-based column number of the annotation. |
+ final int columnNo; |
+ |
+ /// 0-based character offset with |
Siggi Cherem (dart-lang)
2017/01/24 21:05:59
with => of the annotation?
Johnni Winther
2017/01/25 13:28:13
Done.
|
+ final int offset; |
+ |
+ /// The text in the annotation. |
+ final String text; |
+ |
+ Annotation(this.lineNo, this.columnNo, this.offset, this.text); |
+} |
+ |
+class AnnotatedCode { |
Siggi Cherem (dart-lang)
2017/01/24 21:05:59
add a short dart doc with an example of the syntax
Johnni Winther
2017/01/25 13:28:13
Done.
|
+ final String sourceCode; |
Siggi Cherem (dart-lang)
2017/01/24 21:05:59
+ dartdoc or rename to unannotatedCode?
Johnni Winther
2017/01/25 13:28:13
Done.
|
+ final List<Annotation> annotations; |
+ |
+ AnnotatedCode(this.sourceCode, this.annotations); |
+} |
+ |
+AnnotatedCode processAnnotatedCode(String code) { |
Siggi Cherem (dart-lang)
2017/01/24 21:05:59
optional nit: rename or move as a factory construc
Johnni Winther
2017/01/25 13:28:13
Done.
|
+ StringBuffer codeBuffer = new StringBuffer(); |
+ List<Annotation> annotations = <Annotation>[]; |
+ int index = 0; |
+ int offset = 0; |
+ int lineNo = 1; |
+ int columnNo = 1; |
+ while (index < code.length) { |
+ int charCode = code.codeUnitAt(index); |
+ switch (charCode) { |
+ case _LF: |
+ codeBuffer.write('\n'); |
+ offset++; |
+ lineNo++; |
+ columnNo = 1; |
+ break; |
+ case _CR: |
+ if (index + 1 < code.length && code.codeUnitAt(index + 1) == _LF) { |
+ index++; |
+ } |
+ codeBuffer.write('\n'); |
+ offset++; |
+ lineNo++; |
+ columnNo = 1; |
+ break; |
+ case 0x40: |
Siggi Cherem (dart-lang)
2017/01/24 21:05:59
define 0x40 too?
|
+ if (index + 1 < code.length && code.codeUnitAt(index + 1) == _LBRACE) { |
+ int endIndex = code.indexOf('}', index); |
+ String text = code.substring(index + 2, endIndex); |
+ annotations.add(new Annotation(lineNo, columnNo, offset, text)); |
+ index = endIndex; |
+ } else { |
+ codeBuffer.writeCharCode(charCode); |
+ offset++; |
+ columnNo++; |
+ } |
+ break; |
+ default: |
+ codeBuffer.writeCharCode(charCode); |
+ offset++; |
+ columnNo++; |
+ } |
+ index++; |
+ } |
+ return new AnnotatedCode(codeBuffer.toString(), annotations); |
+} |