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

Side by Side Diff: dart/lib/compiler/implementation/dart2js.dart

Issue 10207010: Make dart2js work on Windows. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review comments Created 8 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « dart/frog/frog_leg.dart ('k') | dart/lib/compiler/implementation/filenames.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) 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 #library('dart2js'); 5 #library('dart2js');
6 6
7 #import('dart:io'); 7 #import('dart:io');
8 #import('dart:uri'); 8 #import('dart:uri');
9 #import('dart:utf'); 9 #import('dart:utf');
10 10
11 #import('../compiler.dart', prefix: 'api'); 11 #import('../compiler.dart', prefix: 'api');
12 #import('colors.dart'); 12 #import('colors.dart');
13 #import('source_file.dart'); 13 #import('source_file.dart');
14 14 #import('filenames.dart');
15 String relativize(Uri base, Uri uri) { 15 #import('util/uri_extras.dart');
16 if (base.scheme == 'file' &&
17 base.scheme == uri.scheme &&
18 base.userInfo == uri.userInfo &&
19 base.domain == uri.domain &&
20 base.port == uri.port &&
21 uri.query == "" && uri.fragment == "") {
22 if (uri.path.startsWith(base.path)) {
23 return uri.path.substring(base.path.length);
24 }
25 List<String> uriParts = uri.path.split('/');
26 List<String> baseParts = base.path.split('/');
27 int common = 0;
28 int length = Math.min(uriParts.length, baseParts.length);
29 while (common < length && uriParts[common] == baseParts[common]) {
30 common++;
31 }
32 StringBuffer sb = new StringBuffer();
33 for (int i = common + 1; i < baseParts.length; i++) {
34 sb.add('../');
35 }
36 for (int i = common; i < uriParts.length - 1; i++) {
37 sb.add('${uriParts[i]}/');
38 }
39 sb.add('${uriParts.last()}');
40 return sb.toString();
41 }
42 return uri.toString();
43 }
44 16
45 void compile(List<String> argv) { 17 void compile(List<String> argv) {
46 Uri cwd = new Uri(scheme: 'file', path: getCurrentDirectory()); 18 Uri cwd = getCurrentDirectory();
47 bool throwOnError = false; 19 bool throwOnError = false;
48 bool showWarnings = true; 20 bool showWarnings = true;
49 bool verbose = false; 21 bool verbose = false;
50 Uri libraryRoot = cwd; 22 Uri libraryRoot = cwd;
51 Uri out = cwd.resolve('out.js'); 23 Uri out = cwd.resolve('out.js');
52 24
53 List<String> arguments = <String>[]; 25 List<String> arguments = <String>[];
54 for (String argument in argv) { 26 for (String argument in argv) {
55 if ('--throw-on-error' == argument) { 27 if ('--throw-on-error' == argument) {
56 throwOnError = true; 28 throwOnError = true;
57 } else if ('--suppress-warnings' == argument) { 29 } else if ('--suppress-warnings' == argument) {
58 showWarnings = false; 30 showWarnings = false;
59 } else if ('--verbose' == argument) { 31 } else if ('--verbose' == argument) {
60 verbose = true; 32 verbose = true;
61 } else if (argument.startsWith('--library-root=')) { 33 } else if (argument.startsWith('--library-root=')) {
62 String path = argument.substring(argument.indexOf('=') + 1); 34 String path =
35 nativeToUriPath(argument.substring(argument.indexOf('=') + 1));
63 if (!path.endsWith("/")) path = "$path/"; 36 if (!path.endsWith("/")) path = "$path/";
64 libraryRoot = cwd.resolve(path); 37 libraryRoot = cwd.resolve(path);
65 } else if (argument.startsWith('--out=')) { 38 } else if (argument.startsWith('--out=')) {
66 String path = argument.substring(argument.indexOf('=') + 1); 39 String path =
40 nativeToUriPath(argument.substring(argument.indexOf('=') + 1));
67 out = cwd.resolve(path); 41 out = cwd.resolve(path);
68 } else if (argument.startsWith('-')) { 42 } else if (argument.startsWith('-')) {
69 throw new AbortLeg('unknown option $argument'); 43 throw new AbortLeg('unknown option $argument');
70 } else { 44 } else {
71 arguments.add(argument); 45 arguments.add(nativeToUriPath(argument));
72 } 46 }
73 } 47 }
74 if (arguments.isEmpty()) { 48 if (arguments.isEmpty()) {
75 throw new AbortLeg('no files to compile'); 49 throw new AbortLeg('no files to compile');
76 } 50 }
77 if (arguments.length > 1) { 51 if (arguments.length > 1) {
78 var extra = arguments.getRange(1, arguments.length - 1); 52 var extra = arguments.getRange(1, arguments.length - 1);
79 throw new AbortLeg('extra arguments: $extra'); 53 throw new AbortLeg('extra arguments: $extra');
80 } 54 }
81 55
82 Map<String, SourceFile> sourceFiles = <SourceFile>{}; 56 Map<String, SourceFile> sourceFiles = <SourceFile>{};
83 int dartBytesRead = 0; 57 int dartBytesRead = 0;
84 58
85 Future<String> provider(Uri uri) { 59 Future<String> provider(Uri uri) {
86 if (uri.scheme != 'file') { 60 if (uri.scheme != 'file') {
87 throw new IllegalArgumentException(uri); 61 throw new IllegalArgumentException(uri);
88 } 62 }
89 String source = readAll(uri.path); 63 String source = readAll(uriPathToNative(uri.path));
90 dartBytesRead += source.length; 64 dartBytesRead += source.length;
91 sourceFiles[uri.toString()] = 65 sourceFiles[uri.toString()] =
92 new SourceFile(relativize(cwd, uri), source); 66 new SourceFile(relativize(cwd, uri), source);
93 Completer<String> completer = new Completer<String>(); 67 Completer<String> completer = new Completer<String>();
94 completer.complete(source); 68 completer.complete(source);
95 return completer.future; 69 return completer.future;
96 } 70 }
97 71
98 void info(var message) { 72 void info(var message) {
99 if (verbose) print('${green("info:")} $message'); 73 if (verbose) print('${green("info:")} $message');
(...skipping 30 matching lines...) Expand all
130 class AbortLeg { 104 class AbortLeg {
131 final message; 105 final message;
132 AbortLeg(this.message); 106 AbortLeg(this.message);
133 toString() => 'Aborted due to --throw-on-error: $message'; 107 toString() => 'Aborted due to --throw-on-error: $message';
134 } 108 }
135 109
136 void writeString(Uri uri, String text) { 110 void writeString(Uri uri, String text) {
137 if (uri.scheme != 'file') { 111 if (uri.scheme != 'file') {
138 throw new AbortLeg('unhandled scheme ${uri.scheme}'); 112 throw new AbortLeg('unhandled scheme ${uri.scheme}');
139 } 113 }
140 var file = new File(uri.path).openSync(FileMode.WRITE); 114 var file = new File(uriPathToNative(uri.path)).openSync(FileMode.WRITE);
141 file.writeStringSync(text); 115 file.writeStringSync(text);
142 file.closeSync(); 116 file.closeSync();
143 } 117 }
144 118
145 String readAll(String filename) { 119 String readAll(String filename) {
146 var file = (new File(filename)).openSync(FileMode.READ); 120 var file = (new File(filename)).openSync(FileMode.READ);
147 var length = file.lengthSync(); 121 var length = file.lengthSync();
148 var buffer = new List<int>(length); 122 var buffer = new List<int>(length);
149 var bytes = file.readListSync(buffer, 0, length); 123 var bytes = file.readListSync(buffer, 0, length);
150 file.closeSync(); 124 file.closeSync();
151 return new String.fromCharCodes(new Utf8Decoder(buffer).decodeRest()); 125 return new String.fromCharCodes(new Utf8Decoder(buffer).decodeRest());
152 } 126 }
153
154 String getCurrentDirectory() {
155 String dir = new File(".").fullPathSync();
156 if (dir.endsWith("/")) return dir;
157 return "$dir/";
158 }
OLDNEW
« no previous file with comments | « dart/frog/frog_leg.dart ('k') | dart/lib/compiler/implementation/filenames.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698