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

Side by Side Diff: pkg/kernel/lib/transformations/continuation.dart

Issue 2712983002: Add LookupTable class for finding classes and members by name.
Patch Set: Created 3 years, 9 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 | « pkg/kernel/lib/lookup_table.dart ('k') | pkg/kernel/lib/transformations/method_call.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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 library kernel.transformations.continuation; 5 library kernel.transformations.continuation;
6 6
7 import 'dart:math' as math; 7 import 'dart:math' as math;
8 8
9 import '../ast.dart'; 9 import '../ast.dart';
10 import '../core_types.dart'; 10 import '../core_types.dart';
(...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 this.syncIterableConstructor, 886 this.syncIterableConstructor,
887 this.streamIteratorConstructor, 887 this.streamIteratorConstructor,
888 this.futureMicrotaskConstructor, 888 this.futureMicrotaskConstructor,
889 this.streamControllerConstructor, 889 this.streamControllerConstructor,
890 this.asyncThenWrapper, 890 this.asyncThenWrapper,
891 this.asyncErrorWrapper, 891 this.asyncErrorWrapper,
892 this.awaitHelper, 892 this.awaitHelper,
893 this.coreTypes); 893 this.coreTypes);
894 894
895 factory HelperNodes.fromProgram(Program program) { 895 factory HelperNodes.fromProgram(Program program) {
896 Library findLibrary(String name) { 896 var coreTypes = new CoreTypes(program);
897 Uri uri = Uri.parse(name);
898 for (var library in program.libraries) {
899 if (library.importUri == uri) return library;
900 }
901 throw 'Library "$name" not found';
902 }
903
904 Class findClass(Library library, String name) {
905 for (var klass in library.classes) {
906 if (klass.name == name) return klass;
907 }
908 throw 'Class "$name" not found';
909 }
910
911 Procedure findFactoryConstructor(Class klass, String name) {
912 for (var procedure in klass.procedures) {
913 if (procedure.isStatic && procedure.name.name == name) return procedure;
914 }
915 throw 'Factory constructor "$klass.$name" not found';
916 }
917
918 Constructor findConstructor(Class klass, String name) {
919 for (var constructor in klass.constructors) {
920 if (constructor.name.name == name) return constructor;
921 }
922 throw 'Constructor "$klass.$name" not found';
923 }
924
925 Procedure findProcedure(Library library, String name) {
926 for (var procedure in library.procedures) {
927 if (procedure.name.name == name ||
928 procedure.name.name == '${library.name}::${name}') {
929 return procedure;
930 }
931 }
932 throw 'Procedure "$name" not found';
933 }
934
935 var asyncLibrary = findLibrary('dart:async');
936 var coreLibrary = findLibrary('dart:core');
937
938 var completerClass = findClass(asyncLibrary, 'Completer');
939 var futureClass = findClass(asyncLibrary, 'Future');
940 var iteratorClass = findClass(coreLibrary, 'Iterator');
941
942 // The VM's dart:async implementation has renamed _StreamIteratorImpl to
943 // _StreamIterator. To support both old and new library implementations we
944 // look for the old name first and then the new name.
945 var streamIteratorClass;
946 try {
947 streamIteratorClass = findClass(asyncLibrary, '_StreamIteratorImpl');
948 } catch (e) {
949 if (e == 'Class "_StreamIteratorImpl" not found') {
950 streamIteratorClass = findClass(asyncLibrary, '_StreamIterator');
951 } else {
952 rethrow;
953 }
954 }
955
956 var syncIterableClass = findClass(coreLibrary, '_SyncIterable');
957 var streamControllerClass =
958 findClass(asyncLibrary, '_AsyncStarStreamController');
959
960 return new HelperNodes( 897 return new HelperNodes(
961 asyncLibrary, 898 coreTypes.getLibrary('dart:async'),
962 coreLibrary, 899 coreTypes.getLibrary('dart:core'),
963 iteratorClass, 900 coreTypes.getClass('dart:core', 'Iterator'),
964 futureClass, 901 coreTypes.getClass('dart:async', 'Future'),
965 completerClass, 902 coreTypes.getClass('dart:async', 'Completer'),
966 findProcedure(coreLibrary, 'print'), 903 coreTypes.getTopLevelMember('dart:core', 'print'),
967 findFactoryConstructor(completerClass, 'sync'), 904 coreTypes.getMember('dart:async', 'Completer', 'sync'),
968 findConstructor(syncIterableClass, ''), 905 coreTypes.getMember('dart:core', '_SyncIterable', ''),
969 findConstructor(streamIteratorClass, ''), 906 coreTypes.getMember('dart:async', '_StreamIterator', ''),
970 findFactoryConstructor(futureClass, 'microtask'), 907 coreTypes.getMember('dart:async', 'Future', 'microtask'),
971 findConstructor(streamControllerClass, ''), 908 coreTypes.getMember('dart:async', '_AsyncStarStreamController', ''),
972 findProcedure(asyncLibrary, '_asyncThenWrapperHelper'), 909 coreTypes.getTopLevelMember('dart:async', '_asyncThenWrapperHelper'),
973 findProcedure(asyncLibrary, '_asyncErrorWrapperHelper'), 910 coreTypes.getTopLevelMember('dart:async', '_asyncErrorWrapperHelper'),
974 findProcedure(asyncLibrary, '_awaitHelper'), 911 coreTypes.getTopLevelMember('dart:async', '_awaitHelper'),
975 new CoreTypes(program)); 912 coreTypes);
976 } 913 }
977 } 914 }
OLDNEW
« no previous file with comments | « pkg/kernel/lib/lookup_table.dart ('k') | pkg/kernel/lib/transformations/method_call.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698