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

Unified Diff: lib/src/transformer/js_initializer_generator.dart

Issue 580283004: Add JsInitializerGenerator (Closed) Base URL: https://github.com/dart-lang/js-interop.git@master
Patch Set: Created 6 years, 3 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/transformer/js_initializer_generator.dart
diff --git a/lib/src/transformer/js_initializer_generator.dart b/lib/src/transformer/js_initializer_generator.dart
index 3a904a5fd7322201c27fd782b01ac9bfaf927417..0a861b58dd68e7b1a08e18de85a822a35f2b5a3d 100644
--- a/lib/src/transformer/js_initializer_generator.dart
+++ b/lib/src/transformer/js_initializer_generator.dart
@@ -26,35 +26,10 @@ class JsInitializerGenerator {
* Returns the transformed source.
*/
String generate() {
- buffer.write(
-'''
-library ${libraryName}__init_js__;
-
-import 'dart:js' as js;
-import '${libraryPath}';
-import 'package:js/src/js_impl.dart' as $JS_PREFIX;
-
-final _obj = js.context['Object'];
-
-initializeJavaScriptLibrary() {
-''');
-
- jsElements.proxies.forEach((Proxy proxy) {
- if (proxy.constructor == null) return;
- var name = proxy.name;
- buffer.writeln(" $JS_PREFIX.registerFactoryForJsConstructor("
- "$JS_PREFIX.context['${proxy.constructor}'], "
- "($JS_PREFIX.JsObject o) => new $name.created(o));");
+ jsElements.exportedLibraries.values.forEach((l) {
+ buffer.writeln("_export_${l.getPath('_')}(dart);");
});
-
- buffer.writeln(" var lib = $JS_PREFIX.context['dart'];");
-
- jsElements.exportedLibraries.values.forEach(_generateLibraryExportCall);
-
- buffer.writeln('}');
-
- jsElements.exportedLibraries.values.forEach(_generateLibraryExportMethod);
-
+ jsElements.exportedLibraries.values.forEach(_generateLibraryExportFunction);
return buffer.toString();
}
@@ -62,12 +37,12 @@ initializeJavaScriptLibrary() {
buffer.writeln(" _export_${library.getPath('_')}(lib);");
}
- _generateLibraryExportMethod(ExportedLibrary library) {
+ _generateLibraryExportFunction(ExportedLibrary library) {
buffer.writeln(
'''
-void _export_${library.getPath('_')}($JS_PREFIX.JsObject parent) {
- JsObject lib = parent['${library.name}'];
+function _export_${library.getPath('_')}(parent) {
+ var lib = parent.${library.name} = {};
''');
library.declarations.values.forEach(_generateDeclarationExportCall);
@@ -75,7 +50,7 @@ void _export_${library.getPath('_')}($JS_PREFIX.JsObject parent) {
buffer.writeln('}');
- library.children.values.forEach(_generateLibraryExportMethod);
+ library.children.values.forEach(_generateLibraryExportFunction);
library.declarations.values.forEach(_generateDeclarationExport);
}
@@ -95,10 +70,18 @@ void _export_${library.getPath('_')}($JS_PREFIX.JsObject parent) {
buffer.writeln(
'''
-void _export_${c.getPath('_')}($JS_PREFIX.JsObject parent) {
- var constructor = parent['${c.name}'];
- $JS_PREFIX.registerJsConstructorForType(${c.name}, constructor['_wrapDartObject']);
- var prototype = constructor['prototype'];
+function _export_${c.getPath('_')}(parent) {
+ var constructor = parent.${c.name} = function _${c.name}() {
+ this.__dart_object__ = constructor._new();
+ };
+ constructor.prototype = Object.create(dart.Object.prototype);
+ constructor.prototype.constructor = constructor;
+ constructor._wrapDartObject = function(dartObject) {
+ var o = Object.create(constructor.prototype);
+ o.__dart_object__ = dartObject;
+ return o;
+ };
+
''');
c.children.values.forEach(_generateClassMember);
@@ -109,22 +92,24 @@ void _export_${c.getPath('_')}($JS_PREFIX.JsObject parent) {
void _generateClassMember(ExportedElement e) {
if (e is ExportedConstructor) {
_generateConstructor(e);
- } else if (e is ExportedMethod) {
- _generateMethod(e);
- } else if (e is ExportedField) {
- _generateField(e);
}
}
void _generateConstructor(ExportedConstructor c) {
- var constructorName = c.name == '' ? '_new' : '_new_${c.name}';
+ if (c.name == '') return;
+ var constructorName = '_new_${c.name}';
+
var dartParameters = _getDartParameters(c.parameters);
var jsParameters = _getJsParameters(c.parameters);
var namedPart = c.name == '' ? '' : '.${c.name}';
- buffer.writeln(" print('exporting constructor: ${constructorName}');");
- buffer.writeln(" constructor['$constructorName'] = ($jsParameters) => "
- "new ${c.parent.name}$namedPart($dartParameters);");
+ buffer.writeln(
+'''
+ constructor.${c.name} = function _${c.name}($jsParameters) {
+ this.__dart_object__ = constructor.$constructorName($jsParameters);
}
+ constructor.${c.name}.prototype = constructor.prototype;
+''');
+ }
void _generateMethod(ExportedMethod c) {
var dartParameters = _getDartParameters(c.parameters);

Powered by Google App Engine
This is Rietveld 408576698