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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js/printer.dart

Issue 237583014: JS templates (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: cleanup Created 6 years, 8 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 | Annotate | Revision Log
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 part of js; 5 part of js;
6 6
7 class Printer implements NodeVisitor { 7 class Printer implements NodeVisitor {
8 final bool shouldCompressOutput; 8 final bool shouldCompressOutput;
9 leg.Compiler compiler; 9 leg.Compiler compiler;
10 leg.CodeBuffer outBuffer; 10 leg.CodeBuffer outBuffer;
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 for (int i = 0; i < inputsLength; i++) { 871 for (int i = 0; i < inputsLength; i++) {
872 visit(inputs[i]); 872 visit(inputs[i]);
873 out(parts[i + 1]); 873 out(parts[i + 1]);
874 } 874 }
875 } 875 }
876 876
877 visitLiteralStatement(LiteralStatement node) { 877 visitLiteralStatement(LiteralStatement node) {
878 outLn(node.code); 878 outLn(node.code);
879 } 879 }
880 880
881 visitJSExpression(JSExpression node) { 881 visitInterpolatedNode(InterpolatedNode node) {
882 compiler.internalError(NO_LOCATION_SPANNABLE, 882 out('#${node.name}');
883 'JSPrinter should never see a JSExpression.');
884 } 883 }
885 884
886 visitInterpolatedExpression(InterpolatedExpression node) { 885 visitInterpolatedExpression(InterpolatedExpression node) =>
887 visit(node.value); 886 visitInterpolatedNode(node);
888 } 887
888 visitInterpolatedLiteral(InterpolatedLiteral node) =>
889 visitInterpolatedNode(node);
890
891 visitInterpolatedParameter(InterpolatedParameter node) =>
892 visitInterpolatedNode(node);
893
894 visitInterpolatedSelector(InterpolatedSelector node) =>
895 visitInterpolatedNode(node);
889 896
890 visitInterpolatedStatement(InterpolatedStatement node) { 897 visitInterpolatedStatement(InterpolatedStatement node) {
891 visit(node.value); 898 outLn('#${node.name}');
892 } 899 }
893 900
894 void visitComment(Comment node) { 901 void visitComment(Comment node) {
895 if (shouldCompressOutput) return; 902 if (shouldCompressOutput) return;
896 String comment = node.comment.trim(); 903 String comment = node.comment.trim();
897 if (comment.isEmpty) return; 904 if (comment.isEmpty) return;
898 for (var line in comment.split('\n')) { 905 for (var line in comment.split('\n')) {
899 if (comment.startsWith('//')) { 906 if (comment.startsWith('//')) {
900 outIndentLn(line.trim()); 907 outIndentLn(line.trim());
901 } else { 908 } else {
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1096 } 1103 }
1097 1104
1098 // Parameters go from a to z and variables go from z to a. This makes each 1105 // Parameters go from a to z and variables go from z to a. This makes each
1099 // argument list and each top-of-function var declaration look similar and 1106 // argument list and each top-of-function var declaration look similar and
1100 // helps gzip compress the file. If we have more than 26 arguments and 1107 // helps gzip compress the file. If we have more than 26 arguments and
1101 // variables then we meet somewhere in the middle of the alphabet. After 1108 // variables then we meet somewhere in the middle of the alphabet. After
1102 // that we give up trying to be nice to the compression algorithm and just 1109 // that we give up trying to be nice to the compression algorithm and just
1103 // use the same namespace for arguments and variables, starting with A, and 1110 // use the same namespace for arguments and variables, starting with A, and
1104 // moving on to a0, a1, etc. 1111 // moving on to a0, a1, etc.
1105 String declareVariable(String oldName) { 1112 String declareVariable(String oldName) {
1113 // Variables of this $form$ are used in pattern matching JS exceptions, so
1114 // should not be renamed.
1115 // TODO(sra): Introduce a way for indicating in the JS text which varaibles
floitsch 2014/04/22 16:11:18 variables
sra1 2014/04/23 02:33:50 Done.
1116 // should not be renamed.
1117 if (oldName.startsWith(r'$') && oldName.endsWith(r'$')) return oldName;
1118
1106 var newName; 1119 var newName;
1107 if (variableNumber + parameterNumber < LOWER_CASE_LETTERS) { 1120 if (variableNumber + parameterNumber < LOWER_CASE_LETTERS) {
1108 // Variables start from z and go backwards, for better gzipability. 1121 // Variables start from z and go backwards, for better gzipability.
1109 newName = getNameNumber(oldName, LOWER_CASE_LETTERS - 1 - variableNumber); 1122 newName = getNameNumber(oldName, LOWER_CASE_LETTERS - 1 - variableNumber);
1110 } else { 1123 } else {
1111 // After 26 variables and parameters we allocate them in the same order. 1124 // After 26 variables and parameters we allocate them in the same order.
1112 newName = getNameNumber(oldName, variableNumber + parameterNumber); 1125 newName = getNameNumber(oldName, variableNumber + parameterNumber);
1113 } 1126 }
1114 variableNumber++; 1127 variableNumber++;
1115 return newName; 1128 return newName;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 codes.add(nthLetter((n ~/ nameSpaceSize) % LETTERS)); 1168 codes.add(nthLetter((n ~/ nameSpaceSize) % LETTERS));
1156 } 1169 }
1157 codes.add(charCodes.$0 + digit); 1170 codes.add(charCodes.$0 + digit);
1158 newName = new String.fromCharCodes(codes); 1171 newName = new String.fromCharCodes(codes);
1159 } 1172 }
1160 assert(new RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName)); 1173 assert(new RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
1161 maps.last[oldName] = newName; 1174 maps.last[oldName] = newName;
1162 return newName; 1175 return newName;
1163 } 1176 }
1164 } 1177 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698