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

Side by Side Diff: lib/src/js_ast/template.dart

Issue 2016483002: Enable strong mode in DDC, fix all warnings/errors (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « lib/src/js_ast/printer.dart ('k') | lib/src/js_ast/type_printer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 class TemplateManager { 7 class TemplateManager {
8 Map<String, Template> expressionTemplates = new Map<String, Template>(); 8 Map<String, Template> expressionTemplates = new Map<String, Template>();
9 Map<String, Template> statementTemplates = new Map<String, Template>(); 9 Map<String, Template> statementTemplates = new Map<String, Template>();
10 10
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 return visit(node); 298 return visit(node);
299 } 299 }
300 300
301 Instantiator visitProgram(Program node) { 301 Instantiator visitProgram(Program node) {
302 List instantiators = node.body.map(visitSplayableStatement).toList(); 302 List instantiators = node.body.map(visitSplayableStatement).toList();
303 return (arguments) { 303 return (arguments) {
304 List<Statement> statements = <Statement>[]; 304 List<Statement> statements = <Statement>[];
305 void add(node) { 305 void add(node) {
306 if (node is EmptyStatement) return; 306 if (node is EmptyStatement) return;
307 if (node is Iterable) { 307 if (node is Iterable) {
308 statements.addAll(node); 308 for (var n in node) statements.add(n);
309 } else { 309 } else {
310 statements.add(node.toStatement()); 310 statements.add(node.toStatement());
311 } 311 }
312 } 312 }
313 for (Instantiator instantiator in instantiators) { 313 for (Instantiator instantiator in instantiators) {
314 add(instantiator(arguments)); 314 add(instantiator(arguments));
315 } 315 }
316 return new Program(statements); 316 return new Program(statements);
317 }; 317 };
318 } 318 }
319 319
320 Instantiator visitBlock(Block node) { 320 Instantiator visitBlock(Block node) {
321 List instantiators = node.statements.map(visitSplayableStatement).toList(); 321 List instantiators = node.statements.map(visitSplayableStatement).toList();
322 return (arguments) { 322 return (arguments) {
323 List<Statement> statements = <Statement>[]; 323 List<Statement> statements = <Statement>[];
324 void add(node) { 324 void add(node) {
325 if (node is EmptyStatement) return; 325 if (node is EmptyStatement) return;
326 if (node is Iterable) { 326 if (node is Iterable) {
327 statements.addAll(node); 327 for (var n in node) statements.add(n);
328 } else if (node is Block) { 328 } else if (node is Block) {
329 statements.addAll(node.statements); 329 statements.addAll(node.statements);
330 } else { 330 } else {
331 statements.add(node.toStatement()); 331 statements.add(node.toStatement());
332 } 332 }
333 } 333 }
334 for (Instantiator instantiator in instantiators) { 334 for (Instantiator instantiator in instantiators) {
335 add(instantiator(arguments)); 335 add(instantiator(arguments));
336 } 336 }
337 return new Block(statements); 337 return new Block(statements);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 new Catch(makeDeclaration(arguments), makeBody(arguments)); 483 new Catch(makeDeclaration(arguments), makeBody(arguments));
484 } 484 }
485 485
486 Instantiator visitSwitch(Switch node) { 486 Instantiator visitSwitch(Switch node) {
487 Instantiator makeKey = visit(node.key); 487 Instantiator makeKey = visit(node.key);
488 Iterable<Instantiator> makeCases = node.cases.map(visit); 488 Iterable<Instantiator> makeCases = node.cases.map(visit);
489 return (arguments) { 489 return (arguments) {
490 return new Switch( 490 return new Switch(
491 makeKey(arguments), 491 makeKey(arguments),
492 makeCases 492 makeCases
493 .map((Instantiator makeCase) => makeCase(arguments)) 493 .map((makeCase) => makeCase(arguments) as SwitchClause)
494 .toList()); 494 .toList());
495 }; 495 };
496 } 496 }
497 497
498 Instantiator visitCase(Case node) { 498 Instantiator visitCase(Case node) {
499 Instantiator makeExpression = visit(node.expression); 499 Instantiator makeExpression = visit(node.expression);
500 Instantiator makeBody = visit(node.body); 500 Instantiator makeBody = visit(node.body);
501 return (arguments) { 501 return (arguments) {
502 return new Case(makeExpression(arguments), makeBody(arguments)); 502 return new Case(makeExpression(arguments), makeBody(arguments));
503 }; 503 };
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 561
562 Instantiator visitConditional(Conditional cond) { 562 Instantiator visitConditional(Conditional cond) {
563 Instantiator makeCondition = visit(cond.condition); 563 Instantiator makeCondition = visit(cond.condition);
564 Instantiator makeThen = visit(cond.then); 564 Instantiator makeThen = visit(cond.then);
565 Instantiator makeOtherwise = visit(cond.otherwise); 565 Instantiator makeOtherwise = visit(cond.otherwise);
566 return (arguments) => new Conditional(makeCondition(arguments), 566 return (arguments) => new Conditional(makeCondition(arguments),
567 makeThen(arguments), makeOtherwise(arguments)); 567 makeThen(arguments), makeOtherwise(arguments));
568 } 568 }
569 569
570 Instantiator visitNew(New node) => 570 Instantiator visitNew(New node) =>
571 handleCallOrNew(node, (target, arguments) => new New(target, arguments)); 571 handleCallOrNew(node, (target, arguments) =>
572 new New(target, arguments as List<Expression>));
572 573
573 Instantiator visitCall(Call node) => 574 Instantiator visitCall(Call node) =>
574 handleCallOrNew(node, (target, arguments) => new Call(target, arguments)); 575 handleCallOrNew(node, (target, arguments) =>
576 new Call(target, arguments as List<Expression>));
575 577
576 Instantiator handleCallOrNew(Call node, finish(target, arguments)) { 578 Instantiator handleCallOrNew(Call node, finish(target, arguments)) {
577 Instantiator makeTarget = visit(node.target); 579 Instantiator makeTarget = visit(node.target);
578 Iterable<Instantiator> argumentMakers = 580 Iterable<Instantiator> argumentMakers =
579 node.arguments.map(visitSplayableExpression).toList(); 581 node.arguments.map(visitSplayableExpression).toList();
580 582
581 // TODO(sra): Avoid copying call arguments if no interpolation or forced 583 // TODO(sra): Avoid copying call arguments if no interpolation or forced
582 // copying. 584 // copying.
583 return (arguments) { 585 return (arguments) {
584 Node target = makeTarget(arguments); 586 Node target = makeTarget(arguments);
585 List<Expression> callArguments = <Expression>[]; 587 List<Expression> callArguments = <Expression>[];
586 for (Instantiator instantiator in argumentMakers) { 588 for (Instantiator instantiator in argumentMakers) {
587 var result = instantiator(arguments); 589 var result = instantiator(arguments);
588 if (result is Iterable) { 590 if (result is Iterable) {
589 callArguments.addAll(result); 591 for (var r in result) callArguments.add(r);
590 } else { 592 } else {
591 callArguments.add(result); 593 callArguments.add(result);
592 } 594 }
593 } 595 }
594 return finish(target, callArguments.toList(growable: false)); 596 return finish(target, callArguments.toList(growable: false));
595 }; 597 };
596 } 598 }
597 599
598 Instantiator visitBinary(Binary node) { 600 Instantiator visitBinary(Binary node) {
599 Instantiator makeLeft = visit(node.left); 601 Instantiator makeLeft = visit(node.left);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 649
648 Instantiator visitFunctionExpression(FunctionExpression node) { 650 Instantiator visitFunctionExpression(FunctionExpression node) {
649 List<Instantiator> paramMakers = node.params.map(visitSplayable).toList(); 651 List<Instantiator> paramMakers = node.params.map(visitSplayable).toList();
650 Instantiator makeBody = visit(node.body); 652 Instantiator makeBody = visit(node.body);
651 // TODO(sra): Avoid copying params if no interpolation or forced copying. 653 // TODO(sra): Avoid copying params if no interpolation or forced copying.
652 return (arguments) { 654 return (arguments) {
653 List<Parameter> params = <Parameter>[]; 655 List<Parameter> params = <Parameter>[];
654 for (Instantiator instantiator in paramMakers) { 656 for (Instantiator instantiator in paramMakers) {
655 var result = instantiator(arguments); 657 var result = instantiator(arguments);
656 if (result is Iterable) { 658 if (result is Iterable) {
657 params.addAll(result); 659 for (var r in result) params.add(r);
658 } else { 660 } else {
659 params.add(result); 661 params.add(result);
660 } 662 }
661 } 663 }
662 var body = makeBody(arguments); 664 var body = makeBody(arguments);
663 if (node is ArrowFun) { 665 if (node is ArrowFun) {
664 return new ArrowFun(params, body); 666 return new ArrowFun(params, body);
665 } else if (node is Fun) { 667 } else if (node is Fun) {
666 return new Fun(params, body); 668 return new Fun(params, body);
667 } else { 669 } else {
(...skipping 17 matching lines...) Expand all
685 687
686 Instantiator visitLiteralNull(LiteralNull node) => 688 Instantiator visitLiteralNull(LiteralNull node) =>
687 (arguments) => new LiteralNull(); 689 (arguments) => new LiteralNull();
688 690
689 Instantiator visitArrayInitializer(ArrayInitializer node) { 691 Instantiator visitArrayInitializer(ArrayInitializer node) {
690 // TODO(sra): Implement splicing? 692 // TODO(sra): Implement splicing?
691 List<Instantiator> elementMakers = 693 List<Instantiator> elementMakers =
692 node.elements.map(visit).toList(growable: false); 694 node.elements.map(visit).toList(growable: false);
693 return (arguments) { 695 return (arguments) {
694 List<Expression> elements = elementMakers 696 List<Expression> elements = elementMakers
695 .map((Instantiator instantiator) => instantiator(arguments)) 697 .map((instantiator) => instantiator(arguments) as Expression)
696 .toList(growable: false); 698 .toList(growable: false);
697 return new ArrayInitializer(elements); 699 return new ArrayInitializer(elements);
698 }; 700 };
699 } 701 }
700 702
701 Instantiator visitArrayHole(ArrayHole node) { 703 Instantiator visitArrayHole(ArrayHole node) {
702 return (arguments) => new ArrayHole(); 704 return (arguments) => new ArrayHole();
703 } 705 }
704 706
705 Instantiator visitObjectInitializer(ObjectInitializer node) { 707 Instantiator visitObjectInitializer(ObjectInitializer node) {
706 List<Instantiator> propertyMakers = 708 List<Instantiator> propertyMakers =
707 node.properties.map(visitSplayable).toList(); 709 node.properties.map(visitSplayable).toList();
708 return (arguments) { 710 return (arguments) {
709 List<Property> properties = <Property>[]; 711 List<Property> properties = <Property>[];
710 for (Instantiator instantiator in propertyMakers) { 712 for (Instantiator instantiator in propertyMakers) {
711 var result = instantiator(arguments); 713 var result = instantiator(arguments);
712 if (result is Iterable) { 714 if (result is Iterable) {
713 properties.addAll(result); 715 for (var r in result) properties.add(r);
714 } else { 716 } else {
715 properties.add(result); 717 properties.add(result);
716 } 718 }
717 } 719 }
718 return new ObjectInitializer(properties); 720 return new ObjectInitializer(properties);
719 }; 721 };
720 } 722 }
721 723
722 Instantiator visitProperty(Property node) { 724 Instantiator visitProperty(Property node) {
723 Instantiator makeName = visit(node.name); 725 Instantiator makeName = visit(node.name);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 List<Instantiator> makeMethods = 761 List<Instantiator> makeMethods =
760 node.methods.map(visitSplayableExpression).toList(growable: true); 762 node.methods.map(visitSplayableExpression).toList(growable: true);
761 Instantiator makeName = visit(node.name); 763 Instantiator makeName = visit(node.name);
762 Instantiator makeHeritage = visit(node.heritage); 764 Instantiator makeHeritage = visit(node.heritage);
763 765
764 return (arguments) { 766 return (arguments) {
765 var methods = <Method>[]; 767 var methods = <Method>[];
766 for (Instantiator instantiator in makeMethods) { 768 for (Instantiator instantiator in makeMethods) {
767 var result = instantiator(arguments); 769 var result = instantiator(arguments);
768 if (result is Iterable) { 770 if (result is Iterable) {
769 methods.addAll(result); 771 for (var r in result) methods.add(r);
770 } else { 772 } else {
771 methods.add(result); 773 methods.add(result);
772 } 774 }
773 } 775 }
774 return new ClassExpression( 776 return new ClassExpression(
775 makeName(arguments), makeHeritage(arguments), methods); 777 makeName(arguments), makeHeritage(arguments), methods);
776 }; 778 };
777 } 779 }
778 780
779 Instantiator visitMethod(Method node) { 781 Instantiator visitMethod(Method node) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 structure: makeStructure(arguments), 858 structure: makeStructure(arguments),
857 defaultValue: makeDefaultValue(arguments)); 859 defaultValue: makeDefaultValue(arguments));
858 }; 860 };
859 } 861 }
860 862
861 @override 863 @override
862 Instantiator visitArrayBindingPattern(ArrayBindingPattern node) { 864 Instantiator visitArrayBindingPattern(ArrayBindingPattern node) {
863 List<Instantiator> makeVars = node.variables.map(this.visit).toList(); 865 List<Instantiator> makeVars = node.variables.map(this.visit).toList();
864 return (arguments) { 866 return (arguments) {
865 return new ArrayBindingPattern( 867 return new ArrayBindingPattern(
866 makeVars.map((m) => m(arguments)).toList()); 868 makeVars.map((m) => m(arguments) as DestructuredVariable).toList());
867 }; 869 };
868 } 870 }
869 871
870 @override 872 @override
871 Instantiator visitObjectBindingPattern(ObjectBindingPattern node) { 873 Instantiator visitObjectBindingPattern(ObjectBindingPattern node) {
872 List<Instantiator> makeVars = node.variables.map(this.visit).toList(); 874 List<Instantiator> makeVars = node.variables.map(this.visit).toList();
873 return (arguments) { 875 return (arguments) {
874 return new ObjectBindingPattern( 876 return new ObjectBindingPattern(
875 makeVars.map((m) => m(arguments)).toList()); 877 makeVars.map((m) => m(arguments) as DestructuredVariable).toList());
876 }; 878 };
877 } 879 }
878 880
879 @override 881 @override
880 Instantiator visitSimpleBindingPattern(SimpleBindingPattern node) => 882 Instantiator visitSimpleBindingPattern(SimpleBindingPattern node) =>
881 (arguments) => new SimpleBindingPattern(new Identifier(node.name.name)); 883 (arguments) => new SimpleBindingPattern(new Identifier(node.name.name));
882 } 884 }
883 885
884 /** 886 /**
885 * InterpolatedNodeAnalysis determines which AST trees contain 887 * InterpolatedNodeAnalysis determines which AST trees contain
(...skipping 19 matching lines...) Expand all
905 if (count != before) containsInterpolatedNode.add(node); 907 if (count != before) containsInterpolatedNode.add(node);
906 return null; 908 return null;
907 } 909 }
908 910
909 visitInterpolatedNode(InterpolatedNode node) { 911 visitInterpolatedNode(InterpolatedNode node) {
910 containsInterpolatedNode.add(node); 912 containsInterpolatedNode.add(node);
911 if (node.isNamed) holeNames.add(node.nameOrPosition); 913 if (node.isNamed) holeNames.add(node.nameOrPosition);
912 ++count; 914 ++count;
913 } 915 }
914 } 916 }
OLDNEW
« no previous file with comments | « lib/src/js_ast/printer.dart ('k') | lib/src/js_ast/type_printer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698