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

Side by Side Diff: pkg/kernel/lib/transformations/reify/reify_transformer.dart

Issue 2904203003: Don't recreate CoreTypes in transformers. Pass it in. (Closed)
Patch Set: Created 3 years, 7 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) 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.reify.standalone_runner; 5 library kernel.transformations.reify.standalone_runner;
6 6
7 import 'analysis/program_analysis.dart'; 7 import 'analysis/program_analysis.dart';
8 import 'dart:io' show File, IOSink; 8 import 'dart:io' show File, IOSink;
9 9
10 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter; 10 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
(...skipping 23 matching lines...) Expand all
34 return candidates.single; 34 return candidates.single;
35 } 35 }
36 36
37 Library types = findLibraryEndingWith("reify/types.dart"); 37 Library types = findLibraryEndingWith("reify/types.dart");
38 Library declarations = findLibraryEndingWith("reify/declarations.dart"); 38 Library declarations = findLibraryEndingWith("reify/declarations.dart");
39 Library interceptors = findLibraryEndingWith("reify/interceptors.dart"); 39 Library interceptors = findLibraryEndingWith("reify/interceptors.dart");
40 return new RuntimeLibrary(types, declarations, interceptors); 40 return new RuntimeLibrary(types, declarations, interceptors);
41 } 41 }
42 42
43 Program transformProgramUsingLibraries( 43 Program transformProgramUsingLibraries(
44 Program program, RuntimeLibrary runtimeLibrary, 44 CoreTypes coreTypes, Program program, RuntimeLibrary runtimeLibrary,
45 [Library libraryToTransform]) { 45 [Library libraryToTransform]) {
46 LibraryFilter filter = libraryToTransform != null 46 LibraryFilter filter = libraryToTransform != null
47 ? (Library library) => library == libraryToTransform 47 ? (Library library) => library == libraryToTransform
48 : (_) => true; 48 : (_) => true;
49 ProgramKnowledge knowledge = analyze(program, analyzeLibrary: filter); 49 ProgramKnowledge knowledge = analyze(program, analyzeLibrary: filter);
50 Library mainLibrary = program.mainMethod.parent; 50 Library mainLibrary = program.mainMethod.parent;
51 RuntimeTypeSupportBuilder builder = new RuntimeTypeSupportBuilder( 51 RuntimeTypeSupportBuilder builder =
52 runtimeLibrary, new CoreTypes(program), mainLibrary); 52 new RuntimeTypeSupportBuilder(runtimeLibrary, coreTypes, mainLibrary);
53 ReifyVisitor transformer = 53 ReifyVisitor transformer =
54 new ReifyVisitor(runtimeLibrary, builder, knowledge, libraryToTransform); 54 new ReifyVisitor(runtimeLibrary, builder, knowledge, libraryToTransform);
55 // Transform the main program. 55 // Transform the main program.
56 program = program.accept(transformer); 56 program = program.accept(transformer);
57 if (!filter(runtimeLibrary.interceptorsLibrary)) { 57 if (!filter(runtimeLibrary.interceptorsLibrary)) {
58 // We need to transform the interceptor function in any case to make sure 58 // We need to transform the interceptor function in any case to make sure
59 // that the type literals in the interceptor function are rewritten. 59 // that the type literals in the interceptor function are rewritten.
60 runtimeLibrary.interceptorFunction.accept(transformer); 60 runtimeLibrary.interceptorFunction.accept(transformer);
61 } 61 }
62 builder.createDeclarations(); 62 builder.createDeclarations();
63 program = program.accept(new Erasure(transformer)); 63 program = program.accept(new Erasure(transformer));
64 // TODO(karlklose): skip checks in debug mode 64 // TODO(karlklose): skip checks in debug mode
65 verifyProgram(program); 65 verifyProgram(program);
66 return program; 66 return program;
67 } 67 }
68 68
69 Program transformProgram(Program program) { 69 Program transformProgram(CoreTypes coreTypes, Program program) {
70 RuntimeLibrary runtimeLibrary = findRuntimeTypeLibrary(program); 70 RuntimeLibrary runtimeLibrary = findRuntimeTypeLibrary(program);
71 Library mainLibrary = program.mainMethod.enclosingLibrary; 71 Library mainLibrary = program.mainMethod.enclosingLibrary;
72 return transformProgramUsingLibraries(program, runtimeLibrary, mainLibrary); 72 return transformProgramUsingLibraries(
73 coreTypes, program, runtimeLibrary, mainLibrary);
73 } 74 }
74 75
75 main(List<String> arguments) async { 76 main(List<String> arguments) async {
76 String path = arguments.first; 77 String path = arguments.first;
77 Uri output; 78 Uri output;
78 if (arguments.length > 1) { 79 if (arguments.length > 1) {
79 output = Uri.base.resolve(arguments[1]); 80 output = Uri.base.resolve(arguments[1]);
80 } 81 }
81 Uri uri = Uri.base.resolve(path); 82 Uri uri = Uri.base.resolve(path);
82 Program program = loadProgramFromBinary(uri.toFilePath()); 83 Program program = loadProgramFromBinary(uri.toFilePath());
84 CoreTypes coreTypes = new CoreTypes(program);
83 85
84 RuntimeLibrary runtimeLibrary = findRuntimeTypeLibrary(program); 86 RuntimeLibrary runtimeLibrary = findRuntimeTypeLibrary(program);
85 Library mainLibrary = program.mainMethod.enclosingLibrary; 87 Library mainLibrary = program.mainMethod.enclosingLibrary;
86 program = 88 program = transformProgramUsingLibraries(
87 transformProgramUsingLibraries(program, runtimeLibrary, mainLibrary); 89 coreTypes, program, runtimeLibrary, mainLibrary);
88 90
89 if (output == null) { 91 if (output == null) {
90 // Print result 92 // Print result
91 StringBuffer sb = new StringBuffer(); 93 StringBuffer sb = new StringBuffer();
92 Printer printer = new Printer(sb); 94 Printer printer = new Printer(sb);
93 printer.writeLibraryFile(mainLibrary); 95 printer.writeLibraryFile(mainLibrary);
94 print("$sb"); 96 print("$sb");
95 } else { 97 } else {
96 IOSink sink = new File.fromUri(output).openWrite(); 98 IOSink sink = new File.fromUri(output).openWrite();
97 try { 99 try {
98 new BinaryPrinter(sink).writeProgramFile(program); 100 new BinaryPrinter(sink).writeProgramFile(program);
99 } finally { 101 } finally {
100 await sink.close(); 102 await sink.close();
101 } 103 }
102 try { 104 try {
103 // Check that we can read the binary file. 105 // Check that we can read the binary file.
104 loadProgramFromBinary(output.toFilePath()); 106 loadProgramFromBinary(output.toFilePath());
105 } catch (e) { 107 } catch (e) {
106 print("Error when attempting to read $output."); 108 print("Error when attempting to read $output.");
107 rethrow; 109 rethrow;
108 } 110 }
109 } 111 }
110 } 112 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698