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

Side by Side Diff: pkg/js_ast/lib/src/printer.dart

Issue 1196433002: Create and test source mapping for invocations. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Handle the new Name class in the JS Printer. Created 5 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 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 part of js_ast; 5 part of js_ast;
6 6
7 7
8 class JavaScriptPrintingOptions { 8 class JavaScriptPrintingOptions {
9 final bool shouldCompressOutput; 9 final bool shouldCompressOutput;
10 final bool minifyLocalVariables; 10 final bool minifyLocalVariables;
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 blockBody(then, needsSeparation: false, needsNewline: !hasElse); 353 blockBody(then, needsSeparation: false, needsNewline: !hasElse);
354 if (hasElse) { 354 if (hasElse) {
355 if (thenWasBlock) { 355 if (thenWasBlock) {
356 spaceOut(); 356 spaceOut();
357 } else { 357 } else {
358 indent(); 358 indent();
359 } 359 }
360 out("else"); 360 out("else");
361 if (elsePart is If) { 361 if (elsePart is If) {
362 pendingSpace = true; 362 pendingSpace = true;
363 startNode(elsePart);
363 ifOut(elsePart, false); 364 ifOut(elsePart, false);
365 endNode(elsePart);
364 } else { 366 } else {
365 blockBody(unwrapBlockIfSingleStatement(elsePart), 367 blockBody(unwrapBlockIfSingleStatement(elsePart),
366 needsSeparation: true, needsNewline: true); 368 needsSeparation: true, needsNewline: true);
367 } 369 }
368 } 370 }
369 } 371 }
370 372
371 @override 373 @override
372 void visitIf(If node) { 374 void visitIf(If node) {
373 ifOut(node, true); 375 ifOut(node, true);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 localNamer.leaveScope(); 623 localNamer.leaveScope();
622 return closingPosition; 624 return closingPosition;
623 625
624 } 626 }
625 627
626 @override 628 @override
627 visitFunctionDeclaration(FunctionDeclaration declaration) { 629 visitFunctionDeclaration(FunctionDeclaration declaration) {
628 VarCollector vars = new VarCollector(); 630 VarCollector vars = new VarCollector();
629 vars.visitFunctionDeclaration(declaration); 631 vars.visitFunctionDeclaration(declaration);
630 indent(); 632 indent();
631 functionOut(declaration.function, declaration.name, vars); 633 startNode(declaration.function);
634 currentNode.closingPosition =
635 functionOut(declaration.function, declaration.name, vars);
636 endNode(declaration.function);
632 lineOut(); 637 lineOut();
633 } 638 }
634 639
635 visitNestedExpression(Expression node, int requiredPrecedence, 640 visitNestedExpression(Expression node, int requiredPrecedence,
636 {bool newInForInit, bool newAtStatementBegin}) { 641 {bool newInForInit, bool newAtStatementBegin}) {
637 bool needsParentheses = 642 bool needsParentheses =
638 // a - (b + c). 643 // a - (b + c).
639 (requiredPrecedence != EXPRESSION && 644 (requiredPrecedence != EXPRESSION &&
640 node.precedenceLevel < requiredPrecedence) || 645 node.precedenceLevel < requiredPrecedence) ||
641 // for (a = (x in o); ... ; ... ) { ... } 646 // for (a = (x in o); ... ; ... ) { ... }
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 visitNestedExpression(access.receiver, CALL, 922 visitNestedExpression(access.receiver, CALL,
918 newInForInit: inForInit, 923 newInForInit: inForInit,
919 newAtStatementBegin: atStatementBegin); 924 newAtStatementBegin: atStatementBegin);
920 Node selector = access.selector; 925 Node selector = access.selector;
921 if (selector is LiteralString) { 926 if (selector is LiteralString) {
922 LiteralString selectorString = selector; 927 LiteralString selectorString = selector;
923 String fieldWithQuotes = selectorString.value; 928 String fieldWithQuotes = selectorString.value;
924 if (isValidJavaScriptId(fieldWithQuotes)) { 929 if (isValidJavaScriptId(fieldWithQuotes)) {
925 if (access.receiver is LiteralNumber) out(" ", isWhitespace: true); 930 if (access.receiver is LiteralNumber) out(" ", isWhitespace: true);
926 out("."); 931 out(".");
932 startNode(selector);
927 out(fieldWithQuotes.substring(1, fieldWithQuotes.length - 1)); 933 out(fieldWithQuotes.substring(1, fieldWithQuotes.length - 1));
934 endNode(selector);
928 return; 935 return;
929 } 936 }
930 } else if (selector is Name) { 937 } else if (selector is Name) {
931 if (access.receiver is LiteralNumber) out(" ", isWhitespace: true); 938 if (access.receiver is LiteralNumber) out(" ", isWhitespace: true);
932 out("."); 939 out(".");
940 startNode(selector);
933 out(selector.name); 941 out(selector.name);
942 endNode(selector);
934 return; 943 return;
935 } 944 }
936 out("["); 945 out("[");
937 visitNestedExpression(selector, EXPRESSION, 946 visitNestedExpression(selector, EXPRESSION,
938 newInForInit: false, newAtStatementBegin: false); 947 newInForInit: false, newAtStatementBegin: false);
939 out("]"); 948 out("]");
940 } 949 }
941 950
942 @override 951 @override
943 void visitNamedFunction(NamedFunction namedFunction) { 952 void visitNamedFunction(NamedFunction namedFunction) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 void visitArrayInitializer(ArrayInitializer node) { 1024 void visitArrayInitializer(ArrayInitializer node) {
1016 out("["); 1025 out("[");
1017 List<Expression> elements = node.elements; 1026 List<Expression> elements = node.elements;
1018 for (int i = 0; i < elements.length; i++) { 1027 for (int i = 0; i < elements.length; i++) {
1019 Expression element = elements[i]; 1028 Expression element = elements[i];
1020 if (element is ArrayHole) { 1029 if (element is ArrayHole) {
1021 // Note that array holes must have a trailing "," even if they are 1030 // Note that array holes must have a trailing "," even if they are
1022 // in last position. Otherwise `[,]` (having length 1) would become 1031 // in last position. Otherwise `[,]` (having length 1) would become
1023 // equal to `[]` (the empty array) 1032 // equal to `[]` (the empty array)
1024 // and [1,,] (array with 1 and a hole) would become [1,] = [1]. 1033 // and [1,,] (array with 1 and a hole) would become [1,] = [1].
1034 startNode(element);
1025 out(","); 1035 out(",");
1036 endNode(element);
1026 continue; 1037 continue;
1027 } 1038 }
1028 if (i != 0) spaceOut(); 1039 if (i != 0) spaceOut();
1029 visitNestedExpression(element, ASSIGNMENT, 1040 visitNestedExpression(element, ASSIGNMENT,
1030 newInForInit: false, newAtStatementBegin: false); 1041 newInForInit: false, newAtStatementBegin: false);
1031 // We can skip the trailing "," for the last element (since it's not 1042 // We can skip the trailing "," for the last element (since it's not
1032 // an array hole). 1043 // an array hole).
1033 if (i != elements.length - 1) out(","); 1044 if (i != elements.length - 1) out(",");
1034 } 1045 }
1035 out("]"); 1046 out("]");
(...skipping 26 matching lines...) Expand all
1062 indentLess(); 1073 indentLess();
1063 if (!node.isOneLiner && !properties.isEmpty) { 1074 if (!node.isOneLiner && !properties.isEmpty) {
1064 lineOut(); 1075 lineOut();
1065 indent(); 1076 indent();
1066 } 1077 }
1067 out("}"); 1078 out("}");
1068 } 1079 }
1069 1080
1070 @override 1081 @override
1071 void visitProperty(Property node) { 1082 void visitProperty(Property node) {
1083 startNode(node.name);
1072 if (node.name is LiteralString) { 1084 if (node.name is LiteralString) {
1073 LiteralString nameString = node.name; 1085 LiteralString nameString = node.name;
1074 String name = nameString.value; 1086 String name = nameString.value;
1075 if (isValidJavaScriptId(name)) { 1087 if (isValidJavaScriptId(name)) {
1076 out(name.substring(1, name.length - 1)); 1088 out(name.substring(1, name.length - 1));
1077 } else { 1089 } else {
1078 out(name); 1090 out(name);
1079 } 1091 }
1080 } else if (node.name is Name) { 1092 } else if (node.name is Name) {
1081 node.name.accept(this); 1093 node.name.accept(this);
1082 } else { 1094 } else {
1083 assert(node.name is LiteralNumber); 1095 assert(node.name is LiteralNumber);
1084 LiteralNumber nameNumber = node.name; 1096 LiteralNumber nameNumber = node.name;
1085 out(nameNumber.value); 1097 out(nameNumber.value);
1086 } 1098 }
1099 endNode(node.name);
1087 out(":"); 1100 out(":");
1088 spaceOut(); 1101 spaceOut();
1089 visitNestedExpression(node.value, ASSIGNMENT, 1102 visitNestedExpression(node.value, ASSIGNMENT,
1090 newInForInit: false, newAtStatementBegin: false); 1103 newInForInit: false, newAtStatementBegin: false);
1091 } 1104 }
1092 1105
1093 @override 1106 @override
1094 void visitRegExpLiteral(RegExpLiteral node) { 1107 void visitRegExpLiteral(RegExpLiteral node) {
1095 out(node.pattern); 1108 out(node.pattern);
1096 } 1109 }
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 } 1475 }
1463 } 1476 }
1464 1477
1465 EnterExitNode exitNode(JavaScriptPrintingContext context, int position) { 1478 EnterExitNode exitNode(JavaScriptPrintingContext context, int position) {
1466 // Enter must happen before exit. 1479 // Enter must happen before exit.
1467 addToNode(context, position); 1480 addToNode(context, position);
1468 context.exitNode(node, startPosition, position, closingPosition); 1481 context.exitNode(node, startPosition, position, closingPosition);
1469 return parent; 1482 return parent;
1470 } 1483 }
1471 } 1484 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698