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 part of dart2js.js_emitter; | 5 part of dart2js.js_emitter; |
6 | 6 |
7 | 7 |
8 class OldEmitter implements Emitter { | 8 class OldEmitter implements Emitter { |
9 final Compiler compiler; | 9 final Compiler compiler; |
10 final CodeEmitterTask task; | 10 final CodeEmitterTask task; |
(...skipping 1807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1818 outputSourceMap(assembledCode, mainBuffer, '', | 1818 outputSourceMap(assembledCode, mainBuffer, '', |
1819 compiler.sourceMapUri, compiler.outputUri); | 1819 compiler.sourceMapUri, compiler.outputUri); |
1820 mainBuffer.write( | 1820 mainBuffer.write( |
1821 generateSourceMapTag(compiler.sourceMapUri, compiler.outputUri)); | 1821 generateSourceMapTag(compiler.sourceMapUri, compiler.outputUri)); |
1822 assembledCode = mainBuffer.getText(); | 1822 assembledCode = mainBuffer.getText(); |
1823 } | 1823 } |
1824 | 1824 |
1825 compiler.outputProvider('', 'js') | 1825 compiler.outputProvider('', 'js') |
1826 ..add(assembledCode) | 1826 ..add(assembledCode) |
1827 ..close(); | 1827 ..close(); |
1828 compiler.assembledCode = assembledCode; | |
1829 } | 1828 } |
1830 | 1829 |
1831 /// Used by incremental compilation to patch up the prototype of | 1830 /// Used by incremental compilation to patch up the prototype of |
1832 /// [oldConstructor] for use as prototype of [newConstructor]. | 1831 /// [oldConstructor] for use as prototype of [newConstructor]. |
1833 jsAst.Fun buildSchemaChangeFunction() { | 1832 jsAst.Fun buildSchemaChangeFunction() { |
1834 return js(''' | 1833 return js(''' |
1835 function(newConstructor, oldConstructor, superclass) { | 1834 function(newConstructor, oldConstructor, superclass) { |
1836 // Invariant: newConstructor.prototype has no interesting properties besides | 1835 // Invariant: newConstructor.prototype has no interesting properties besides |
1837 // generated accessors. These are copied to oldPrototype which will be | 1836 // generated accessors. These are copied to oldPrototype which will be |
1838 // updated by other incremental changes. | 1837 // updated by other incremental changes. |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1997 | 1996 |
1998 nativeEmitter.generateNativeClasses(nativeClasses, mainBuffer, | 1997 nativeEmitter.generateNativeClasses(nativeClasses, mainBuffer, |
1999 additionalProperties); | 1998 additionalProperties); |
2000 | 1999 |
2001 nativeEmitter.finishGenerateNativeClasses(); | 2000 nativeEmitter.finishGenerateNativeClasses(); |
2002 nativeEmitter.assembleCode(nativeBuffer); | 2001 nativeEmitter.assembleCode(nativeBuffer); |
2003 | 2002 |
2004 return nativeBuffer; | 2003 return nativeBuffer; |
2005 } | 2004 } |
2006 | 2005 |
2007 void emitProgram(Program program) { | 2006 int emitProgram(Program program) { |
2008 // Shorten the code by using [namer.currentIsolate] as temporary. | 2007 // Shorten the code by using [namer.currentIsolate] as temporary. |
2009 isolateProperties = namer.currentIsolate; | 2008 isolateProperties = namer.currentIsolate; |
2010 | 2009 |
2011 classesCollector = r"$$"; | 2010 classesCollector = r"$$"; |
2012 | 2011 |
2013 // Emit deferred units first, so we have their hashes. | 2012 // Emit deferred units first, so we have their hashes. |
2014 // Map from OutputUnit to a hash of its content. The hash uniquely | 2013 // Map from OutputUnit to a hash of its content. The hash uniquely |
2015 // identifies the code of the output-unit. It does not include | 2014 // identifies the code of the output-unit. It does not include |
2016 // boilerplate JS code, like the sourcemap directives or the hash | 2015 // boilerplate JS code, like the sourcemap directives or the hash |
2017 // itself. | 2016 // itself. |
2018 Map<OutputUnit, String> deferredLoadHashes = emitDeferredOutputUnits(); | 2017 Map<OutputUnit, String> deferredLoadHashes = emitDeferredOutputUnits(); |
2019 CodeBuffer nativeBuffer = buildNativesBuffer(); | 2018 CodeBuffer nativeBuffer = buildNativesBuffer(); |
2020 emitMainOutputUnit(deferredLoadHashes, nativeBuffer); | 2019 emitMainOutputUnit(deferredLoadHashes, nativeBuffer); |
2021 | 2020 |
2022 if (backend.requiresPreamble && | 2021 if (backend.requiresPreamble && |
2023 !backend.htmlLibraryIsLoaded) { | 2022 !backend.htmlLibraryIsLoaded) { |
2024 compiler.reportHint(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE); | 2023 compiler.reportHint(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE); |
2025 } | 2024 } |
| 2025 |
| 2026 // Return the total program size. |
| 2027 return outputBuffers.values.fold(0, (a, b) => a + b.length); |
2026 } | 2028 } |
2027 | 2029 |
2028 String generateSourceMapTag(Uri sourceMapUri, Uri fileUri) { | 2030 String generateSourceMapTag(Uri sourceMapUri, Uri fileUri) { |
2029 if (sourceMapUri != null && fileUri != null) { | 2031 if (sourceMapUri != null && fileUri != null) { |
2030 String sourceMapFileName = relativize(fileUri, sourceMapUri, false); | 2032 String sourceMapFileName = relativize(fileUri, sourceMapUri, false); |
2031 return ''' | 2033 return ''' |
2032 | 2034 |
2033 //# sourceMappingURL=$sourceMapFileName | 2035 //# sourceMappingURL=$sourceMapFileName |
2034 '''; | 2036 '''; |
2035 } | 2037 } |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2276 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { | 2278 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { |
2277 if (element.isInstanceMember) { | 2279 if (element.isInstanceMember) { |
2278 cachedClassBuilders.remove(element.enclosingClass); | 2280 cachedClassBuilders.remove(element.enclosingClass); |
2279 | 2281 |
2280 nativeEmitter.cachedBuilders.remove(element.enclosingClass); | 2282 nativeEmitter.cachedBuilders.remove(element.enclosingClass); |
2281 | 2283 |
2282 } | 2284 } |
2283 } | 2285 } |
2284 } | 2286 } |
2285 } | 2287 } |
OLD | NEW |