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

Unified Diff: tool/patch_sdk.dart

Issue 1020043002: Replace dart_core.js with actual compiled SDK (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
Index: tool/patch_sdk.dart
diff --git a/tool/patch_sdk.dart b/tool/patch_sdk.dart
index ae1a1abc1f0a2b6de607a5854be21e4dc40736b4..d3c507b58f3b09472060c722c6579fd1e73ed4b4 100755
--- a/tool/patch_sdk.dart
+++ b/tool/patch_sdk.dart
@@ -10,42 +10,54 @@ library dev_compiler.tool.patch_sdk;
import 'dart:io';
import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/src/generated/sdk.dart';
import 'package:path/path.dart' as path;
-import 'input_sdk/lib/_internal/libraries.dart' as sdk;
-
void main(List<String> argv) {
Jennifer Messerly 2015/03/19 22:57:34 These changes aren't really needed, but they let p
- var toolDir = path.relative(path.dirname(Platform.script.path));
- var sdkLibIn = path.join(toolDir, 'input_sdk', 'lib');
- var patchIn = path.join(toolDir, 'input_sdk', 'patch');
- var privateIn = path.join(toolDir, 'input_sdk', 'private');
- var sdkOut =
- path.normalize(path.join(toolDir, '..', 'test', 'generated_sdk', 'lib'));
- var privateLibOut =
- path.normalize(path.join(sdkOut, '_internal', 'compiler', 'js_lib'));
+ if (argv.length < 2) {
+ var self = path.relative(Platform.script.path);
+ var toolDir = path.relative(path.dirname(Platform.script.path));
- var INTERNAL_PATH = '_internal/compiler/js_lib/';
+ var inputExample = path.join(toolDir, 'input_sdk');
+ var outExample = path.relative(
+ path.normalize(path.join(toolDir, '..', 'test', 'generated_sdk')));
+
+ print('Usage: $self INPUT_DIR OUTPUT_DIR');
+ print('For example:');
+ print('\$ $self $inputExample $outExample');
- if (argv.isNotEmpty) {
- print('Usage: ${path.relative(Platform.script.path)}\n');
- print('input SDK directory: $sdkLibIn');
- // We can freely make changes to these two.
- print('input private libs directory: $privateIn');
- print('input patch directory: $patchIn');
- print('output SDK directory: $sdkOut');
+ inputExample = path.join(toolDir, 'min_sdk');
+ outExample = path.join(toolDir, 'out', 'min_sdk');
+ print('\$ $self $inputExample $outExample');
exit(1);
}
+ var input = argv[0];
+ var sdkLibIn = path.join(input, 'lib');
+ var patchIn = path.join(input, 'patch');
+ var privateIn = path.join(input, 'private');
+ var sdkOut = path.join(argv[1], 'lib');
+ var privateLibOut =
+ path.normalize(path.join(sdkOut, '_internal', 'compiler', 'js_lib'));
+
+ var INTERNAL_PATH = '_internal/compiler/js_lib/';
+
// Copy libraries.dart and version
- _writeSync(path.join(sdkOut, '_internal', 'libraries.dart'),
- new File(path.join(sdkLibIn, '_internal', 'libraries.dart'))
- .readAsStringSync());
+ var libContents = new File(path.join(sdkLibIn, '_internal', 'libraries.dart'))
+ .readAsStringSync();
+ _writeSync(path.join(sdkOut, '_internal', 'libraries.dart'), libContents);
_writeSync(path.join(sdkOut, '..', 'version'),
new File(path.join(sdkLibIn, '..', 'version')).readAsStringSync());
+ // Parse libraries.dart
+ var sdkLibraries = _getSdkLibraries(libContents);
+
// Enumerate core libraries and apply patches
- for (var library in sdk.LIBRARIES.values) {
- if (library.platforms & sdk.DART2JS_PLATFORM == 0) continue;
+ for (SdkLibrary library in sdkLibraries) {
+ // TODO(jmesserly): analyzer does not handle the default case of
+ // "both platforms" correctly, and treats it as being supported on neither.
+ // So instead we skip explicitly marked as VM libs.
+ if (library.isVmLibrary) continue;
var libraryOut = path.join(sdkLibIn, library.path);
var libraryIn;
@@ -72,11 +84,12 @@ void main(List<String> argv) {
}
}
- if (library.dart2jsPatchPath != null) {
- var patchPath = path.join(
- patchIn, library.dart2jsPatchPath.replaceAll(INTERNAL_PATH, ''));
- var patchContents = new File(patchPath).readAsStringSync();
+ // See if we can find a patch file.
+ var patchPath = path.join(
+ patchIn, path.basenameWithoutExtension(libraryIn) + '_patch.dart');
+ if (new File(patchPath).existsSync()) {
+ var patchContents = new File(patchPath).readAsStringSync();
contents = _patchLibrary(contents, patchContents);
}
for (var i = 0; i < paths.length; i++) {
@@ -90,8 +103,6 @@ void main(List<String> argv) {
/// Writes a file, creating the directory if needed.
void _writeSync(String filePath, String contents) {
- print('Writing $filePath');
-
var outDir = new Directory(path.dirname(filePath));
if (!outDir.existsSync()) outDir.createSync(recursive: true);
@@ -197,7 +208,10 @@ class PatchApplier extends GeneralizingAstVisitor {
var name = _qualifiedName(node);
var patchNode = patch.patches[name];
- if (patchNode == null) throw 'patch not found for $name: $node';
+ if (patchNode == null) {
+ print('warning: patch not found for $name: $node');
+ return;
+ }
Annotation patchMeta = patchNode.metadata.lastWhere(_isPatchAnnotation);
int start = patchMeta.endToken.next.offset;
@@ -258,10 +272,6 @@ class PatchFinder extends GeneralizingAstVisitor {
}
String _qualifiedName(Declaration node) {
- assert(node is MethodDeclaration ||
- node is FunctionDeclaration ||
- node is ConstructorDeclaration);
-
var parent = node.parent;
var className = '';
if (parent is ClassDeclaration) {
@@ -368,3 +378,9 @@ class _StringEdit implements Comparable<_StringEdit> {
return end - other.end;
}
}
+
+List<SdkLibrary> _getSdkLibraries(String contents) {
+ var libraryBuilder = new SdkLibrariesReader_LibraryBuilder(true);
+ parseCompilationUnit(contents).accept(libraryBuilder);
+ return libraryBuilder.librariesMap.sdkLibraries;
+}
« test/generated_sdk/lib/core/function.dart ('K') | « tool/input_sdk/patch/core_patch.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698