| 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);
|
|
|