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

Unified Diff: lib/src/codegen/js_codegen.dart

Issue 1235503010: fixes #219, able to compile multiple entry points (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 5 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: lib/src/codegen/js_codegen.dart
diff --git a/lib/src/codegen/js_codegen.dart b/lib/src/codegen/js_codegen.dart
index 3dfbe257d4fe0d3be49cc5232386e3f67b5a27e5..76b0832f9e5296ec76d8147f74d95d54a05cee3e 100644
--- a/lib/src/codegen/js_codegen.dart
+++ b/lib/src/codegen/js_codegen.dart
@@ -13,7 +13,6 @@ import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
import 'package:analyzer/src/generated/scanner.dart'
show StringToken, Token, TokenType;
-import 'package:path/path.dart' as path;
import 'package:dev_compiler/src/codegen/ast_builder.dart' show AstBuilder;
import 'package:dev_compiler/src/codegen/reify_coercions.dart'
@@ -23,7 +22,7 @@ import 'package:dev_compiler/src/codegen/reify_coercions.dart'
import 'package:dev_compiler/src/js/js_ast.dart' as JS;
import 'package:dev_compiler/src/js/js_ast.dart' show js;
-import 'package:dev_compiler/devc.dart' show AbstractCompiler;
+import 'package:dev_compiler/src/compiler.dart' show AbstractCompiler;
import 'package:dev_compiler/src/checker/rules.dart';
import 'package:dev_compiler/src/info.dart';
import 'package:dev_compiler/src/options.dart' show CodegenOptions;
@@ -53,10 +52,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor {
final AbstractCompiler compiler;
final CodegenOptions options;
final TypeRules rules;
- final LibraryInfo libraryInfo;
-
- /// Entry point uri
- final Uri root;
+ final LibraryElement currentLibrary;
/// The global extension type table.
final HashSet<ClassElement> _extensionTypes;
@@ -98,12 +94,11 @@ class JSCodegenVisitor extends GeneralizingAstVisitor {
Map<String, DartType> _objectMembers;
- JSCodegenVisitor(AbstractCompiler compiler, this.libraryInfo,
+ JSCodegenVisitor(AbstractCompiler compiler, this.currentLibrary,
this._extensionTypes, this._fieldsNeedingStorage)
: compiler = compiler,
options = compiler.options.codegenOptions,
- rules = compiler.rules,
- root = compiler.entryPointUri {
+ rules = compiler.rules {
_loader = new ModuleItemLoadOrder(_emitModuleItem);
var context = compiler.context;
@@ -114,7 +109,6 @@ class JSCodegenVisitor extends GeneralizingAstVisitor {
_objectMembers = getObjectMemberMap(types);
}
- LibraryElement get currentLibrary => libraryInfo.library;
TypeProvider get types => rules.provider;
JS.Program emitLibrary(LibraryUnit library) {
@@ -178,7 +172,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor {
_moduleItems.add(js.statement('#.# = #;', [_exportsVar, name, name]));
}
- var jsPath = js.string(jsOutputBase(currentLibrary, root), "'");
+ var jsPath = compiler.getModuleName(currentLibrary.source.uri);
// TODO(jmesserly): it would be great to run the renamer on the body,
// then figure out if we really need each of these parameters.
@@ -187,7 +181,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor {
var processImport = (LibraryElement library, JS.TemporaryId temp,
List list) {
params.add(temp);
- list.add(js.string(jsOutputBase(library, root), "'"));
+ list.add(js.string(compiler.getModuleName(library.source.uri), "'"));
};
var imports = [js.string('dart_runtime/dart')];
@@ -215,7 +209,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor {
var program = [
js.statement("dart_library.library(#, #, #, #, #)", [
- jsPath,
+ js.string(jsPath, "'"),
jsDefaultValue != null ? jsDefaultValue : new JS.LiteralNull(),
js.commentExpression(
"Imports", new JS.ArrayInitializer(imports, multiline: true)),
@@ -2807,12 +2801,14 @@ class JSGenerator extends CodeGenerator {
_addExtensionType(t.superclass);
}
- String generateLibrary(LibraryUnit unit, LibraryInfo info) {
+ String generateLibrary(LibraryUnit unit) {
+ var library = unit.library.element.library;
var fields = findFieldsNeedingStorage(unit);
- var codegen = new JSCodegenVisitor(compiler, info, _extensionTypes, fields);
+ var codegen =
+ new JSCodegenVisitor(compiler, library, _extensionTypes, fields);
var module = codegen.emitLibrary(unit);
- var dir = path.join(outDir, jsOutputPath(info.library, root));
- return writeJsLibrary(module, dir, emitSourceMaps: options.emitSourceMaps);
+ var out = compiler.getOutputPath(library.source.uri);
+ return writeJsLibrary(module, out, emitSourceMaps: options.emitSourceMaps);
}
}
@@ -2827,28 +2823,6 @@ String jsLibraryName(LibraryElement library) => canonicalLibraryName(library);
// TODO(jmesserly): avoid the round tripping through quoted form.
JS.LiteralString _propertyName(String name) => js.string(name, "'");
-/// Path to file that will be generated for [info]. In case it's url is a
-/// `file:` url, we use [root] to determine the relative path from the entry
-/// point file.
-String jsOutputPath(LibraryElement library, Uri root) {
- return '${jsOutputBase(library, root)}.js';
-}
-
-String jsOutputBase(LibraryElement library, Uri root) {
- var uri = library.source.uri;
- var filepath = path.withoutExtension(uri.path);
- if (uri.scheme == 'dart') {
- filepath = 'dart/$filepath';
- } else if (uri.scheme == 'file') {
- filepath = path.relative(filepath, from: path.dirname(root.path));
- } else {
- assert(uri.scheme == 'package');
- // filepath is good here, we want the output to start with a directory
- // matching the package name.
- }
- return filepath;
-}
-
// TODO(jmesserly): validate the library. See issue #135.
bool _isJsNameAnnotation(DartObjectImpl value) => value.type.name == 'JsName';

Powered by Google App Engine
This is Rietveld 408576698