OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library js.transformer.js_initializer_generator; | 5 library js.transformer.dart_initializer_generator; |
6 | 6 |
7 import 'package:js/src/js_elements.dart'; | 7 import 'package:js/src/js_elements.dart'; |
8 import 'package:logging/logging.dart'; | 8 import 'package:logging/logging.dart'; |
9 import 'package:quiver/iterables.dart'; | 9 import 'package:quiver/iterables.dart'; |
10 | 10 |
11 final _logger = new Logger('js.transformer.js_initializer_generator'); | 11 final _logger = new Logger('js.transformer.dart_initializer_generator'); |
12 | 12 |
13 const JS_PREFIX = '__package_js_impl__'; | 13 const JS_PREFIX = '__package_js_impl__'; |
14 const JS_THIS_REF = '__js_this_ref__'; | 14 const JS_THIS_REF = '__js_this_ref__'; |
15 | 15 |
16 class JsInitializerGenerator { | 16 class DartInitializerGenerator { |
17 final String libraryName; | 17 final String libraryName; |
18 final String libraryPath; | 18 final String libraryPath; |
19 final JsElements jsElements; | 19 final JsElements jsElements; |
20 | 20 |
21 final buffer = new StringBuffer(); | 21 final buffer = new StringBuffer(); |
22 | 22 |
23 JsInitializerGenerator(this.libraryName, this.libraryPath, this.jsElements); | 23 DartInitializerGenerator(this.libraryName, this.libraryPath, this.jsElements); |
24 | 24 |
25 /** | 25 /** |
26 * Returns the transformed source. | 26 * Returns the transformed source. |
27 */ | 27 */ |
28 String generate() { | 28 String generate() { |
29 buffer.write( | 29 buffer.write( |
30 ''' | 30 ''' |
31 library ${libraryName}__init_js__; | 31 library ${libraryName}__init_js__; |
32 | 32 |
33 import 'dart:js' as js; | 33 import 'dart:js' as js; |
(...skipping 26 matching lines...) Expand all Loading... |
60 | 60 |
61 _generateLibraryExportCall(ExportedLibrary library) { | 61 _generateLibraryExportCall(ExportedLibrary library) { |
62 buffer.writeln(" _export_${library.getPath('_')}(lib);"); | 62 buffer.writeln(" _export_${library.getPath('_')}(lib);"); |
63 } | 63 } |
64 | 64 |
65 _generateLibraryExportMethod(ExportedLibrary library) { | 65 _generateLibraryExportMethod(ExportedLibrary library) { |
66 buffer.writeln( | 66 buffer.writeln( |
67 ''' | 67 ''' |
68 | 68 |
69 void _export_${library.getPath('_')}($JS_PREFIX.JsObject parent) { | 69 void _export_${library.getPath('_')}($JS_PREFIX.JsObject parent) { |
70 JsObject lib = parent['${library.name}']; | 70 js.JsObject lib = parent['${library.name}']; |
71 '''); | 71 '''); |
72 | 72 |
73 library.declarations.values.forEach(_generateDeclarationExportCall); | 73 library.declarations.values.forEach(_generateDeclarationExportCall); |
74 library.children.values.forEach(_generateLibraryExportCall); | 74 library.children.values.forEach(_generateLibraryExportCall); |
75 | 75 |
76 buffer.writeln('}'); | 76 buffer.writeln('}'); |
77 | 77 |
78 library.children.values.forEach(_generateLibraryExportMethod); | 78 library.children.values.forEach(_generateLibraryExportMethod); |
79 library.declarations.values.forEach(_generateDeclarationExport); | 79 library.declarations.values.forEach(_generateDeclarationExport); |
80 } | 80 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 } else if (e is ExportedField) { | 114 } else if (e is ExportedField) { |
115 _generateField(e); | 115 _generateField(e); |
116 } | 116 } |
117 } | 117 } |
118 | 118 |
119 void _generateConstructor(ExportedConstructor c) { | 119 void _generateConstructor(ExportedConstructor c) { |
120 var constructorName = c.name == '' ? '_new' : '_new_${c.name}'; | 120 var constructorName = c.name == '' ? '_new' : '_new_${c.name}'; |
121 var dartParameters = _getDartParameters(c.parameters); | 121 var dartParameters = _getDartParameters(c.parameters); |
122 var jsParameters = _getJsParameters(c.parameters); | 122 var jsParameters = _getJsParameters(c.parameters); |
123 var namedPart = c.name == '' ? '' : '.${c.name}'; | 123 var namedPart = c.name == '' ? '' : '.${c.name}'; |
124 buffer.writeln(" print('exporting constructor: ${constructorName}');"); | |
125 buffer.writeln(" constructor['$constructorName'] = ($jsParameters) => " | 124 buffer.writeln(" constructor['$constructorName'] = ($jsParameters) => " |
126 "new ${c.parent.name}$namedPart($dartParameters);"); | 125 "new ${c.parent.name}$namedPart($dartParameters);"); |
127 } | 126 } |
128 | 127 |
129 void _generateMethod(ExportedMethod c) { | 128 void _generateMethod(ExportedMethod c) { |
130 var dartParameters = _getDartParameters(c.parameters); | 129 var dartParameters = _getDartParameters(c.parameters); |
131 var jsParameters = _getJsParameters(c.parameters, withThis: true); | 130 var jsParameters = _getJsParameters(c.parameters, withThis: true); |
132 buffer.write( | 131 buffer.write( |
133 ''' | 132 ''' |
134 | 133 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 var dartParameters = concat([ | 190 var dartParameters = concat([ |
192 requiredParameters, | 191 requiredParameters, |
193 positionalParameters, | 192 positionalParameters, |
194 dartNamedParameters]) | 193 dartNamedParameters]) |
195 .join(', '); | 194 .join(', '); |
196 | 195 |
197 return dartParameters; | 196 return dartParameters; |
198 } | 197 } |
199 | 198 |
200 } | 199 } |
OLD | NEW |