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