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

Unified Diff: lib/src/codegen/js_codegen.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: merge 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
« no previous file with comments | « lib/runtime/dart_runtime.js ('k') | lib/src/dependency_graph.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/codegen/js_codegen.dart
diff --git a/lib/src/codegen/js_codegen.dart b/lib/src/codegen/js_codegen.dart
index c307d6b273e434a5c38e016c411e64e11d6f2f90..d259e7269d9204af1d50fb53e5c9884fc9f67d6d 100644
--- a/lib/src/codegen/js_codegen.dart
+++ b/lib/src/codegen/js_codegen.dart
@@ -31,9 +31,6 @@ import 'package:dev_compiler/src/report.dart';
import 'package:dev_compiler/src/utils.dart';
import 'code_generator.dart';
-// This must match the optional parameter name used in runtime.js
-const String _jsNamedParameterName = r'opt$';
-
bool _isAnnotationType(Annotation m, String name) => m.name.name == name;
Annotation _getAnnotation(AnnotatedNode node, String name) => node.metadata
@@ -130,7 +127,11 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
}
JS.Statement _initPrivateSymbol(String name) =>
- js.statement('let # = Symbol(#);', [name, js.string(name, "'")]);
+ js.statement('let # = $_SYMBOL(#);', [name, js.string(name, "'")]);
+
+ // TODO(jmesserly): this is a temporary workaround for `Symbol` in core,
+ // until we have better name tracking.
+ String get _SYMBOL => currentLibrary.isDartCore ? 'dart.JsSymbol' : 'Symbol';
@override
JS.Statement visitCompilationUnit(CompilationUnit node) {
@@ -259,7 +260,6 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
js.call('dart.mixin(#)', [_visitList(node.withClause.mixinTypes)]);
var classDecl = new JS.ClassDeclaration(
new JS.ClassExpression(new JS.VariableDeclaration(name), heritage, []));
- if (isPublic(name)) _exports.add(name);
return _finishClassDef(classElem, classDecl);
}
@@ -274,7 +274,6 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
currentClass = node;
var name = classElem.name;
- if (isPublic(name)) _exports.add(name);
var ctors = <ConstructorDeclaration>[];
var fields = <FieldDeclaration>[];
@@ -341,8 +340,11 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
]);
}
+ if (isPublic(name)) _exports.add(name);
+
if (genericDef != null) {
body = js.statement('{ #; let # = #; }', [genericDef, name, genericInst]);
+ if (isPublic(name)) _exports.add(genericName);
}
if (classElem.type.isObject) return body;
@@ -457,9 +459,6 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
var name = cls.name;
var genericName = '$name\$';
var typeParams = cls.typeParameters.map((p) => new JS.Parameter(p.name));
- // TODO(jmesserly): is it worth exporting both names? Alternatively we could
- // put the generic type constructor on the <dynamic> instance.
- if (isPublic(name)) _exports.add(genericName);
return js.statement('let # = dart.generic(function(#) { #; return #; });', [
genericName,
typeParams,
@@ -521,7 +520,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
}
};
}''');
- jsMethods.add(new JS.Method(js.call('Symbol.iterator'), body));
+ jsMethods.add(new JS.Method(js.call('$_SYMBOL.iterator'), body));
}
return jsMethods.where((m) => m != null).toList(growable: false);
}
@@ -598,6 +597,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
// TODO(jmesserly): we'll need to rethink this once the ES6 spec and V8
// settles. See <https://github.com/dart-lang/dev_compiler/issues/51>.
// Performance of this pattern is likely to be bad.
+ name = 'constructor';
body = js.statement('''{
// Get the class name for this instance.
var name = this.constructor.name;
@@ -797,11 +797,11 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
var name = param.identifier.name;
if (param.kind == ParameterKind.NAMED) {
- body.add(js.statement('let # = opt\$.# === void 0 ? # : opt\$.#;', [
+ body.add(js.statement('let # = opt\$ && # in opt\$ ? opt\$.# : #;', [
name,
+ js.string(name, "'"),
name,
_defaultParamValue(param),
- name
]));
} else if (param.kind == ParameterKind.POSITIONAL) {
body.add(js.statement('if (# === void 0) # = #;', [
@@ -865,7 +865,6 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
JS.Method _emitTopLevelProperty(FunctionDeclaration node) {
var name = node.name.name;
- if (isPublic(name)) _exports.add(name);
return new JS.Method(
new JS.PropertyName(name), _visit(node.functionExpression),
isGetter: node.isGetter, isSetter: node.isSetter);
@@ -1160,7 +1159,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
var result = <JS.Parameter>[];
for (FormalParameter param in node.parameters) {
if (param.kind == ParameterKind.NAMED) {
- result.add(new JS.Parameter(_jsNamedParameterName));
+ result.add(new JS.Parameter(r'opt$'));
break;
}
result.add(_visit(param));
« no previous file with comments | « lib/runtime/dart_runtime.js ('k') | lib/src/dependency_graph.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698